在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

裸機與RTOS的理解和并發帶來的問題

Q4MP_gh_c472c21 ? 來源:最后一個bug ? 作者:bug菌 ? 2021-06-13 15:13 ? 次閱讀

1

裸機與RTOS的理解

首先這里只針對單核CPU架構的芯片展開討論,大部分是MCU吧,而多核CPU的討論相對比較復雜,暫不涉及~玩RTOS的朋友都知道,裸機與OS的最大區別就是實現多任務的并發,其實你說裸機就不能實現任務的并發嗎 ? 這個需要看所站的角度吧,只是說RTOS并發的粒度可以更加細,因為你把裸機的任務拆分成多塊運行,其實也是一種并發方式。從宏觀上雖然RTOS的每個任務都是在并發執行,其實微觀上還是一條一條指令在順序執行著。

而對于目前主流的RTOS,如UCOS或者FreeRTOS,所實現的都是多任務,更多的是一種多線程的并發執行而非多進程,所以對應到Linux平臺上稱他們為thread

2

并發帶來的問題

并發的好處就是能夠在更細的粒度來盡可能的提高CPU的利用率,這里不能說使用了多線程就一定能提高,這與你所設計的任務劃分和處理有著直接的關系,只能說多線程相比裸機更有這個能力。

而任何事物都有其利弊,多個任務在沒有同步處理的情況下,任務之間是無序運行的,無序也就意味著狀態的多樣性和復雜度。

當然bug菌這里所說的無序是一個相對的過程,比如對于CPU而言,它就是順序的去執行一條一條的指令,所以在這個層面它是有序的、確定的。

而我們把過程放大,比如執行一條C語言語句,一般它是由多條匯編指令組成,對于目前的搶占式內核,在一段時間內其多個任務就有可能指令交替執行,當這些指令都去操作同一塊內存,那么內存的最終結果由于順序不同而不同,最終難以確定。

狀態的不確定就有可能造成異常行為,也就是大家經常遇到的:“怎么跑著跑著就有問題,還沒啥規律~”,“這段代碼怎么看也沒問題呀~”

所以對比看來RTOS確實會帶來編程上的難度~

3

臨界區

既然有難度,我們就要解決,把不確定性部分通過一些手段來變得確定,而造成這些不確定因素的動力是什么呢?是中斷~

bug菌一直覺得,其實對于裸機而言,如果把中斷服務函數看成一個更高優先級的搶占式任務,其實裸機主任務與中斷任務就形成了一種兩任務的并發,所以中斷與任務之間也是有共享問題需要類似處理的。

為了解決這些不確定因素,我們只需要在這段代碼區域限制中斷的發生即可,這一段區域就是臨界區,說得直白點 : 關中斷與開中斷。

1ENTER_CRITICAL();//進入臨界區23//臨界區代碼45EXIT_CRITICAL();//退出臨界區

4

臨界區嵌套

臨界區的使用沒啥可說的,但是在你的代碼中怎么加臨界區確實一門技巧,可是說很多3~5年的工程師也并不一定處理得好,本文暫不展開,后面bug菌整理以后再分享給大家,今天只聊聊臨界區嵌套使用的問題,畢竟很多朋友在這里掉過坑~

參考偽代碼:

1/********************************************* 2 * Function: Fuction1 3 * Description:功能函數

4 * Author: bug菌 5 ********************************************/ 6void Fuction1(void)7{ 8 ENTER_CRITICAL();//進入臨界區 910 //do something~1112 EXIT_CRITICAL();//退出臨界區

13} 14/********************************************* 15 * Function: Fuction2 16 * Description: 功能函數 17 * Author: bug菌 18 ********************************************/19void Fuction2(void) 20{ 21 ENTER_CRITICAL();//進入臨界區2223... 24 Fuction1(); 2526. 27 //do something~2829 EXIT_CRITICAL();//退出臨界區30}

這種臨界區的使用是很多朋友常犯的錯誤,當然這里的臨界區操作僅僅只是開關中斷,許多自己公司寫的,或者裁剪的都是這種簡約開關中斷版本,所以當調用Function1函數以后,后面的代碼就不在臨界區內了,此時就有可能會存在共享問題。

當然目前的開源OS都會提供一種把相關嵌套標記保存在局部變量中的處理方式,如下代碼所示:

1//來源于ucos源碼 2#define OS_ENTER_CRITICAL() (cpu_sr = OSCPUSaveSR()) 3#define OS_EXIT_CRITICAL()

(OSCPURestoreSR(cpu_sr)) 4 5/*********************************************6 * Function: Fuction1 7 * Description:功能函數 8 * Author: bug菌 9 ********************************************/10void Fuction1(void) 11{ 12 int cpu_sr; 1314 OS_ENTER_CRITICAL();//進入臨界區

1516 //do something~1718 OS_EXIT_CRITICAL();//退出臨界區

19} 2021/********************************************* 22 * Function: Fuction2 23 * Description: 功能函數 24 * Author: bug菌

25 ********************************************/26void Fuction2(void) 27{ 28 int cpu_sr; 2930 OS_ENTER_CRITICAL();//進入臨界區3132 Fuction1(void); 3334 OS_EXIT_CRITICAL();//退出臨界區

3536}

為了更好的理解,我寫了一下下面的偽代碼,供大家參數~

1//中斷寄存器register原本是1, 向register寫0關中斷,向register寫1開中斷 2 3void Fuction2(void) 4{ 5 int cpu_sr1 = 0; 6 7 cpu_sr1 = register; 8 register = 0;

//register == 0;

cpu_sr1 == 1; 910 void Fuction1(void) 11 { 12 int cpu_sr1 = 0; 1314 cpu_sr2 = register; 15 register = 0; //register == 0;cpu_sr2 == 0;

161718 register = cpu_sr2; 19 cpu_sr2 = 0;//register == 0;

cpu_sr2 == 0;20 } 2122 register = cpu_sr1; 23 cpu_sr1 = 0;//register == 1;cpu_sr1 == 0;2425}

不同的OS可能具體實現有所差異,大體上都一樣~

原文標題:同事在RTOS“臨界區嵌套使用”栽了跟頭~

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    68

    文章

    10863

    瀏覽量

    211765
  • RTOS
    +關注

    關注

    22

    文章

    813

    瀏覽量

    119636
  • 裸機程序
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6989

原文標題:同事在RTOS"臨界區嵌套使用"栽了跟頭~

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RZ T2H PCIe裸機程序開發和Linux下的配置介紹

    瑞薩電子最新推出RZ/T2H工業專用MPU,單芯片提供強大應用處理性能,多協議工業網絡及高達9軸高精度實時控制,支持Linux,RTOS及baremetal操作。除了強大CPU性能和9軸控制外設外
    的頭像 發表于 12-18 11:14 ?553次閱讀
    RZ T2H PCIe<b class='flag-5'>裸機</b>程序開發和Linux下的配置介紹

    韓國裸機云服務器是什么?

    韓國裸機云服務器是一種結合了裸機服務器與云端技術,提供多IP地址分配和高性能網絡服務的云計算解決方案。主機推薦小編為您整理發布韓國裸機云服務器的詳細解釋。
    的頭像 發表于 11-06 10:11 ?127次閱讀

    freertos和rtos區別是什么

    FreeRTOS 和 RTOS(實時操作系統)是兩個不同的概念,但它們之間有緊密的聯系。FreeRTOS 是一個特定的開源實時操作系統,而 RTOS 是實時操作系統的一般概念。 概念定義 RTOS
    的頭像 發表于 09-02 14:18 ?1251次閱讀

    freertos和裸機有什么區別

    的、搶占式實時操作系統(RTOS),適用于微控制器和小型處理器。它提供了多任務處理、任務優先級、時間管理、內存管理、同步機制等功能,使得開發者能夠更容易地編寫復雜的實時應用程序。 1.2 裸機編程 裸機編程是指在沒有操作系統的情
    的頭像 發表于 09-02 14:13 ?1413次閱讀

    RTOS的特性和類型

    實時操作系統(RTOS)是一種可運行實時計算應用程序的軟件平臺,用于處理具有明確時間約束的事件和數據。與通用操作系統(GPOS)不同,RTOS必須在有限的硬件資源上調度應用程序之間的處理和數據共享
    的頭像 發表于 08-20 11:29 ?591次閱讀

    RTOS開發最佳實踐

    基于RTOS編寫應用程序時,有一些要注意事項。在本節中,您將學習RTOS開發最佳實踐,例如POSIX合規性、安全性和功能安全認證。
    的頭像 發表于 08-20 11:24 ?456次閱讀

    東京裸機云多IP服務器全面分析

    東京裸機云多IP服務器是一種提供多IP地址分配和高性能網絡服務的云計算解決方案,廣泛應用于需要多IP管理和高穩定性的網絡應用。下面將從幾個方面具體介紹東京裸機云多IP服務器,rak部落為您整理發布東京裸機云多IP服務器的全面分析
    的頭像 發表于 07-22 09:49 ?332次閱讀

    洛杉磯裸機云大寬帶服務器的特性和優勢

    洛杉磯裸機云大寬帶服務器是結合了物理服務器性能和云服務靈活性的高性能計算服務,為用戶提供高效、安全的計算和存儲能力。在了解如何使用洛杉磯裸機云大寬帶服務器之前,需要了解其基本特性和優勢。以下是對洛杉磯裸機云大寬帶服務器的具體分析
    的頭像 發表于 07-08 10:11 ?249次閱讀

    STM32mp135裸機開發無法使用DDR嗎?

    /STM32CubeMP13_Package_-_Getting_started#Integrating_AzureRTOS_middleware 咨詢一下關于DDR的使用問題: 1.只有RTOS的才能對DDR進行配置嗎? 2.單純裸機開發(無
    發表于 03-11 07:01

    基于RTOS的應用進程中的典型線程

    RTOS中的關鍵因素是最小的中斷延遲和最小的線程切換延遲。RTOS的價值在于它的響應速度或可預測性,而不是它在給定時間段內可以執行的工作量。
    發表于 03-05 09:32 ?608次閱讀
    基于<b class='flag-5'>RTOS</b>的應用進程中的典型線程

    爆蘋果正在探索開發帶攝像頭的AirPods

    據知名蘋果爆料記者馬克?古爾曼消息,蘋果正在探索開發帶攝像頭的AirPods。
    的頭像 發表于 02-27 15:04 ?839次閱讀

    何時選擇裸機?何時選擇RTOS?何時選擇GPOS?

    在每個開發項目的初期,你都必須選擇軟件開發的基礎。雖然有很多選擇,但它們通常分為三類:裸機、實時操作系統(RTOS)或通用操作系統(GPOS)。
    的頭像 發表于 02-27 11:42 ?1178次閱讀

    分享幾點RTOS相比裸機的優勢

    嵌入式系統中,有很多方式實現任務調度。功能有限的小系統中,無限循環足夠實現小系統的功能。當軟件設計變得龐大且復雜時,開發者應該考慮使用實時操作系統RTOS
    的頭像 發表于 01-24 18:23 ?1626次閱讀
    分享幾點<b class='flag-5'>RTOS</b>相比<b class='flag-5'>裸機</b>的優勢

    幾點RTOS相比裸機的優勢分享

    相比前后臺系統中后臺順序執行的程序主體,在多線程系統中,根據程序的功能,我們把這個程序主體分割成一個個獨立的,無限循環且不能返回的小程序,這個小程序我們稱之為線程。
    發表于 01-24 18:21 ?819次閱讀
    幾點<b class='flag-5'>RTOS</b>相比<b class='flag-5'>裸機</b>的優勢分享

    如何在裸機系統中集成SystemView

    SystemView是嵌入式系統可視化分析工具,提供了對應用程序的完整洞察,包括時間軸、CPU負載、運行時間信息、上下文運行時信息等可視化窗口,能夠幫助開發者獲得對應用運行時行為的深入理解。除μC
    的頭像 發表于 12-29 11:07 ?2078次閱讀
    如何在<b class='flag-5'>裸機</b>系統中集成SystemView
    主站蜘蛛池模板: 激情综合五月网| 国产精品免费久久久免费| 亚洲免费国产| 四虎黄色| 国产精品三区四区| www.久久精品视频| www.夜夜爽| 中文字幕色婷婷在线精品中| 香蕉视频网站在线播放| 国模视频一区| 国产一级簧片| 性生活一区| 艹逼免费视频| 日本人视频-jlzz jlzz jlzz| 亚洲一卡2卡3卡4卡5卡乱码| 亚洲天堂不卡| 丁香婷婷影院| 男操女视频网站| 日韩毛片高清免费| 日日日天天射天天干视频| 免费播放一区二区三区| 久久美女免费视频| 天天色啪| 国产精品久久久久乳精品爆| 两性色午夜视频自由成熟的性| 日本jlzz| 伊人涩| 国产女主播在线播放一区二区| 成人黄色一级片| 色婷婷一区二区三区四区成人 | 成人夜夜| 四虎最新视频| 国产女人和拘做受视频免费| 成年女人毛片| 日韩美毛片| 欧美日韩伦理| 兔费看全黄三级| 国产三级毛片视频| xxxxx日本69| 毛片综合| 色哟永久免费|