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

相关推荐
zhangzhangkeji几秒前
stm32, HAL 库,定时器,三:通道 1 的输入配置举例,通道输入时的 CCR 值更新原理,输入通道的脉宽捕获测量原理,对通道输入脉冲的计数,
stm32
送外卖的工程师10 分钟前
STM32空气质量检测系统(机智云)
stm32·单片机·嵌入式硬件
Industio_触觉智能23 分钟前
把NPU检测直接嵌进采集终端|RK3576 AI采集终端全链路拆解教程-上
人工智能·嵌入式硬件·硬件架构·硬件工程·智能硬件·npu·rk3576
comyccccc26 分钟前
STM32F103C8T6核心板电路深度解析学习笔记
单片机·嵌入式硬件
2501_915909061 小时前
KXApp 能打开哪些 iOS 项目?xcodeproj 与 CocoaPods 支持清单
ide·vscode·ios·个人开发·xcode·敏捷流程·cocoapods
智购科技无人售货机厂家8 小时前
压缩机一启动设备就重启,排查发现是电源功率选小了~YH
单片机·嵌入式硬件
黑马水牛10 小时前
RK3588系列:01-系统烧录与开发环境搭建
arm开发·嵌入式硬件
铅笔小新z10 小时前
【stm32】IWDG(独立看门狗)
stm32·单片机·嵌入式硬件
无敌贵点大王11 小时前
从寄存器层面重学STM32(2)——RCC和时钟树
stm32·单片机·嵌入式硬件
玄芯散人12 小时前
【元婴·103】GPIO深度:复用、上下拉、翻转速度
单片机·嵌入式硬件