使用-fstrict-volatile-bitfields编译选项时,for循环中写入位域意外生成strb指令的问题求助
使用-fstrict-volatile-bitfields编译选项时,for循环中写入位域意外生成strb指令的问题求助
大家好,我最近在ARM平台开发外设驱动时碰到了个头疼的问题,想请教下社区的朋友们:
- 我的编译环境是:
arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi - 因为要通过位域操作外设寄存器,而硬件只能支持32位写入,不能用
strb这类字节操作指令,所以我特意启用了-fstrict-volatile-bitfields编译选项来保证这一点 - 本来一切正常:不用for循环的时候,生成的指令都是符合要求的32位写入;甚至把这段位域操作的代码单独抽出来编译,也不会出现
strb——除非我主动加-fno-strict-volatile-bitfields选项才会生成 - 可一旦把这段代码放进for循环里执行,编译器就会意外生成
strb指令,直接违反了硬件限制,导致功能异常
下面是我用到的位域定义(代码片段):
typedef union { unsigned int // 原代码未完整展示,保留现有片段
有没有大佬遇到过类似的情况?或者能帮我分析下,为什么for循环会影响编译器对-fstrict-volatile-bitfields选项的处理逻辑吗?
备注:内容来源于stack exchange,提问作者yecheng
相关产品推荐
相关产品推荐

