Arm 由于一个逻辑错误,整个程序无法运行
我正在为LPC2148使用NEX机器人板。我发现下面几行代码有一个非常奇怪的问题Arm 由于一个逻辑错误,整个程序无法运行,arm,embedded,lpc,Arm,Embedded,Lpc,我正在为LPC2148使用NEX机器人板。我发现下面几行代码有一个非常奇怪的问题 //Prototypes void diaplayInRow1WithPosition(unsigned char* data, unsigned char position); void diaplayInRow2WithPosition(unsigned char* data, unsigned char position); unsigned char convertHigherNibbleToASCIIVa
//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);
}
当执行此代码时,我看到一个空白显示。我注意到问题在于最后一次ConvertLowerNibbleToAscivalue函数调用。应该是:
temp2 = convertLowerNibbleToASCIIValue(temp2 );
但由于这一行错误,为什么整个显示是空白的?只有最后一个函数DIPLAYINROW1WITHPOSITION才会出现问题,对吗?
即使在改变了以上的行,我得到了空白显示。因此,我将包含最后一个ConvertLowerNibbleToAscivalue的行替换为
temp2 = convertLowerNibbleToASCIIValue(PLLStatus>>8);
最后我得到了正确的显示
无法消化这个问题。有人能帮忙吗?我需要的主要答案是,如果一行中有问题,为什么前面的行不能正确执行?我正在使用Keil编译器和任何编译器依赖项?没有编译错误。
如果类型等出现问题,整个程序是否会损坏?比“整个程序不工作”更可能的情况是:
- 显示数据被缓冲,并且在缓冲数据到达显示器之前程序崩溃
- 或者简单地说,
的值是不可显示的,并且会导致显示空白,或者可能会完全停止它的工作-它可能不是可打印字符,并且我们没有得到有关显示硬件或其API的信息,因此垃圾的影响是未定义的PLLStatus