写在前面
-----------------
在前段时间的工作中,就遇见过全局变量无法初始化的问题,不过之前是在一些C文件中定义的变量能初始化,而其他C文件中不能初始化,当时将这个问题绕过去了,并没有去深究...而这一周又出现了这个问题。于是就有了这篇文章
这里不去讨论其他情况下全局变量无法初始化的问题,只是针对我所遇见的问题讨论....
原因:由于引入库文件INIT.A51和STARTUP.A51导致的, 这里之所以要引入这两个文件,是由我们的应用环境决定的,如果在实际过程中没有手动引入这两个文件到工程项目中,则不会出现我这里提到的类似问题。
简述如下:
mcu复位后 PC=0 先执行STARTUP.A51的相关文件,该文件主要是对IDATA XDATA PDATA清零以及初始化堆栈指针;附上网络上一篇文章对其的讲解之部分关键代码:
; STARTUP.A51: 用户上电初始化程序
;------------------------------------------------------------------------------
;
; 用户定义需上电初始化的内存空间
;
; 使用以下EQU命令可定义在CPU复位时需用0进行初始化的内存空间
;
;;
; IDATA 存储器的空间的绝对起始地址总是0.;
IDATALEN EQU 80H ; 需用0进行初始化的IDATA存储器空间的字节数
;
XDATASTART EQU 0H ; XDATA存储器空间的绝对起始地址
XDATALEN EQU 400H ; 需用0进行初始化的XDATA存储器的空间字节数.
;
PDATASTART EQU 0H ; PDATA存储器的空间的绝对起始地址
PDATALEN EQU 0H ; 需用0进行初始化的PDATA存储器的空间字节数.
;