1.写在前面
嵌入式开发,不同于PC、移动设备(手机、平板)以“GB”为单位的存储空间(ROM)和内存(RAM)。尤其是MCU、SOC,RAM是KB级别的容量,ROM则稍微较大;当然也有较大容量的MCU选择,成本也跟着上去。MCU类的产品出货量大,成本控制比较苛刻,所以在选择MCU时,老板当然希望占用资源越小越好,进而控成本。因此,我们在程序编码时,就需要考虑资源问题,甚至要使用上一些“手段”来控制,平衡资源和效率,尽可能降低固件占用资源同时保证效率。
2.一些技巧
程序界有句比较熟悉的话:“时间换空间、空间换时间”,字面意思就是资源空间和程序执行时间的权衡。比如,数据放在ROM中和RAM中时,两者的读取速度就不一样。本文目的是“节约内存”为出发点,所以对于一些处理技巧上,效率肯定会打折扣,这就是一个“权衡”问题,需根据具体实际应用场合来选择。
[1] ROM代替RAM
前面提到,MCU的ROM往往远大于RAM,而且ROM和RAM的成本6:1,常量数据可以存在在ROM中。常规操作就是加“const”修饰。
[2] 用位域
对于一些变量并未使用完整个数据类型范围,可以使用位域,未使用到的位留给其他使用。如1字节变量就可以实现8个bool型操作。位域常用在结构体中。
struct type
{
uint8_t select : 1;
uint8_t calc : 7;
};