精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取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一下,然后構建工程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • ARM處理器
    +關注

    關注

    6

    文章

    360

    瀏覽量

    41667
  • STM32F407
    +關注

    關注

    15

    文章

    187

    瀏覽量

    29373
  • RT-Thread
    +關注

    關注

    31

    文章

    1273

    瀏覽量

    39924
收藏 人收藏

    評論

    相關推薦

    詳解Linux內核鎖的原子操作

    原子操作(atomic operation),不可分割的操作。其通過原子變量來實現,以保證單個CPU周期內,讀寫該變量,不能被打斷,進而判斷該變量的值,來解決并發(fā)引起的互斥。
    發(fā)表于 07-04 11:16 ?465次閱讀

    在04版本中如何給自己畫的元件添加封裝形式

    請教一下各位大俠,在04版本中,自己畫的原理圖元件,如何給它添加封裝形式呢?當然我是指如何給它添加自帶的封裝形式
    發(fā)表于 08-05 20:59

    原子操作指令的作用

    本帖最后由 ycd37850105 于 2016-9-18 21:41 編輯 我們把單指令的操作稱為原子操作(Atomic),因為無論如何,單條指令的執(zhí)行是不會被打斷的。很多體系結構都提供了
    發(fā)表于 09-18 21:39

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

    本帖最后由 一只耳朵怪 于 2018-6-11 11:56 編輯 在線學習金爾雅老師的CCS學習視頻時老師用的是CCS V5版本的而現在官網下載的是v6版本的兩者在一些學習過程中有很大不同!!! 這個添加文件怎么弄v
    發(fā)表于 06-11 01:12

    UCOS怎么實現原子操作

    目前有個全局變量和數字,需要在中斷函數中和任務中都要訪問,請問各位大神UCOS怎么實現原子操作?網上搜索一圈沒發(fā)現實例呢,是大家都不用原子操作
    發(fā)表于 05-20 09:57

    關于Keil ARM版本和Keil C51版本的共存問題(親測通過)精選資料分享

    關于Keil ARM版本和Keil C51版本的共存問題(親測通過)測試環(huán)境: 操作系統:windows 8.1 專業(yè)版 C51版本:Keil C51 V956 ARM
    發(fā)表于 07-16 06:28

    RT-Thread4.0版本操作emmc總線寬度無法自動識別是為什么

    mmc.c文件里面函數mmc_select_bus_width兩個版本區(qū)別為上圖,3.1版本有正常bus_width寬度的切換,4.0版本沒沒有對該變量進行賦值所以總線寬度無法自動識別,實測3.1
    發(fā)表于 04-27 09:45

    請問RT-Thread 4.0.5版本把libc文件夾放到哪里了呀?

    rt-thread 4.0.5版本新建工程后再rt-thread/include文件夾下沒有l(wèi)ibc文件夾用4.0.2和4.0.3版本新建工程則有l(wèi)ibc文件夾。工程中用到了libc文件夾下的libc_ioctl.h文件。請問4
    發(fā)表于 02-17 10:42

    Studio環(huán)境下修改工程的系統版本為4.0.3,為什么板端還顯示4.0.2

    顯示的版本號和打version顯示的rt-thread版本號還都是4.0.2,請問是怎么回事呢?多謝。。。
    發(fā)表于 05-11 14:24

    基于多線程環(huán)境下值的遞增操作--原子操作

    因此在多線程環(huán)境中對一個變量進行讀寫時,我們需要有一種方法能夠保證對一個值的遞增操作原子操作——即不可打斷性,一個線程在執(zhí)行原子操作時,其
    的頭像 發(fā)表于 01-10 11:16 ?6147次閱讀
    基于多線程環(huán)境下值的遞增<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 其實是在普通的移動
    的頭像 發(fā)表于 02-18 20:54 ?5660次閱讀

    淺談鴻蒙內核源碼的原子操作

    ARMv6架構引入了LDREX和STREX指令,以支持對共享存儲器更縝密的非阻塞同步。由此實現的原子操作能確保對同一數據的“讀取-修改-寫入”操作在它的執(zhí)行期間不會被打斷,即操作
    的頭像 發(fā)表于 04-25 16:05 ?1249次閱讀
    淺談鴻蒙內核源碼的<b class='flag-5'>原子</b><b class='flag-5'>操作</b>

    包裝/組裝合格測試報告:塑封最低操作規(guī)程(QTR:02016版本:01)

    包裝/組裝合格測試報告:塑封最低操作規(guī)程(QTR:02016版本:01)
    發(fā)表于 04-24 18:16 ?0次下載
    包裝/組裝合格測試報告:塑封最低<b class='flag-5'>操作</b>規(guī)程(QTR:02016<b class='flag-5'>版本</b>:01)

    Altium Designer 21版本操作界面環(huán)境

    相對于Altium Designer以前的版本,21版本給用戶提供了一個更加人性化、更加集成化的操作界面環(huán)境,如圖2-9所示,主要包含菜單欄、工具欄、面板控制區(qū)、用戶工作區(qū)等,其中工具欄、菜單欄的項目顯示會跟隨用戶
    的頭像 發(fā)表于 08-09 11:37 ?3431次閱讀

    使用Linux原子操作實現互斥點燈

    Linux原子操作是指不能再進一步分割的操作,一般原子操作用于變量或者位操作。Linux內核定義
    的頭像 發(fā)表于 04-13 15:07 ?845次閱讀
    使用Linux<b class='flag-5'>原子</b><b class='flag-5'>操作</b>實現互斥點燈