添加原子操作到4.0.2版本

电子说

1.3w人已加入

描述

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一下,然后构建工程。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分