STC32定时器初始化问题
请教一下,同样的代码,在两个工程编译出来的汇编结果不一样,导致定时器无法正常初始化,Keil的工程配置一模一样。正常的编译应该是ORL AUXR(0x8E),#P0(0x80)
异常编译ORLDI_Data(0x8E),#PO(0x80)
DI_Data是一个数组变量
一开始以为是emoveUnused的问题,删除后也是一样的
您好,关于您在使用 STC32 系列单片机时遇到的定时器初始化问题,即在两个配置相同的 Keil 工程中,编译结果出现差异,导致定时器初始化失败的问题,我将从编译器行为、符号解析机制、工程配置细节等方面进行专业分析,并提出排查与解决方案。
一、问题现象总结
您提到:
两工程配置完全一致;
同一段 C 语言代码在不同工程中生成的汇编代码不一致;
正常情况应为:ORL AUXR(0x8E), #P0(0x80);
异常情况下变为:ORL DIData(0x8E), #PO(0x80);
其中 DIData 是一个数组变量,而非寄存器地址;
删除 removeUnused 后仍无效。
这表明问题可能出在符号解析错误或寄存器定义冲突上。
二、AUXR 寄存器的作用与初始化方式
在 STC32 系列单片机中,AUXR 是一个关键的辅助寄存器,用于控制定时器/计数器的工作模式、预分频等参数。例如:
```c
AUXR |= (1
[本文内容由国芯人工智能辅助生成,仅供参考] DI_Data的地址与AUXR的地址值刚好都为0x8E,但两个对象实际不是一个区域的地址,编译器错误的将他们混淆 29aH 发表于 2025-10-21 10:07
DI_Data的地址与AUXR的地址值刚好都为0x8E,但两个对象实际不是一个区域的地址,编译器错误的将他们混淆 ...
汇编结果来看是一样的指令码,证明这条指令是都是一样的。
他里面写的那个括号内容都是推测,就像后面的0x80只是一个值,并不是P0的地址一样
实际导致无法正常初始化的应该有其他原因
页:
[1]