0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

添加原子操作到4.0.2版本

冬至子 来源:redoc 作者:redoc 2023-09-06 15:03 次阅读

0.概述
原子操作很好用,在两三个小线程要同步变量时,非常方便不占用中断,也不用资源。但是原子操作只有5.0.0版本上面才有,基于现有工程使用升级内核不太现实,所以要添加一下。
现在的版本是4.0.2,芯片stm32f407,以下均为在rt-thread文件夹下的更改。附件增加了文件,也可以从5.0版本拉下来。

1.增加文件
增加/libcpu/arm/commom/atomic_arm.c,增加/include/rtatomic.h,添加arm硬件原子操作源文件,其他架构添加对应的。

2.修改rtdef.h
增加代码段,添加原子操作定义

#if !defined(__cplusplus)
#if defined(RT_USING_STDC_ATOMIC)
#include
typedef atomic_size_t rt_atomic_t;
#elif defined(RT_USING_HW_ATOMIC)
typedef volatile rt_base_t rt_atomic_t;
#else
/* To detect std atomic */
#if defined(RT_USING_LIBC) && defined( GNUC ) && !defined( STDC_NO_ATOMICS )
#include
typedef atomic_size_t rt_atomic_t;
#else
typedef volatile rt_base_t rt_atomic_t;
#endif /*GNUC && ! STDC_NO_ATOMICS/
#endif /
RT_USING_STDC_ATOMIC /
#endif /
__cplusplus */

3.修改rtatomic.h
增加一段头文件包含,这样#defined(RT_USING_HW_ATOMIC)才能识别到

#include

4.修改libcpu/Kconfig
增加芯片硬件原子操作定义RT_USING_HW_ATOMIC

config RT_USING_HW_ATOMIC
bool
default n
config ARCH_ARM
bool
config ARCH_ARM_CORTEX_M
bool
select ARCH_ARM
config ARCH_ARM_CORTEX_FPU
bool
config ARCH_ARM_CORTEX_M0
bool
select ARCH_ARM_CORTEX_M
config ARCH_ARM_CORTEX_M3
bool
select ARCH_ARM_CORTEX_M
select RT_USING_HW_ATOMIC
config ARCH_ARM_MPU
bool
depends on ARCH_ARM
config ARCH_ARM_CORTEX_M4
bool
select ARCH_ARM_CORTEX_M
select RT_USING_HW_ATOMIC
config ARCH_ARM_CORTEX_M7
bool
select ARCH_ARM_CORTEX_M
select RT_USING_HW_ATOMIC
config ARCH_ARM_CORTEX_R
bool
select ARCH_ARM
select RT_USING_HW_ATOMIC
config ARCH_ARM_MMU
bool
depends on ARCH_ARM
config ARCH_ARM_ARM9
bool
select ARCH_ARM
config ARCH_ARM_ARM11
bool
select ARCH_ARM
config ARCH_ARM_CORTEX_A
bool
select ARCH_ARM
select RT_USING_HW_ATOMIC

4.修改libcpu/SConscript
增加删去原子操作的定义

if rtconfig.PLATFORM == 'armcc' and rtconfig.ARCH == 'arm' and rtconfig.CPU == 'arm926':
ASFLAGS = ' --cpreproc'
/* 增加内容 */
if not GetDepend('RT_USING_HW_ATOMIC'):
SrcRemove(src, Glob(comm + 'atomic_arm.c'))
CPPPATH = [RTT_ROOT + '/libcpu/' + arch + '/' + rtconfig.CPU, RTT_ROOT + '/libcpu/' + arch + '/common']

5.实现
menuconfig一下,然后构建工程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM处理器
    +关注

    关注

    6

    文章

    360

    浏览量

    41750
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29466
  • RT-Thread
    +关注

    关注

    31

    文章

    1289

    浏览量

    40140
收藏 人收藏

    评论

    相关推荐

    详解Linux内核锁的原子操作

    原子操作(atomic operation),不可分割的操作。其通过原子变量来实现,以保证单个CPU周期内,读写该变量,不能被打断,进而判断该变量的值,来解决并发引起的互斥。
    发表于 07-04 11:16 510次阅读

    在04版本中如何给自己画的元件添加封装形式

    请教一下各位大侠,在04版本中,自己画的原理图元件,如何给它添加封装形式呢?当然我是指如何给它添加自带的封装形式
    发表于 08-05 20:59

    原子操作指令的作用

    本帖最后由 ycd37850105 于 2016-9-18 21:41 编辑 我们把单指令的操作称为原子操作(Atomic),因为无论如何,单条指令的执行是不会被打断的。很多体系结构都提供了
    发表于 09-18 21:39

    请问CCS V6版本在Tiva C Series TMC123G launchpad中如何添加文件?

    本帖最后由 一只耳朵怪 于 2018-6-11 11:56 编辑 在线学习金尔雅老师的CCS学习视频时老师用的是CCS V5版本的而现在官网下载的是v6版本的两者在一些学习过程中有很大不同!!! 这个添加文件怎么弄v
    发表于 06-11 01:12

    UCOS怎么实现原子操作

    目前有个全局变量和数字,需要在中断函数中和任务中都要访问,请问各位大神UCOS怎么实现原子操作?网上搜索一圈没发现实例呢,是大家都不用原子操作
    发表于 05-20 09:57

    关于Keil ARM版本和Keil C51版本的共存问题(亲测通过)精选资料分享

    关于Keil ARM版本和Keil C51版本的共存问题(亲测通过)测试环境: 操作系统:windows 8.1 专业版 C51版本:Keil C51 V956 ARM
    发表于 07-16 06:28

    RT-Thread4.0版本操作emmc总线宽度无法自动识别是为什么

    mmc.c文件里面函数mmc_select_bus_width两个版本区别为上图,3.1版本有正常bus_width宽度的切换,4.0版本没没有对该变量进行赋值所以总线宽度无法自动识别,实测3.1
    发表于 04-27 09:45

    请问RT-Thread 4.0.5版本把libc文件夹放到哪里了呀?

    rt-thread 4.0.5版本新建工程后再rt-thread/include文件夹下没有libc文件夹用4.0.2和4.0.3版本新建工程则有libc文件夹。工程中用到了libc文件夹下的libc_ioctl.h文件。请问4
    发表于 02-17 10:42

    Studio环境下修改工程的系统版本为4.0.3,为什么板端还显示4.0.2

    显示的版本号和打version显示的rt-thread版本号还都是4.0.2,请问是怎么回事呢?多谢。。。
    发表于 05-11 14:24

    基于多线程环境下值的递增操作--原子操作

    因此在多线程环境中对一个变量进行读写时,我们需要有一种方法能够保证对一个值的递增操作原子操作——即不可打断性,一个线程在执行原子操作时,其
    的头像 发表于 01-10 11:16 6179次阅读
    基于多线程环境下值的递增<b class='flag-5'>操作</b>--<b class='flag-5'>原子</b><b class='flag-5'>操作</b>

    微软确认在Win10 RS4版本更新中添加PWA支持

    近日,微软正式宣布会在 Windows 10 Redstone 4版本中带PWA应用程序的全面支持。 先来解释一下什么叫PWA(Progressive Web App)。PWA 其实是在普通的移动
    的头像 发表于 02-18 20:54 5682次阅读

    浅谈鸿蒙内核源码的原子操作

    ARMv6架构引入了LDREX和STREX指令,以支持对共享存储器更缜密的非阻塞同步。由此实现的原子操作能确保对同一数据的“读取-修改-写入”操作在它的执行期间不会被打断,即操作
    的头像 发表于 04-25 16:05 1272次阅读
    浅谈鸿蒙内核源码的<b class='flag-5'>原子</b><b class='flag-5'>操作</b>

    包装/组装合格测试报告:塑封最低操作规程(QTR:02016版本:01)

    包装/组装合格测试报告:塑封最低操作规程(QTR:02016版本:01)
    发表于 04-24 18:16 0次下载
    包装/组装合格测试报告:塑封最低<b class='flag-5'>操作</b>规程(QTR:02016<b class='flag-5'>版本</b>:01)

    Altium Designer 21版本操作界面环境

    相对于Altium Designer以前的版本,21版本给用户提供了一个更加人性化、更加集成化的操作界面环境,如图2-9所示,主要包含菜单栏、工具栏、面板控制区、用户工作区等,其中工具栏、菜单栏的项目显示会跟随用户
    的头像 发表于 08-09 11:37 3575次阅读

    使用Linux原子操作实现互斥点灯

    Linux原子操作是指不能再进一步分割的操作,一般原子操作用于变量或者位操作。Linux内核定义
    的头像 发表于 04-13 15:07 891次阅读
    使用Linux<b class='flag-5'>原子</b><b class='flag-5'>操作</b>实现互斥点灯