当前位置: 首页 > backend >正文

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

导言


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

一、解决方案


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

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

http://www.xdnf.cn/news/17815.html

相关文章:

  • 肖臻《区块链技术与应用》第16讲 - 以太坊的“世界状态”:从哈希表到MPT架构演进
  • 安装openmmlab时出错
  • IStoreOS(OpenWrt)开启IPV6
  • LeetCode 刷题【42. 接雨水】
  • 大规模Go网络应用的部署与监控实战指南
  • python30-正则表达式
  • 应急救援智能接处警系统——科技赋能应急,筑牢安全防线
  • 线程P5 | 单例模式[线程安全版]~懒汉 + 饿汉
  • 从0开始学习Java+AI知识点总结-15.后端web基础(Maven基础)
  • UI-TARS-Desktop 产品发展史:从实验室原型到企业级解决方案
  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(中)
  • python中的map函数
  • Android UI(一)登录注册 - Compose
  • 【数据可视化-89】基孔肯雅热病例数据分析与可视化:Python + pyecharts洞察疫情动态
  • RH134 管理基本存储知识点
  • 【C#补全计划】泛型约束
  • OpenCv(二)——边界填充、阈值处理
  • 37 C++ STL模板库6-string_view
  • Mybatis实现页面增删改查
  • 解锁AI潜能:五步写出让大模型神级指令
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • 《嵌入式 C 语言编码规范个人笔记》参考华为C语言规范标准
  • 机器学习-支持向量机器(SVM)
  • CPP模板编程
  • Python学习-----3.基础语法(2)
  • 广义矩估计随机近似中1.2和2.1的差异
  • 如何手动开启 Hyper-V?Windows 10/11 详细开启教程
  • Mybatis 源码解读-Plugin插件源码
  • 系统设计——DDD领域模型驱动实践
  • 如何写出更清晰易读的布尔逻辑判断?