51平台下初始化文件的引入导致全局变量无法初始化的问题

在51平台的开发中,遇到全局变量无法初始化的问题,问题源于INIT.A51和STARTUP.A51库文件的引入。这两个文件在复位后执行,主要负责IDATA, XDATA, PDATA段的清零和堆栈初始化。当未手动加入到工程时,此问题不会出现。" 111074970,10292900,Pandas分组聚合:使用agg函数进行数据统计,"['Python', '数据分析', 'Pandas', '数据处理', '数据统计']

写在前面

-----------------

在前段时间的工作中,就遇见过全局变量无法初始化的问题,不过之前是在一些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存储器的空间字节数.
;
;  注意:   IDATA 存储器的空间在物理上包括了8051单片机的DATA和BIT存储器空间.
;           听 说 至少要保证与C51编译器运行库有关的存储器的空间进行0初始化 不知是否
;------------------------------------------------------------------------
参考资源链接:[MCS-51单片机原理与应用:关键概念解析](https://wenku.csdn.net/doc/2wk3thbss5?utm_source=wenku_answer2doc_content) 在MCS-51单片机的应用中,正确初始化堆栈指针SP和使用堆栈来保存和恢复状态标志是非常重要的。这里提供一些专业的指导和步骤来帮助你完成这一任务。 首先,堆栈指针SP在单片机复位后被初始化为07H,这意味着堆栈的起始位置是在内部RAM的地址08H处。通常,为了避免与工作寄存器区发生冲突,建议将堆栈指针初始化到更高的地址,例如30H~7FH之间。 要使用堆栈保存和恢复状态标志,你需要使用到程序状态字寄存器(PSW)。状态标志是PSW中的一部分,包括进位标志CY、辅助进位标志AC、用户标志F0和F1、溢出标志OV和奇偶标志P等。当进行中断处理或子程序调用时,通常会保存当前的状态标志,以防止中断或子程序影响主程序中的状态标志。这可以通过PUSH和POP指令来实现。 具体操作如下: 1. 初始化SP: MOV SP, #40H ; 将堆栈指针设置为内部RAM地址40H,假设3FH地址以下用于工作寄存器。 2. 保存状态标志: PUSH ACC ; 保存累加器的值 PUSH PSW ; 保存程序状态字寄存器的值 ; 在此执行中断服务程序或子程序 3. 恢复状态标志: POP PSW ; 恢复程序状态字寄存器的值,包括状态标志 POP ACC ; 恢复累加器的值 通过上述步骤,你可以在MCS-51单片机中有效地管理堆栈指针和状态标志,确保程序的正确执行。对于单片机初学者来说,这一过程至关重要。为了进一步加深理解和扩展知识,可以参考《MCS-51单片机原理与应用:关键概念解析》一书,其中详细讲解了MCS-51单片机的原理及应用,对堆栈操作和状态标志的管理有深入的解析。此外,还应该查看《单片微型计算机原理与应用课后答案—华中科技大学.doc》,这份文档包含了许多实用的课后练习答案,有助于你通过实际操作来巩固理解。 参考资源链接:[MCS-51单片机原理与应用:关键概念解析](https://wenku.csdn.net/doc/2wk3thbss5?utm_source=wenku_answer2doc_content)
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值