中级会员
 
- 积分
- 297
- 金钱
- 297
- 注册时间
- 2012-12-22
- 在线时间
- 24 小时
|

楼主 |
发表于 2016-2-28 12:45:54
|
显示全部楼层
想尽了各种办法也搞不定。。。MDK 和 IAR相比还是逊色了不少,下面是MDK 和 IAR 对 OS_CRITICAL_EXIT();的反汇编结果 都是开最高等级的代码优化,结果却。。。
MDK:
0x000006A4 LDRB r0,[r1,#0x00]
0x000006A6 CMP r0,#0x00
0x000006A8 BEQ 0x000006AE
0x000006AA SUBS r0,r0,#1
0x000006AC STRB r0,[r1,#0x00]
IAR:
0x0800073C LDRB R0, [R4]
0x0800073E CMP R0, #0
0x08000740 BEQ.N 0x080074C
0x08000742 SUBS R0, R0, #1
0x08000744 STRB R0, [R4]
0x08000746 UXTB R0, R0
0x08000748 CMP R0, #0
0x0800074A BNE.N 0x0800074E
0x0800074C CPSIE I
可以看到MDK最高优化直接把 if(OSCriNestNum == 0) OS_INTERRUPT_OPEN(); 这个判断给干掉了。。。
没办法这就是差距,如果要用MDK还必须用汇编去写这段代码。。。真是服气了
或者还是老老实实的不要用代码优化。。。 |
|