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

    文章

    361

    浏览量

    43427
  • STM32F407
    +关注

    关注

    15

    文章

    189

    浏览量

    31812
  • RT-Thread
    +关注

    关注

    32

    文章

    1662

    浏览量

    45489
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    详解Linux内核锁的原子操作

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

    在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机的原因?

    我在rt-thread4.0.2版本stm32f407硬件平台上,使用reboot命令无法重启,会让系统死机。 reboot命令默认是调用rt_hw_cpu_reset()
    发表于 09-12 06:08

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

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

    请问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

    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 6857次阅读
    基于多线程环境下值的递增<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 6196次阅读

    包装/组装合格测试报告:塑封最低操作规程(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 5722次阅读

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

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

    无人机自动巡检系统:从手动操作到智能化的技术变革

           无人机自动巡检系统:从手动操作到智能化的技术变革        在无人机技术发展过程中,其操控方式经历了从完全依赖飞手手动操作到逐步实现自动化、智能化巡检的重大飞跃。早期手动飞行模式
    的头像 发表于 09-11 13:16 933次阅读

    基于开源鸿蒙打造的机器人操作系统M-Robots OS 2.0版本正式发布

    近日,基于开源鸿蒙打造的机器人操作系统M-Robots OS 2.0版本正式发布。该系统依托开放原子开源基金会开源共建体系持续迭代升级,标志着开源鸿蒙技术在机器人领域正式迈入生态化发展全新阶段,也为国内机器人产业智能化、集群化升
    的头像 发表于 05-27 11:27 370次阅读
    基于开源鸿蒙打造的机器人<b class='flag-5'>操作</b>系统M-Robots OS 2.0<b class='flag-5'>版本</b>正式发布