杨为民 发表于 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年的。
页: 1 [2] 3 4 5 6 7 8
查看完整版本: FreeRTOS @32G12K128移植; FreeRTOS @AI8051U移植来了|重复造车轮