- void delay_us (uint32_t ul_time)
- {
- ul_time *= 30;
- while(--ul_time != 0)
- __nop();
- }
Keil编译器保证__nop()必定会插入一个NOP指令,在这里可以阻止编译器优化。当然,延时的初始值也要做相应的调整。
编译时间和大小
-O0:Program Size: Code=200360 RO-data=20576 RW-data=96 ZI-data=76316
Build Time Elapsed: 00:00:25
-O1:Program Size: Code=119328 RO-data=16824 RW-data=96 ZI-data=76300
Build Time Elapsed: 00:00:25
-O2:Program Size: Code=153340 RO-data=17100 RW-data=96 ZI-data=76300
Build Time Elapsed: 00:00:26
-O3:Program Size: Code=162292 RO-data=17040 RW-data=96 ZI-data=76308
Build Time Elapsed: 00:00:27
-Ofast:Program Size: Code=161896 RO-data=17040 RW-data=96 ZI-data=76308
Build Time Elapsed: 00:00:26
-Os balanced:Program Size: Code=115628 RO-data=17048 RW-data=96 ZI-data=76300
Build Time Elapsed: 00:00:28
-Oz image size:Program Size: Code=103784 RO-data=17020 RW-data=96 ZI-data=76308
Build Time Elapsed: 00:00:25
-Oz image size LTO:Program Size: Code=85888 RO-data=17064 RW-data=40 ZI-data=75960
Build Time Elapsed: 00:00:32
与Compiler 5 对比(我的程序-可能不具有一般性):
-O2:Program Size: Code=94232 RO-data=16736 RW-data=540 ZI-data=75640
Build Time Elapsed: 00:00:16
参考文档
《Arm® Compiler Migration and Compatibility Guide》(内容详细)
《Migrate ARM Compiler 5 to ARM Compiler 6》 (AN298)