|
发表于 2010-7-14 09:16:02
|
显示全部楼层
最新的代码已经修正了rt_tick_from_millisecond()函数,我看代码可以这样写:
rt_tick_t rt_tick_from_millisecond(rt_uint32_t ms)
{
/* return the calculated tick */
ms = ms * RT_TICK_PER_SECOND + 999;
return ms / 1000;
}
这样,用EWARM编译,打开全部优化,结果如下:
SECTION `.text`:CODE:NOROOT(2)
ARM
rt_tick_from_millisecond:
MOV R2,#+231
MOV R1,#+500
ORR R2,R2,#0x300
MLA R0,R1,R0,R2
LDR R2,??DataTable1_4 ;; 0x83126e98
UMULL R2,R1,R0,R2
LSR R0,R1,#+9
BX LR ;; return
比原来的结果运行效率要高:
SECTION `.text`:CODE:NOROOT(2)
ARM
rt_tick_from_millisecond:
LDR R2,??DataTable1_4 ;; 0x83126e98
MOV R1,#+500
MUL R0,R1,R0
UMULL R2,R1,R0,R2
LDR R2,??DataTable1_5 ;; 0x10624dd3
UMULL R3,R12,R2,R0
LSR R12,R12,#+6
MOV R3,#+1000
MUL R12,R3,R12
SUB R12,R0,R12
ADDS R0,R12,R1, LSR #+9
MOVNE R0,#+1
BX LR ;; return
可见,上面两次乘法指令,两次存储器访问。 |
|