我正在为LPC2148使用NEX Robotics板。我发现下面的代码行很奇怪。
//Prototypes
void diaplayInRow1WithPosition(unsigned char* data, unsigned char position);
void diaplayInRow2WithPosition(unsigned char* data, unsigned char position);
unsigned char convertHigherNibbleToASCIIValue(unsigned char data);
unsigned char convertLowerNibbleToASCIIValue(unsigned char data);
int main (void)
{
unsigned char temp2;
unsigned int PLLStatus;
initializeAll();
PLLStatus = PLL0STAT;
temp2 = convertLowerNibbleToASCIIValue(PLLStatus);
diaplayInRow1WithPosition(&temp2,15);
temp2 = convertHigherNibbleToASCIIValue(PLLStatus);
diaplayInRow1WithPosition(&temp2,14);
temp2 = PLLStatus>>8;
temp2 = convertLowerNibbleToASCIIValue(PLLStatus);
diaplayInRow1WithPosition(&temp2,13);
return(0);
}
执行此代码时,我看到一个空白显示。我注意到问题出在最后一个convertLowerNibbleToASCIIValue函数调用上。应该是:
temp2 = convertLowerNibbleToASCIIValue(temp2 );
但由于这一行错误,为什么整个显示都是空白的?只有最后一个函数diaplayInRow1WithPosition应该给出麻烦吗? 即使用上面的线改变后,我也会显示空白。所以我将包含最后一个convertLowerNibbleToASCIIValue的行替换为
temp2 = convertLowerNibbleToASCIIValue(PLLStatus>>8);
最后我得到了正确的展示。
无法消化问题。有人可以帮忙吗?我需要的主要答案是,如果一行中存在问题,为什么以前的行没有正确执行?我正在使用Keil编译器和任何编译器依赖项?没有编译错误。 如果类型等有问题,整个程序会被破坏吗?
答案 0 :(得分:0)
比“整个程序无效”的可能性更大:
PLLStatus
的值不可显示并且具有消隐显示效果或者可能使其完全正常工作 - 它可能不是可打印的字符,并且我们没有得到关于显示的信息硬件或其API,因此 garbage-in 的效果未定义。答案 1 :(得分:0)
最后发现问题是用Keil编译的。如果我添加一个额外的虚拟线(可能是任何赋值语句),代码工作!某处正在进行一些优化,但无法确定哪里。无论如何,我现在已经解决了。如果不起作用,请添加一个假人,如果不需要则再次删除!!!