MIPS走向更多
当你在一个条件分支指令处点击了单步执行,然后看到光标移动到了下一条指令处,这是否意味该条件分支的条件未被满足呢?未必,请注意这是MIPS架构的一个特性,即分支指令的下一条指令总是会被执行,当编译器找不到合适的指令时会填充一条NOP 指令。你必须再执行一次单步操作,才能确认分支条件是否被满足(在这种情况下,你会看到光标跳到分支目标处)或不满足(光标跳转到下一条顺序指令)。更先进的“代码移动”优化能够导致更多的优化干预。请记住,有时指令可以被挪动很远的距离,甚至超出你认为应在的循环之外。
本文引用地址://m.amcfsurvey.com/article/118542.htm不过,调试优化过的代码也是可能的,尤其是你喜欢头脑风暴的话(例如,在分支指令后跟一个分支指令会发生什么?)。通常缺省的编译器优化只生成简单的代码,会完整保留你的意图即使可能它效率底下。当调试时在断点触发处,,你可以放心地修改某个变量的值,而不用担心编译器会捣什么鬼(比如虽然你从源代码中看不到,但一些赋值语句已经被挪动并执行了)。
照片4:搞“计算”的人擅长编译优化,如这里所示,从速度、代码尺寸到编译时间,有广泛的选择空间可选
需要紧记的是,编译器优化设置(见照片4)能够产生很大影响。我试着跑过一个USB主机演示程序,采用了如表1 所示的不同编译器设置,你可以看到,不同设置下(速度/大小取向、循环展开,采取MIPS-16 的16 位代码优化选项)生成的代码大小相差能够高达2倍。
表1:聪明的编译器总归不错,但是要留意可能会给调试工作带来副作用。应首选保证你的代码正确工作,然后再考虑进一步优化
保持简洁
PIC32 在精简MIPS架构使其服务于嵌入式应用方面做得很好。比如,全部的活动功耗只有1mA/MHz 水平,从它提供的性能来看这是非常难得的。它们的批量价格也比较合理,特别考虑到那些完整的外设和存储器配备。
然而竞争也非常激烈,像Cortex - M3、瑞萨SH(现在叫RX)、爱特梅尔的AVR32 以及飞思卡尔的ColdFire 等。这些竞争对手在行业里已经有很长的时间,它们的产品也具有很广的覆盖面,在高端产品上能提供跟PIC32类似的集成度和性能,同时还有许多入门级的简单产品。
我认为MIPS 也在低端产品线上延伸,他们最近发布的“M14K”内核就是明证,在保留当前版本性能的基础上,在代码密度、中断响应和外设一致性上取得了非常大的进步。
其中最深刻的变化是一套新的“microMIPS”指令集。类似于ARM 的Thumb-2,microMIPS 采用了可变长度的操作码(16 和32 位),以同时取得两者的优点,即接近32位代码的性能和16 位代码的密度(见图2)。定长指令集是原始RISC 革命的标志性特点,这在当时是合理的(虽然我并没有觉得),但在今天,架构师们意识到用32 位存储器(即使不考虑功耗的开销)只是做个寄存器累加或短跳转是没有意义的。同上,在软件方面,编译器和IDE 都很好,但MIPS 和Microchip 也应该注意那些简单的替代产品,如ARM 的mbed、AVR 的Arduino,还有他们自己阵营的PICAXE。有些人可能还认为32 位芯片只是火箭科学家的事,但火箭能卖掉多少个?
图2:MIPS M14K进一步丢弃了“计算”架构中的包袱,如造成代码膨胀的32位定长指令,使得在保留高性能的同时,极大地减小了代码大小
想卖出更多的芯片吗?很简单,只要做到更低功耗低、更易使用、更便宜。然后接着再这样继续。
评论