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 互斥量),就能保证安全。

相关推荐
Zeku5 小时前
20251202 - Linux输入子系统
stm32·freertos·嵌入式软件·linux驱动开发·linux应用开发
悠哉悠哉愿意6 小时前
【EDA学习笔记】电子技术基础知识:基本元件
笔记·嵌入式硬件·学习·eda
言之。7 小时前
Claude Code IDE 集成工作原理详解
ide·人工智能
宇宙realman_9997 小时前
Flash2833x_API的cmd文件与map文件对应关系
嵌入式硬件
Coder_Boy_7 小时前
基于 MQTT 的单片机与 Java 业务端双向通信全流程
java·单片机·嵌入式硬件
悠悠子衿121387 小时前
Claude+VSCODE配置git导致频繁弹出git bash 的CMO窗口解决方法
ide·git·vscode
就是蠢啊7 小时前
51单片机——DAC数模转换实验(二)
单片机·嵌入式硬件·51单片机
boneStudent7 小时前
Day39:智能家居环境监测系统
stm32·单片机·嵌入式硬件·智能家居
Zeku8 小时前
20251202 - Linux输入系统的基础知识 - tslib
stm32·freertos·linux驱动开发·linux应用开发
大志哥1238 小时前
IntelliJ IDEA父子工程中导入公网远程备份项目到新目录
java·ide·intellij-idea