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.

难道遇到了msp430f5529代码占用RAM溢出?



您好:我现在遇到一个想不明白的问题。

我正在使用一个COG12864液晶屏时,为了保存写入的数据,我想开辟单片机内部1KB(=8*128)的RAM充当其缓存。定义方式如下:

#define PAGE            8
#define COLUMN     128

static uint8 COG12864Memory[PAGE][COLUMN];

现象:

第一步:当我 COLUMN 定义为128 时,编译下载后,理论上应该进入调试状态,然后我可以点击运行按钮,进行下一步调试。可是现在,当我下载完后,程序直接自动运行了!现象如下:

并且此时程序并没有真的运行(在main文件中设置的断点,没有被执行)。

接着,我点击了暂停按钮,想看看程序停在了哪里,CCS给出了这样的警告:

第二步:我把COLUMN宏 定义为120 后,程序可以正常进入调试界面,且正常运行。

请问专家,这是什么原因呢? 我查过5529芯片,内存SRAM有8+2KB ,我应该没有超过内存吧!?那又是什么原因导致的程序无法运行呢?(我这里程序代码很简单,没有其他地方占用RAM资源。用到的COG屏幕库文件API,I都在M4中运行过,没问题的,到了5529上就不行了)

  • 问题得到解决了! 原因很简单,就是uint8 COG12864Memory[8][128];这里出了问题。

          原来申请内存需要提前赋初值,正确定义格式为uint8 COG12864Memory[8][128]={0};!!!!!!!!!!!!!

    以前总以为直接定义全局变量,自动回分配空间并赋初值0!这回领教了。 但是还是不知道这是什么原因,为什么一定要赋初值?

  • 问题得到解决了!! 在我差错期间,我最终锁定到了uint8 COG12864Memory[8][128];这个内存申请数组全局变量上。  原来没有赋初值,当我这样操作:uint8 COG12864Memory[8][128]={0};后,程序就恢复到正常调试界面了!!!!程序也正常跑了! 

      以前用M4调试这个屏幕,并没有发现这个问题。难道是,在430单片机上,这样uint8 COG12864Memory[8][128];不赋初值就无法分配内存?  问题表象虽然解决了,但是还是不明白,为什么定义全局数组变量,一定要赋初值。  不是全局变量默认初值为0吗?  有那个专家帮忙指点一下。