找回密码
 立即注册
查看: 56|回复: 3

STC32定时器初始化问题

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-10-30 14:04:26

9

主题

17

回帖

279

积分

中级会员

积分
279
发表于 2025-10-21 09:54:11 | 显示全部楼层 |阅读模式
请教一下,同样的代码,在两个工程编译出来的汇编结果不一样,导致定时器无法正常初始化,Keil的工程配置一模一样。
正常的编译应该是ORL AUXR(0x8E),#P0(0x80)

正常编译

正常编译

异常编译ORL  DI_Data(0x8E),#PO(0x80)
DI_Data是一个数组变量

异常编译

异常编译




一开始以为是emoveUnused的问题,删除后也是一样的



知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

3

主题

1849

回帖

546

积分

等待验证会员

积分
546
发表于 2025-10-21 10:00:00 | 显示全部楼层
您好,关于您在使用 STC32 系列单片机时遇到的定时器初始化问题,即在两个配置相同的 Keil 工程中,编译结果出现差异,导致定时器初始化失败的问题,我将从编译器行为、符号解析机制、工程配置细节等方面进行专业分析,并提出排查与解决方案。

一、问题现象总结

您提到:
两工程配置完全一致;
同一段 C 语言代码在不同工程中生成的汇编代码不一致;
正常情况应为:ORL AUXR(0x8E), #P0(0x80);
异常情况下变为:ORL DIData(0x8E), #PO(0x80);
其中 DIData 是一个数组变量,而非寄存器地址;
删除 removeUnused 后仍无效。

这表明问题可能出在符号解析错误或寄存器定义冲突上。

二、AUXR 寄存器的作用与初始化方式

在 STC32 系列单片机中,AUXR 是一个关键的辅助寄存器,用于控制定时器/计数器的工作模式、预分频等参数。例如:

```c
AUXR |= (1

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:25
  • 最近打卡:2025-10-30 14:04:26

9

主题

17

回帖

279

积分

中级会员

积分
279
发表于 2025-10-21 10:07:18 | 显示全部楼层
DI_Data的地址与AUXR的地址值刚好都为0x8E,但两个对象实际不是一个区域的地址,编译器错误的将他们混淆
截图202510211005266559.jpg

点评

汇编结果来看是一样的指令码,证明这条指令是都是一样的。 他里面写的那个括号内容都是推测,就像后面的0x80只是一个值,并不是P0的地址一样 实际导致无法正常初始化的应该有其他原因  详情 回复 发表于 2025-10-22 09:04
知识改变命运,技能成就梦想!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:604
  • 最近打卡:2025-10-30 10:25:05
已绑定手机
已实名认证

121

主题

2941

回帖

7619

积分

版主

积分
7619
发表于 2025-10-22 09:04:34 | 显示全部楼层
29*** 发表于 2025-10-21 10:07
DI_Data的地址与AUXR的地址值刚好都为0x8E,但两个对象实际不是一个区域的地址,编译器错误的将他们混淆 ...

汇编结果来看是一样的指令码,证明这条指令是都是一样的。
他里面写的那个括号内容都是推测,就像后面的0x80只是一个值,并不是P0的地址一样
实际导致无法正常初始化的应该有其他原因
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-30 22:03 , Processed in 0.122019 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表