找回密码
 立即注册
查看: 907|回复: 12

同样的PWM配置,用Keil和SDCC编译,却出现了不同的结果

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:327
  • 最近打卡:2025-04-30 08:05:58

4

主题

17

回帖

459

积分

中级会员

积分
459
发表于 2024-8-3 09:57:23 | 显示全部楼层 |阅读模式



请教:同样的PWM配置用Keil编译,可以产生38K的方波,而用SDCC编译,有方波但频率变小了,这是为何?SDCC那里还需配置

PWM配置

PWM配置

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2024-8-3 10:06:20 | 显示全部楼层
本帖最后由 DebugLab 于 2024-8-3 10:42 编辑

(此处原来有错误的回答已删除)

点评

借楼淘理由:由于编译器的大小端模式不同,导致在读取写入多字节寄存器时会导致结果不同。在地板层大佬给出了解释  发表于 2024-8-7 11:29
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-3 10:09:51 | 显示全部楼层
Debu*** 发表于 2024-8-3 10:06
keil能设置优化等级,影响程序大小和速度,sdcc不知道

但问题是这个不是硬件生成的方波么,,硬件的东西也和不同编译器有关?应该不是吧

点评

啊对对对这硬件的糊涂了  发表于 2024-8-3 10:29
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-8-3 10:17:37 | 显示全部楼层
Keil是端存储,sdcc是端存储。

对于单字节寄存器不会有啥区别,但对于多字节寄存器影响就大了。
而这里的PWMB_ARR就是个双字节寄存器,所以结果肯定会有区别。

要想结果一致,不要使用PWMB_ARR,应当使用PWMB_ARRLPWMB_ARRH
业余撸代码,专业开飞机
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-8-3 10:20:51 | 显示全部楼层
Debu*** 发表于 2024-8-3 10:06
keil能设置优化等级,影响程序大小和速度,sdcc不知道

跟这个无关,PWMB_ARR是个双字节寄存器,keil和sdcc大小端不一样而已
业余撸代码,专业开飞机
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-8-3 10:32:13 | 显示全部楼层
hsr*** 发表于 2024-8-3 10:20
跟这个无关,PWMB_ARR是个双字节寄存器,keil和sdcc大小端不一样而已

奥奥,,有种拨开云雾的感觉,,,是有这种可能
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-8-3 12:08:15 | 显示全部楼层
高位在前低位在后,低位在前高位在后,这个还真乱。但是大小端就是这样。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:327
  • 最近打卡:2025-04-30 08:05:58

4

主题

17

回帖

459

积分

中级会员

积分
459
发表于 2024-8-3 12:08:53 | 显示全部楼层
hsr*** 发表于 2024-8-3 10:17
Keil是大端存储,sdcc是小端存储。

对于单字节寄存器不会有啥区别,但对于多字节寄存器影响就大了。

果然高手在论坛里,感谢高手的指点,问题得到解决了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:456
  • 最近打卡:2025-05-02 08:26:53
已绑定手机

27

主题

341

回帖

1691

积分

金牌会员

机长

积分
1691
发表于 2024-8-3 12:18:18 | 显示全部楼层
so*** 发表于 2024-8-3 12:08
高位在前低位在后,低位在前高位在后,这个还真乱。但是大小端就是这样。 ...

其实真要说起来,sdcc才是更符合51原始设计的,从DPTR这些都都看出MCS-51是小端的。
但是keil却偏偏又用大端,而且它几乎是唯一的编译器,STC为了迁就keil扩展的寄存器全是大端了……
业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-05-01 10:58:55

44

主题

230

回帖

2841

积分

金牌会员

积分
2841
发表于 2024-8-7 11:24:01 | 显示全部楼层
我之前也分享过一个关于大端序小端序问题的文章,除了pwm 还有别的场景可能遇到: https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3127
不争是争
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 08:44 , Processed in 0.145507 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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