|
不过野火是搞CM3的,不幸的是CM3的测试结果是两者效率一样高。用arm-none-eabi-gcc 4.7.3(launchpad的那个,不是codesourcery)做测试平台。
编译选项- arm-none-eabi-gcc -c -mcpu=cortex-m3 -O0 -gdwarf-2 -mthumb -fomit-frame-pointer -Wall -Wstrict-prototypes -fverbose-asm -Wa,-ahlms=testbench.lst testbench.c -o testbench.o
复制代码 testbench.c内容如下:- #include <stdint.h>
- int32_t main(void){
- volatile uint8_t i;
- for(i=0;i<100;i++);
- for(i=100;i>0;i--);
- for(;;);
- }
复制代码 输出的汇编如下:- 3:testbench.c **** volatile uint8_t i;
- 4:testbench.c **** for(i=0;i<100;i++);
- 62 .loc 1 4 0
- 63 0002 4FF00003 mov r3, #0 @ tmp141,
- 64 0006 8DF80730 strb r3, [sp, #7] @ tmp142, i
- 65 000a 07E0 b .L2 @
- 66 .L3:
- 67 .loc 1 4 0 is_stmt 0 discriminator 2
- 68 000c 9DF80730 ldrb r3, [sp, #7] @ tmp144, i
- 69 0010 DBB2 uxtb r3, r3 @ i.0, tmp144
- 70 0012 03F10103 add r3, r3, #1 @ tmp145, i.0,
- 71 0016 DBB2 uxtb r3, r3 @ i.1, tmp145
- 72 0018 8DF80730 strb r3, [sp, #7] @ tmp146, i
- 73 .L2:
- 74 .loc 1 4 0 discriminator 1
- 75 001c 9DF80730 ldrb r3, [sp, #7] @ tmp148, i
- 76 0020 DBB2 uxtb r3, r3 @ i.2, tmp148
- 77 0022 632B cmp r3, #99 @ i.2,
- 78 0024 F2D9 bls .L3 @,
- 5:testbench.c **** for(i=100;i>0;i--);
- 79 .loc 1 5 0 is_stmt 1
- 80 0026 4FF06403 mov r3, #100 @ tmp149,
- 81 002a 8DF80730 strb r3, [sp, #7] @ tmp150, i
- 82 002e 07E0 b .L4 @
- 83 .L5:
- 84 .loc 1 5 0 is_stmt 0 discriminator 2
- 85 0030 9DF80730 ldrb r3, [sp, #7] @ tmp152, i
- 86 0034 DBB2 uxtb r3, r3 @ i.3, tmp152
- 87 0036 03F1FF33 add r3, r3, #-1 @ tmp153, i.3,
- 88 003a DBB2 uxtb r3, r3 @ i.4, tmp153
- 89 003c 8DF80730 strb r3, [sp, #7] @ tmp154, i
- 90 .L4:
- 91 .loc 1 5 0 discriminator 1
- 92 0040 9DF80730 ldrb r3, [sp, #7] @ tmp156, i
- 93 0044 DBB2 uxtb r3, r3 @ i.5, tmp156
- 94 0046 002B cmp r3, #0 @ i.5,
- 95 0048 F2D1 bne .L5 @,
- 96 .L6:
复制代码 可见对于CM3平台,即使优先级开到最低,两个代码的执行效率没有分毫的差异。 |
|