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

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

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

3天內不再提示

多任務系統中的堆棧使用

麥克泰技術 ? 來源:麥克泰技術 ? 作者:麥克泰技術 ? 2022-12-02 11:15 ? 次閱讀

在使用μC/OS的多任務應用程序中,main()啟動后首先使用系統C棧,在OS啟動后使用任務棧。

基于μC/OS-II或μC/OS-III編寫應用代碼時,用戶必須為每個任務聲明一個堆棧,用于任務運行現場及保存任務上下文(CPU寄存器)。在多任務處理開始之前執行的C代碼將使用C棧。只有當應用程序的第一個任務開始運行時,棧才會從C棧中轉移到任務棧。

不同的微控制器棧的實現也不同,許多32位處理器支持多個棧。例如,ARM Cortex-M內核有兩個棧指針,分別指向主棧和進程棧。在基于μC/OS-III的應用中,多任務開始前使用主堆棧,其空間為鏈接命令文件中定義的堆棧區域。當應用程序調用OSStart()函數啟動多任務時,進程堆棧指針被設置為第一個任務堆棧的棧頂地址,并修改控制寄存器,使任務開始運行時使用該堆棧。同時,主堆棧指針被用來指向μC/OS-III的中斷堆棧OSCfg_ISRStk[]。后續多任務系統運行過程中,此堆棧將專門用于中斷和異常處理程序。多任務啟動后,C堆棧會丟失,導致嵌入式應用中可用的RAM量減少,在資源有限的應用中,可以重用C堆棧空間,用于任務堆棧,具體實現可以參考文章:技術小課堂| μC/OS-III的應用中CSTACK重用

由于main()對C堆棧的依賴,必須確保為這個堆棧留出足夠的空間。如上所述,μC/OS-III用戶還必須知道OSCfg_ISRStk[]棧的大小。OSCfg_ISRStk[]是一個數組,類似于任務堆棧,其大小由內核配置常量OS_CFG_ISR_STK_SIZE決定。另一方面,C堆棧的大小通常直接提供給鏈接器,因此在不同開發環境中對該堆棧進行更改的方法是不一樣的。

在Segger Embedded Studio中,Cortex-M的應用中main()使用的堆棧通常被命名為stack,可以通過工程options菜單進行堆棧配置,無需直接更改鏈接器文件。

30bfb07e-71ee-11ed-8abf-dac502259ad0.png

如果基于μC/OS-III官方示例工程開發,通常不需要修改C棧的大小。這些工程已為main()的執行分配了足夠的空間。不過,中斷堆棧大小的定義OS_CFG_ISR_STK_SIZE可能需要進行一些調整。對于使用獨立中斷堆棧的應用,如果不在中斷處理程序增加復雜的函數調用,示例的默認大小即可滿足需求。

基于μC/OS構建的系統在main()運行過程中依賴C堆棧,一旦調用OSStart()后,系統就切換到任務堆棧,以便開始多任務處理。

審核編輯 :李倩

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

    關注

    48

    文章

    7906

    瀏覽量

    153707
  • 寄存器
    +關注

    關注

    31

    文章

    5421

    瀏覽量

    123360
  • 堆棧
    +關注

    關注

    0

    文章

    183

    瀏覽量

    20039
  • 應用程序
    +關注

    關注

    38

    文章

    3322

    瀏覽量

    58735

原文標題:多任務系統中的堆棧使用

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    多任務處理卡頓頻發,無風扇工控機如何優化性能?聚徽廠家一文讀懂

    在工業自動化、物聯網等領域的深度應用,無風扇工控機常常需要同時運行數據采集、實時監控、程序控制等多個任務。然而,頻繁出現的多任務處理卡頓問題,不僅影響生產效率,還可能導致數據丟失、系統
    的頭像 發表于 06-03 15:25 ?96次閱讀

    快速入門——LuatOS:sys庫多任務管理實戰攻略!

    在嵌入式開發多任務管理是提升系統效率的關鍵。本教程專為快速入門設計,聚焦LuatOS的sys庫,通過實戰案例帶你快速掌握多任務創建、調度與同步技巧。無論你是零基礎新手還是希望快速提
    的頭像 發表于 05-29 14:36 ?95次閱讀
    快速入門——LuatOS:sys庫<b class='flag-5'>多任務</b>管理實戰攻略!

    AGV監控與任務管理系統設計

    AGV在智能物流核心,助力工業4.0和中國制造2025。AGV管理監控調度系統實時監控、任務管理、路徑規劃,確保高效便捷。AGV市場前景廣闊,解決人口紅利喪失、勞動力成本上升等問題,物流裝備業迎來機遇。
    的頭像 發表于 03-05 12:10 ?245次閱讀
    AGV監控與<b class='flag-5'>任務</b>管理<b class='flag-5'>系統</b>設計

    BEVFusion —面向自動駕駛的多任務多傳感器高效融合框架技術詳解

    BEVFusion 技術詳解總結——面向自動駕駛的多任務多傳感器高效融合框架原始論文:*附件:bevfusion.pdf介紹(Introduction)背景:自動駕駛系統配備了多種傳感器,提供互補
    的頭像 發表于 02-26 20:33 ?3683次閱讀
    BEVFusion —面向自動駕駛的<b class='flag-5'>多任務</b>多傳感器高效融合框架技術詳解

    MCU在車載系統的展望

    和實時性表現,以滿足車載系統多任務處理的需求,如自動駕駛輔助系統同時處理多個傳感器數據,信息娛樂系統
    發表于 01-17 12:11

    AUTOSAR通信堆棧的配置 AUTOSAR通信模塊測試方法

    )的開發和生產。通信堆棧是AUTOSAR架構的關鍵組成部分,負責處理ECU之間的通信。 AUTOSAR通信堆棧的配置 通信模型 : AUTOSAR定義了一種分層的通信模型,包括應用
    的頭像 發表于 12-17 15:01 ?811次閱讀

    航電實時測試系統解決方案

    航電實時測試系統主要應用于航空座艙的實時測試。座艙測試過程,輸入和輸出信號的實時性至關重要,尤其是在多任務操作時,必須保證系統穩定的loop時間。為了滿足這一需求,客戶選擇了基于Li
    的頭像 發表于 10-23 15:34 ?622次閱讀
    航電實時測試<b class='flag-5'>系統</b>解決方案

    freertos最多支持多少個任務

    以下幾個因素: 系統資源 :FreeRTOS能夠支持的任務數量受到系統硬件資源的限制,特別是處理器的RAM大小和性能。RAM用于存儲任務的控制塊(TCB)和
    的頭像 發表于 09-02 14:21 ?2006次閱讀

    堆棧和內存的基本知識

    本文主要聊聊關于堆棧的內容。包括堆棧和內存的基本知識。常見和堆棧相關的 bug,如棧溢出,內存泄漏,堆內存分配失敗等。后面介紹軟件堆棧統計
    的頭像 發表于 08-29 14:10 ?936次閱讀
    <b class='flag-5'>堆棧</b>和內存的基本知識

    如何使用Polyspace Code Prover來統計堆棧

    前一篇文章介紹了堆棧和內存的一些背景知識。本次介紹如何使用 Polyspace Code Prover來統計堆棧,如何使用這些數據為軟件優化服務。
    的頭像 發表于 07-25 14:06 ?1052次閱讀
    如何使用Polyspace Code Prover來統計<b class='flag-5'>堆棧</b>

    xTaskCreate能否把堆棧上限調整為2K或者1k?

    RTOS SDK 的系統任務優先級為 15 ,創建任務的接?口 xTaskCreate 為 freeRTOS ?自帶接?口,使 ?用 xTaskCreate 創建任務時,
    發表于 07-22 06:31

    請問est_printf為什么要使用堆棧空間?

    發送大量與 malloc/free 相關的調試消息后,任務堆棧之一已溢出。 我的問題是,誰能告訴我為什么除了調用ets_printf本身之外,堆棧還會發揮作用?
    發表于 07-09 07:47

    esp32-c3工程怎么創建多個freertos任務?

    ESP-IDF給出的ESP32-C3的例程都只有一個任務。即void app_main() 而且沒看見這個app_main任務是在哪里被創建的??? 如果我想建一個ESP32-C3的多任務
    發表于 06-27 06:37

    esp32如何實現一個set_stack設置堆棧的接口?

    剛剛開始玩esp32,在移植自己的系統,需要實現一個set_stack設置堆棧的接口。 static ALWAYS_INLINE void vsf_arch_set_stack(uint32_t
    發表于 06-24 06:26

    esp32S2創建任務時,若任務堆棧大小配置超過 4096*6 ,該任務會創建失敗,如何解決?

    esp32S2創建任務時,若任務堆棧大小配置超過 4096*6 ,該任務會創建失敗, xTaskCreat 返回 xReturn = ffffffff。是否應該修改FreeRTOSCo
    發表于 06-20 08:26
    主站蜘蛛池模板: 香蕉久久精品 | 中文天堂在线www | 国产专区青青草原亚洲 | 久久免费国产视频 | 国产叼嘿网站免费观看不用充会员 | 成人精品视频在线观看播放 | 在线看视频你懂的 | 欧美一级精品高清在线观看 | 综合亚洲一区二区三区 | 欧美黑人5o厘米全进去 | 免费日韩三级 | 伊人久久大香线蕉电影院 | 亚洲一卡二卡三卡 | 日本美女视频网站 | 影音先锋ady69色资源网站 | 成人亚洲欧美在线电影www色 | 182tv免费视视频线路一二三 | 成人免费观看一区二区 | 色天使美国| 天天干夜夜艹 | 久久99热精品免费观看无卡顿 | 中文字幕一区二区三区乱码aⅴ | 国产你懂 | 国产一级毛片国语版 | 黄色网址在线播放 | 免费大片黄日本在线观看 | 国产三级中文字幕 | 日本黄视频在线播放 | 韩国三级视频网站 | 国内精品久久久久影院免费 | 丁香婷五月 | 免费观看视频高清www | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | 超黄视频网站 | 五月婷婷综合在线 | 黄色三级在线观看 | 欧美一级鲁丝片 | 精品国产一区二区三区国产馆 | 免费一级毛毛片 | 亚洲免费播放 | 五月天婷婷免费观看视频在线 |