You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GCC的C/C++中如何通过内置函数实现ARM的strb字节存储?

在GCC编译的ARM架构C/C++代码中触发strb指令的方法

当然有办法实现,以下是两种可靠的方式:

  • 强制类型转换为volatile uint8_t指针
    如果你的外设寄存器(比如USART1->TDR)被定义为32位类型,直接赋值会触发32位的str指令。但通过将寄存器地址强制转换为8位volatile指针,就能让GCC生成字节存储的strb指令:

    *(volatile uint8_t *)&USART1->TDR = 0x01;
    

    这里的volatile至关重要,它告诉编译器必须执行实际的内存写入操作,不能因为优化省略或调整这个存储动作,这对内存映射的外设寄存器来说是必须的。

  • 使用GCC ARM内置函数__builtin_stb
    GCC针对ARM架构提供了专门的内置内存操作函数,其中__builtin_stb就是用来生成strb指令的:

    __builtin_stb(0x01, &USART1->TDR, 0);
    

    函数参数依次是:要存储的字节值、目标地址、地址偏移量(这里填0表示直接写入目标地址的第一个字节)。这个方法更直接明确,不需要类型转换,不过要注意它是ARM目标特有的内置函数,仅在编译ARM架构代码时可用。

需要注意的是,无论哪种方式,都要确保操作的是正确的寄存器地址——外设寄存器的字节偏移要符合手册定义,避免因地址错误导致的操作失效。

内容的提问来源于stack exchange,提问作者wimalopaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:33:16