ARM Cortex-M3 MCU中uint8_t指针传单字节是否为优化技巧?
ARM Cortex-M3中用指针传递单个uint8_t的写法分析
你提到的函数签名和使用场景如下:
static bool lcdWriteByte(uint8_t rsRwBits, uint8_t * data)
函数内仅做了一次指针取值操作:
lcdCommandBuffer[2] = (*data);
这种写法在嵌入式MCU开发中确实见过,主要原因和你猜测的Thumb-2优化无关,常见的诱因包括:
接口一致性设计
很多外设驱动会打造一套风格统一的接口,比如LCD驱动里可能还存在lcdWriteString、lcdWriteBuffer这类需要传递多字节数据的函数。为了让调用方不用区分单字节/多字节接口的参数形式,单字节写入函数也沿用指针参数,减少代码分支和记忆成本。遗留代码或开发习惯
有可能这个函数最初是为多字节写入设计的,后续需求简化为单字节但未修改参数;也有部分嵌入式开发者习惯用指针操作数据(比如日常操作硬件寄存器的惯性),下意识地用指针传递单个字节,哪怕逻辑上完全可以用传值实现。关于Thumb-2优化的误区
Cortex-M3的Thumb-2指令集里,前4个函数参数会直接通过R0-R3寄存器传递。如果用uint8_t data传值,字节会被零扩展到32位存入寄存器,直接赋值即可;而用指针的话,需要先把地址存入寄存器,再执行LDRB指令加载字节,反而多了一条指令,效率更低。所以这种写法和优化无关,甚至是低效的。
内容的提问来源于stack exchange,提问作者Lorenzo Marcantonio
相关产品推荐
相关产品推荐

