杨为民
发表于 2024-4-18 20:41:33
tzz1983 发表于 2024-4-17 10:26
没有BUG哦, 我做了代码都没死机
代码做好了, 按您的要求做的,
(1)收到,谢谢!
(2)以后在编写STCx51单片机程序的时候,对于bit位变量,千万别再写“P21=!P21”这种形式,请写为“P21=~P21”,丢脸。
自己去调研一下为什么,服不服都回复给初学者看看
tzz1983
发表于 2024-4-18 20:52:28
杨为民 发表于 2024-4-18 20:41
(1)收到,谢谢!
(2)以后在编写STCx51单片机程序的时候,对于bit位变量,千万别再写“P21=!P21”这 ...
千万别再写“P21=!P21”这种形式,请写为“P21=~P21”这是为什么, 我不明白, 多问一次, 再丢一次脸{:shy:}
杨为民
发表于 2024-4-18 21:20:13
tzz1983 发表于 2024-4-18 20:52
这是为什么, 我不明白, 多问一次, 再丢一次脸
张嘴就问,讨奶吃吗?自己去研究
tzz1983
发表于 2024-4-18 21:44:48
杨为民 发表于 2024-4-18 21:20
张嘴就问,讨奶吃吗?自己去研究
我只是怀疑您是意气
P20 = 0X01;
P20 = 0X02;
结果都一样, 不信你去试一试,
说明 Cx51编译器处理bit数据时, 不是当普通的长度只有一位数据来处理,
而是当逻辑量(非0即1)来处理,, 用逻辑运算符"!"有问题吗?
杨为民
发表于 2024-4-18 21:49:27
tzz1983 发表于 2024-4-18 21:44
我只是怀疑您是意气
P20 = 0X01;
千万别再写“P21=!P21”这种形式,请写为“P21=~P21”
你看清题目了吗?这是你丢第3次脸了!
tzz1983
发表于 2024-4-18 22:00:59
本帖最后由 tzz1983 于 2024-4-18 22:02 编辑
杨为民 发表于 2024-4-18 21:49
千万别再写“P21=!P21”这种形式,请写为“P21=~P21”
算了, 不跟你扯这些没用的, 一大把年纪了, 说话那么难听.
什么讨奶不讨奶的. 一个十几行代码都能编到死机为止的. 还弄得谁稀罕一样的
人人都说要尊老, 可老者没数, 非要为老不..
杨为民
发表于 2024-4-18 22:40:37
tzz1983 发表于 2024-4-18 22:00
算了, 不跟你扯这些没用的, 一大把年纪了, 说话那么难听.
什么讨奶不讨奶的. 一个十几行代码都能编到死机 ...
(1)有图有真相,第4次打脸!
(2)这是C251编译器对语句“P21 = !P21; //P21翻转表示任务在运行,没有死机哈(致杨总)”
的编译结果,你自己看看用了多少指令?
; SOURCE LINE # 56
000014 20A103 JB P21,?C0017
000017 D3 SETB C
000018 8001 SJMP ?C0018
?C0017:
00001A C3 CLR C
?C0018:
00001B 92A1 MOV P21,C
(3)这是C251编译器对语句“P21=~P21;”的编译结果
; SOURCE LINE # 57
00001D B2A1 CPL P21
你自己看看用了多少指令?
(4)不作死就不会死!让你研究一下,你不会用汇编列表看看编译结果吗?
(5)不学习会落后,你不看论坛吗?
C51 和 C251 标准库的区别
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7348
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
其中2楼到4楼就是讨论这个问题呀!
(6)只顾挑别人毛病,不涨自己的知识!这是你亲自在该帖4楼的回复?忘啦?今天还要我再贴一次!
十多个时钟有点夸张,看图
https://www.stcaimcu.com/data/attachment/forum/202403/20/105335hszw3gme12gneuc3.png
点评https://www.stcaimcu.com/uc_server/avatar.php?uid=834&size=small tzz1983
看起来只执行了三条指令,其中包含一个跳转,总共5个时钟呀,怎么说有十几个?发表于 2024-3-20 11:25
tzz1983
发表于 2024-4-19 07:56:29
本帖最后由 tzz1983 于 2024-4-19 09:48 编辑
杨为民 发表于 2024-4-18 22:40
(1)有图有真相,第4次打脸!
是的, 上面的红字是我回复的, 可那又怎么样呢,
这只能说明我不太在意这种旁支末节, 我一点都没感觉到丢脸
像这种情况很多,比如:
例1:u8 cnt; if(cnt){......} => if(cnt!=0){......}
例2:u8 cnt; cnt++; if(cnt){......} => if(++cnt){......}
这样的语句, 执行结果是一样的, 语法也没毛病.但是编译出来汇编代码会不一样!
谁又会去在意哪条语句的效率更高?谁又会去说前者是错的还是后者是错的?
对于我来说,通篇回复,最抢眼的莫过于,这一句:
只顾挑别人毛病
是因为我挑了您的刺, 让您不爽了, 然后回头来挑我的刺吧.
可您这刺挑的不痛不痒.
言归正传, P21=~P21; 效率确实是高一些, 该承认的还是得承认, 受教了!
但从另一个角度来说, 使用者C语法和逻辑都没有问题, 结果也是正确的,
严格来说, 这是编译器优化的问题, 不是使用者的问题.
贴帖也说明了C251有这个问题, 而C51就没有!
再者, 看问题的态度:
我认为正常的程序员不要刻意去追求这种"旁支末节"的优化, 没有多少意义,
关键系统代码, 可以用汇编优化, 但这部分很少.
不是关系到系统关键性能的代码, 没有必要去关心反汇编,
把精力放在代码结构和大逻辑层面上来, 收益或许会高一点.
Mr_Zhang
发表于 2024-4-19 12:07:08
stc32G也能跑RTOS嘛 支持支持得学一下
fanxsp
发表于 2024-4-19 12:34:50
tzz1983 发表于 2024-4-19 07:56
是的, 上面的红字是我回复的, 可那又怎么样呢,
这只能说明我不太在意这种旁支末节, 我一点都没感觉到丢脸 ...
昨天我也试了一下,c51是没问题,二者一样,c251我没有试。c251编译器可能是用的人少,都很久没有更新了, 5.6的版本是2018年的。