找回密码
 立即注册
查看: 1304|回复: 8

C251优化编程之bit篇

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:557
  • 最近打卡:2025-06-15 09:02:29

24

主题

524

回帖

1220

积分

荣誉版主

积分
1220
发表于 2024-7-13 12:14:06 | 显示全部楼层 |阅读模式
虽然C251编译器推出的时间有20多年了,因为8xC251核的mcu在2019年之前并没有大批量生产和使用,也造成C251编译器不如C51编译器那么完善。而且C251编译器在2018年后停止更新。
虽然C251编译器有诸多缺点,但是在没有第二种选择的情况下,C251编译器在相当长的时间内是STC32的唯一的选择。
为了避免在使用C251编译器出现BUG,还要让编译结果在STC32芯片上高效运行,所以优化C代码,是必做的功课。

之一:bit篇

1,对端口取反:
  P54 = ~P54; //编译结果----->

0xFF09B5   B2CC        CPL      P54(0xC8.4)

如果: P54 = !P54;  //编译结果---->

  1653:      
0xFF09B5   20CC03      JB       P54(0xC8.4),C:0x09BB
0xFF09B8   D3          SETB     C
0xFF09B9   8001        SJMP     C:0x09BC
0xFF09BB   C3          CLR      C
0xFF09BC   92CC        MOV      P54(0xC8.4),C


2, if(b_busy)   //编译结果----->

0xFF0A5C   300199      JNB      b_busy(0x20.1),C:0x09F8

  如果:if(b_busy == 1)   //编译结果----->

0xFF0911   A200        MOV      C,b_busy(0x20.1)
0xFF0913   E4          CLR      A
0xFF0914   33          RLC      A
0xFF0915   B40128      CJNE     A,#0x01,C:0x0940


3,             if(!b_busy) //编译结果---->
  1701:         {
0xFF0A02   200028      JB       b_busy(0x20.1),C:0x0A2D


  如果:         if(b_busy == 0) //编译结果---->
  1701:         {
0xFF0911   A200        MOV      C,b_busy(0x20.1)
0xFF0913   E4          CLR      A
0xFF0914   33          RLC      A
0xFF0915   7828        JNE      C:0x093F



4,使用_testbit_():

if (!_testbit_(RI)) //编译结果---->

0xFF0A2D   10989D      JBC      RI(0x98.0),C:0x09CD


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-16 10:39:44
已绑定手机

29

主题

349

回帖

1991

积分

金牌会员

机长

积分
1991
发表于 2024-7-13 12:54:38 | 显示全部楼层
wnag*** 发表于 2024-7-13 12:33
好好好,这样看我的代码习惯是很不好的

其实你的习惯应该才是更好的。
但是……为了……就……知道吧。
业余撸代码,专业开飞机 https://gitee.com/STC-MCU
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:566
  • 最近打卡:2025-06-16 07:52:44

113

主题

2027

回帖

5810

积分

论坛元老

积分
5810
发表于 2024-7-13 15:28:50 | 显示全部楼层
先收藏,后继续关注内容更新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-06-16 08:14:02

28

主题

336

回帖

2892

积分

荣誉版主

积分
2892
发表于 2024-7-13 17:02:02 | 显示全部楼层
学习ing~~~
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2025-06-15 22:44:24
已绑定手机

19

主题

3231

回帖

5281

积分

论坛元老

积分
5281
发表于 2024-7-13 17:15:49 | 显示全部楼层
收藏持续关注,C251编译器暂时也没有替换方案。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:564
  • 最近打卡:2025-06-16 10:28:17
已绑定手机

50

主题

1816

回帖

3130

积分

论坛元老

积分
3130
发表于 2024-7-13 20:35:21 | 显示全部楼层
喜欢这个帖子,谢谢分享
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-06-16 10:39:44
已绑定手机

29

主题

349

回帖

1991

积分

金牌会员

机长

积分
1991
发表于 2024-7-13 20:59:47 | 显示全部楼层
wnag*** 发表于 2024-7-13 20:44
我明白了?还是我应该明白了?

哈哈哈哈,绕进去了。
鱼与熊掌不可兼得~~
为了效率,不得不向编译器低头
业余撸代码,专业开飞机 https://gitee.com/STC-MCU
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:557
  • 最近打卡:2025-06-15 09:02:29

24

主题

524

回帖

1220

积分

荣誉版主

积分
1220
发表于 2024-7-13 21:23:50 | 显示全部楼层
if(b_busy) 和 if(!b_busy) 是C语言中判断bool变量 标准写法。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:564
  • 最近打卡:2025-06-16 10:28:17
已绑定手机

50

主题

1816

回帖

3130

积分

论坛元老

积分
3130
发表于 2024-7-16 20:28:26 | 显示全部楼层
希望stc官方多出这种已知有坑的bug教程
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 18:22 , Processed in 0.190481 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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