马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
计数循环是程序中十分常用的流程控制结构。在C与验证宏,常用下面累加计数的循环形式: for(loop=1,loop<=limit;loop++) 而这种累加计数的方法符合一般的自然思维习惯,所以下面这种递减方法很少使用: for(loop=limit;loop!=0;loop--) 这两种循环形式在逻辑上并没有效率差异,但是映射到具体的体系结构中时,就产生了大大是不同,如图所示。 int fact1 (int limit) int fact1 (intlimit) { { ... … for (i=1;i<=limit;i++) for(i=limit;i!=0;i--) ( { fact=fact*i; fact=fact*i; ) } ... … } }
Fact1 Fact2 ... ... …… 0x000010: MUL R2,R1,R2 0x000010:MUL R0,R1,R0 0x000014: ADD R1,R1,#1 0x000014:SUBS R1,R1,#1 0x000018: CMP R2,R0 0x00001C: BNE 0x10 0x00001C:BLE 0x10 …… ... ... 0x000024: MOV PC,LR 从图中可以发现,累加法比递减法多用了1条指令,当循环次数比较大时,这2段代码就会在性能上产生明显的差异。其本质原因是:当进行一个非0常数比较时,必须用专门的CMP指令进行判别。因此,在ARM的体系结构下编程,建议采用递减至0的方法来设置循环条件。 凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网 |