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

相关推荐
阿波罗尼亚1 小时前
@Autowired @Resource IDE警告 和 依赖注入
ide
范纹杉想快点毕业4 小时前
嵌入式 C 语言编程规范个人学习笔记,参考华为《C 语言编程规范》
linux·服务器·数据库·笔记·单片机·嵌入式硬件·fpga开发
坠金5 小时前
不同ide回到上一个文件快捷键
ide
十秒耿直拆包选手5 小时前
IDE:vscode的vue3模板
javascript·ide·vscode
3D打印-HUSTAIBO13 小时前
【电气】NPN与PNP
单片机·嵌入式硬件
ksk自在无敌16 小时前
ESP8266的AP模式与STA编写,
stm32·单片机·嵌入式硬件
晶振厂家-晶发电子16 小时前
怎么判断晶振的好坏,有什么简单的办法
单片机·嵌入式硬件
jllllyuz17 小时前
SysTick定时器的工作原理是什么
stm32·单片机·嵌入式硬件
QL.ql17 小时前
vscode的wsl环境,ESP32驱动0.96寸oled屏幕
ide·vscode·编辑器