0.概述
原子操作很好用,在兩三個小線程要同步變量時,非常方便不占用中斷,也不用資源。但是原子操作只有5.0.0版本上面才有,基于現(xiàn)有工程使用升級內(nèi)核不太現(xiàn)實,所以要添加一下。
現(xiàn)在的版本是4.0.2,芯片為stm32f407,以下均為在rt-thread文件夾下的更改。附件增加了文件,也可以從5.0版本拉下來。
1.增加文件
增加/libcpu/arm/commom/atomic_arm.c,增加/include/rtatomic.h,添加arm硬件原子操作源文件,其他架構(gòu)添加對應(yīng)的。
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'
/* 增加內(nèi)容 */
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.實現(xiàn)
menuconfig一下,然后構(gòu)建工程。
-
ARM處理器
+關(guān)注
關(guān)注
6文章
361瀏覽量
41960 -
STM32F407
+關(guān)注
關(guān)注
15文章
188瀏覽量
29679 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1306瀏覽量
40436
發(fā)布評論請先 登錄
相關(guān)推薦
詳解Linux內(nèi)核鎖的原子操作
在04版本中如何給自己畫的元件添加封裝形式
原子操作指令的作用
請問CCS V6版本在Tiva C Series TMC123G launchpad中如何添加文件?
UCOS怎么實現(xiàn)原子操作
RT-Thread4.0版本操作emmc總線寬度無法自動識別是為什么
請問RT-Thread 4.0.5版本把libc文件夾放到哪里了呀?
Studio環(huán)境下修改工程的系統(tǒng)版本為4.0.3,為什么板端還顯示4.0.2?
基于多線程環(huán)境下值的遞增操作--原子操作
![基于多線程環(huán)境下值的遞增<b class='flag-5'>操作</b>--<b class='flag-5'>原子</b><b class='flag-5'>操作</b>](https://file1.elecfans.com//web2/M00/A7/25/wKgZomUMQqmAPYqPAAAR8R5jAxU198.png)
微軟確認(rèn)在Win10 RS4版本更新中添加PWA支持
淺談鴻蒙內(nèi)核源碼的原子操作
![淺談鴻蒙內(nèi)核源碼的<b class='flag-5'>原子</b><b class='flag-5'>操作</b>](https://file.elecfans.com/web1/M00/EC/D6/pIYBAGCFInSAHpgJAAG38gOWMDk715.png)
包裝/組裝合格測試報告:塑封最低操作規(guī)程(QTR:02016版本:01)
![包裝/組裝合格測試報告:塑封最低<b class='flag-5'>操作</b>規(guī)程(QTR:02016<b class='flag-5'>版本</b>:01)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Altium Designer 21版本的操作界面環(huán)境
motorBench 2.45.0版本說明
![motorBench 2.45.0<b class='flag-5'>版本</b>說明](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論