This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

定义局部变量造成的nERROR

Other Parts Discussed in Thread: TMS570LS1227

各位好:

  TMS570LS1227初始化程序sys_startup.c (自动生成的代码)中,函数_c_int00()中有针对系统状态寄存器SYS_EXCEPTION、看门狗状态寄存器WATCHDOG_STATUS、esmREG->SR1[2]寄存器,这三个寄存器值的判断;

  因为无法在线修改这三个寄存器,导致无法模拟各种状态,自行定义三个变量,判断之前把寄存器值读取出来放在变量中,再拿变量去做判断,理论上不影响判断结果。

  实际情况如下:

         若在函数内部定义这三个变量(局部变量),烧录程序后,重新下电上电会出现nERROR信号出低保护;

         若在函数外部定义这三个变量(全局变量),烧录程序后,重新下电上电 则能正常运行;

 请各位大侠帮忙分析一下是什么原因呢

原文件和两种修改文件如下所示。

  • 根据编译器的规定,局部变量是存放在堆栈里面的。

    而堆栈的初始化是在_c_int00函数中的进行的。所以,理论上来讲,在_c_int00中是不能够定义局部变量的。道理很简单,堆栈还没有初始化,定义的局部变量该怎么分配呢?

  • 马甲兄说的很对啊,必须先初始化堆栈后才可以定义局部变量,要给局部变量先开辟出存储空间。