如果我试图检查输入5字节数组(p)对存储在flash(数据)中的5字节数组,使用以下函数(e2CheckPINoverride),只返回true或false值。 但似乎无论我尝试什么,它只会返回'假'。
我在这里调用函数:
if (e2CheckPINoverride(pinEntry) == 1){
PTDD_PTDD1 = 1;
}
else{
PTDD_PTDD1 = 0;
}
这是功能:
BYTE e2CheckPINoverride(BYTE *p)
{
BYTE i;
BYTE data[5];
if(e2Read(E2_ENABLECODE, data, 5)) {
if(data[0] != p[0]) return FALSE;
if(data[1] != p[1]) return FALSE;
if(data[2] != p[2]) return FALSE;
if(data[3] != p[3]) return FALSE;
if(data[4] != p[4]) return FALSE;
}
return TRUE;
}
我已经在define.h文件中指定了true和false:
#ifndef TRUE
#define TRUE ((UCHAR)1)
#endif
#ifndef FALSE
#define FALSE ((UCHAR)0)
#endif
和
typedef unsigned char UCHAR;
当我单步执行代码时,它会正确执行所有检查,传递正确的值,正确比较然后在正确的点处中断,但是无法处理返回值true?
请帮帮忙?
答案 0 :(得分:4)
#define TRUE 1
#define FALSE 0
忘记unsigned char。你可以假设在c 0是假的,其他一切都是真的
答案 1 :(得分:2)
可能不会解决你的问题,但你应该写:
PTDD_PTDD1 = e2CheckPINoverride(pinEntry) ? 1 : 0;
此外,您正在混合使用BYTE和UCHAR(即使它们可能相同)
答案 2 :(得分:1)
尝试通过免除#define并简单地说
来缩小范围return 1;
如果可以,那么某些东西不适用于你的#define。
答案 3 :(得分:1)
如果您返回TRUE
或FALSE
,您还应该检查它们。像这样重写if
子句:
if (e2CheckPINoverride(pinEntry) == TRUE) { // instead of '== 1'
答案 4 :(得分:1)
IMO,你正在创造大量不必要的复杂性。我写的函数是这样的:
int e2CheckPINoverride(BYTE *p) {
BYTE data[5];
return e2Read(E2_ENABLECODE, data, 5) &&
data[0] == p[0] &&
data[1] == p[1] &&
data[2] == p[2] &&
data[3] == p[3] &&
data[4] == p[4];
}
调用代码变得简单:
PTDD_PTDD1 = e2CheckPINoverride(pinEntry);
答案 5 :(得分:0)
我测试过的一个小例子。我不知道e2Read的内容所以我只做了一个假的
#ifndef UCHAR
typedef unsigned char UCHAR;
#endif
#ifndef BYTE
typedef char BYTE;
#endif
#ifndef TRUE
#define TRUE ((UCHAR)1)
#endif
#ifndef FALSE
#define FALSE ((UCHAR)0)
#endif
int e2Read(int myconst, BYTE* data, int num)
{
int i;
for(i=0;i<num;i++)
*(data++) = 0; // You can change thisone to test different results.
return 1;
}
BYTE e2CheckPINoverride(BYTE *p)
{
#define E2_ENABLECODE 3
BYTE data[5];
if(e2Read(E2_ENABLECODE, data, 5)) {
if(data[0] != p[0]) return FALSE;
if(data[1] != p[1]) return FALSE;
if(data[2] != p[2]) return FALSE;
if(data[3] != p[3]) return FALSE;
if(data[4] != p[4]) return FALSE;
}
return TRUE;
}
int main(void)
{
BYTE b[5] = {0,0,0,0,0};// You can change thisone to test different results.
BYTE* pinEntry = b;
if (e2CheckPINoverride(pinEntry) == 1){
printf("Returned true\n");
}
else{
printf("Returned false\n");
}
return 0;
}
答案 6 :(得分:-1)
您的数据数组从未初始化,因此内部具有随机值。
BYTE data[5];
因此,您要将数组p中的元素与数组数据中的随机值进行比较。它几乎总是返回FALSE。
结论: 用有意义的数据填充数据数组。