STM32 - Embedded IDE - GCC - 解决LWRB库在GCC编译器会编译失败,在ARMCC编译器时却正常编译

导言


最近,开始折腾从EIDE + ARMCC的开发切换为EIDE + GCC。在移植lwrb库时碰到编译失败。原因如上图所示。

一、解决方案


在lwrb.h增加如下代码,在lwrb.h中全局禁用该库的原子特性。说白了,就是不要使用类型atomic_ulong了,ArmClang(AC6) 自带实现,因此在 AC6 下能过,在 GCC 下就不行。。

c 复制代码
/*
 * Disable atomic operations by default to ensure compatibility when
 * this header is included from both C and C++ translation units in
 * embedded GCC environments. Users can override by defining
 * LWRB_DISABLE_ATOMIC to 0 before including this header if they
 * provide proper C11 atomics support across all TUs.
 */
#ifndef LWRB_DISABLE_ATOMIC
#define LWRB_DISABLE_ATOMIC 1
#endif


二、有什么影响?


禁用原子性后,在"中断写/主循环读"的单生产者单消费者模式下基本无影响。

但是,禁用原子性后,失去的是严格的跨上下文内存序保证。因此,避免让同一指针在多上下文同时写即可。说白了,若项目有中断/多线程并发,给 LwRB 配上 进入/退出临界区的宏(关中断或 RTOS 互斥量),就能保证安全。

相关推荐
危桥带雨5 小时前
Freertos——使用队列集优化数据传输
stm32·单片机·嵌入式硬件·freertos
来生硬件工程师5 小时前
【程序库】 MutiButton 按键库
c语言·笔记·stm32·单片机·mcu·嵌入式实时数据库
CodeQingqing5 小时前
反汇编在嵌入式的使用
stm32·嵌入式·反汇编
sweetone5 小时前
好帅(HOST) HS-AF01T电烤炉(空气炸锅)的小修及物联网设备的安全思考
经验分享·单片机·嵌入式硬件·物联网
多看多敲多思考6 小时前
华润微CS32ME10 MCU使用教程(1)---CS32ME10之GPIO使用
c语言·stm32·单片机·嵌入式硬件·mcu
小谦32516 小时前
第十一篇、CubeMX | 可见光谱颜色传感器 AS7341
单片机·嵌入式硬件
EvenBoy6 小时前
IDEA中使用CodeX
java·ide·intellij-idea
时光之源6 小时前
Visual Studio | Marketplace创建发布者(Create Publisher)时无法创建的问题解决方案
ide·vscode·visual studio·plugin·cursor
黑白园6 小时前
STM32 printf函数重定向到USATR1输出打印
stm32·单片机·嵌入式硬件
踏着七彩祥云的小丑6 小时前
嵌入式——认识电子元器件——温度保险丝系列
单片机·嵌入式硬件