【发布时间】:2011-01-30 07:55:38
【问题描述】:
如果我尝试使用以下函数 (e2CheckPINoverride) 来检查输入的 5 字节数组 (p) 与存储在闪存中的 5 字节数组(数据),以简单地返回 true 或 false 值。 但似乎无论我尝试什么,它都只会返回“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;
}
我已经在defines.h文件中赋值了真假:
#ifndef TRUE
#define TRUE ((UCHAR)1)
#endif
#ifndef FALSE
#define FALSE ((UCHAR)0)
#endif
在哪里
typedef unsigned char UCHAR;
当我单步执行代码时,它正确执行了所有检查,传入正确的值,正确比较它,然后在正确的点中断,但无法处理 true 的返回值?
请帮忙?
【问题讨论】:
-
能否请将您的电话改为
BYTE ret = e2CheckPINoverride(pinEntry); if (ret == 1) { PTDD_PTDD1 = 1; } else { PTDD_PTDD1 = 0; }并告诉我们ret的值? -
@Vlad - 解决了它!这似乎是一个随意的改变,你能向我解释一下,有什么不同吗?所以我的代码现在看起来像这样
ret= (e2CheckPINoverride(pinEntry)); //where ret is assigned as BYTE if (ret==1) { PTDD_PTDD1 = 1; } else{ PTDD_PTDD1 = 0; }并且它工作正常,当为假时分配'0',当为真时分配'1'。谢谢! -
这可能取决于 BYTE 的实际定义。也许
TRUE和FALSE已经定义了,所以你的#ifdef-ed 代码实际上永远不会执行? -
您应该在函数返回时使用程序集对其进行调试,以了解其工作原理并查看可能出现的问题
标签: c return-value variable-assignment