同样的PWM配置,用Keil和SDCC编译,却出现了不同的结果
请教:同样的PWM配置用Keil编译,可以产生38K的方波,而用SDCC编译,有方波但频率变小了,这是为何?SDCC那里还需配置
本帖最后由 DebugLab 于 2024-8-3 10:42 编辑
(此处原来有错误的回答已删除) DebugLab 发表于 2024-8-3 10:06
keil能设置优化等级,影响程序大小和速度,sdcc不知道
但问题是这个不是硬件生成的方波么,,硬件的东西也和不同编译器有关?应该不是吧 Keil是大端存储,sdcc是小端存储。
对于单字节寄存器不会有啥区别,但对于多字节寄存器影响就大了。
而这里的PWMB_ARR就是个双字节寄存器,所以结果肯定会有区别。
要想结果一致,不要使用PWMB_ARR,应当使用PWMB_ARRL和PWMB_ARRH。
DebugLab 发表于 2024-8-3 10:06
keil能设置优化等级,影响程序大小和速度,sdcc不知道
跟这个无关,PWMB_ARR是个双字节寄存器,keil和sdcc大小端不一样而已 hsrzq 发表于 2024-8-3 10:20
跟这个无关,PWMB_ARR是个双字节寄存器,keil和sdcc大小端不一样而已
奥奥,,有种拨开云雾的感觉,,,是有这种可能{:4_250:} 高位在前低位在后,低位在前高位在后,这个还真乱。但是大小端就是这样。 hsrzq 发表于 2024-8-3 10:17
Keil是大端存储,sdcc是小端存储。
对于单字节寄存器不会有啥区别,但对于多字节寄存器影响就大了。
果然高手在论坛里,感谢高手的指点,问题得到解决了 soma 发表于 2024-8-3 12:08
高位在前低位在后,低位在前高位在后,这个还真乱。但是大小端就是这样。 ...
其实真要说起来,sdcc才是更符合51原始设计的,从DPTR这些都都看出MCS-51是小端的。
但是keil却偏偏又用大端,而且它几乎是唯一的编译器,STC为了迁就keil扩展的寄存器全是大端了…… 我之前也分享过一个关于大端序小端序问题的文章,除了pwm 还有别的场景可能遇到: https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3127
页:
[1]
2