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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(二)

CHANBAEK ? 來源:CSDN-借過風(fēng)景 ? 作者:CSDN-借過風(fēng)景 ? 2023-01-31 13:50 ? 次閱讀

今天聊下移植RTOS時(shí)RISC-V內(nèi)核時(shí)單片機(jī)任務(wù)棧保存哪些內(nèi)容。

上一章中列舉了所有的寄存器,當(dāng)需要切換任務(wù)時(shí)刻的寄存器值,除x0恒為0,其他的寄存器無法預(yù)知其值,切換時(shí)均需要保存(gp寄存器編譯好后,固定不變,理論上可以不操作,為保持一致性和完整性,一并保存),如果使用浮點(diǎn),還應(yīng)該包括浮點(diǎn)寄存器。 每個(gè)RTOS均會(huì)定義一個(gè)和上下文保存相關(guān)的結(jié)構(gòu)體,以rt-thread為例,可以看到如下圖1的數(shù)據(jù)結(jié)構(gòu)定義。

pYYBAGPYq96ARIbwAAOAjPNk5hg719.png

圖1 上下文保存結(jié)構(gòu)體

可以看到除了通用寄存器外,還有兩個(gè)前文提到的成員mepc、mstatus,其中mstatus中含有中斷的使能控制位,而mepc為機(jī)器模式下異常程序指針寄存器,其值會(huì)在執(zhí)行mret后更新給pc,我們正式通過設(shè)置該寄存器的值來控制程序運(yùn)行的切換。

當(dāng)我們新建一個(gè)線程,初始化線程時(shí),會(huì)為其開辟一個(gè)線程棧(程序中通常設(shè)置一個(gè)數(shù)組),即對(duì)上述結(jié)構(gòu)體做初始化,在rt-thread中的代碼如下圖2所示。

poYBAGPYq96AEg1zAAHMQmxj6UA843.png

圖2 線程堆棧初始化

由程序可知,堆棧初始化在線程初始化中被調(diào)用,線程初始化程序中首先將整個(gè)堆棧空間設(shè)成“#”,然后根據(jù)堆棧的增長(zhǎng)方向設(shè)置不同參數(shù),以紅框中的向下增長(zhǎng)為例,將線程的入口位置,線程可以帶一個(gè)參數(shù),返回地址,堆棧頂部地址。從堆棧初始化程序*rt_hw_stack_init中可以看出,其先將堆棧頂部地址對(duì)齊,然后向下偏移一個(gè)rt_hw_stack_frame結(jié)構(gòu)體的大小,用于存儲(chǔ)圖1中需要存儲(chǔ)的寄存器,并對(duì)該部分空間進(jìn)行了初始化。其中把線程的入口地址給了mepc,線程輸入?yún)?shù)給a0,mstatus初始值(MPP、MPIE、FS、MIE),即強(qiáng)制機(jī)器模式,使能浮點(diǎn),MPIE為1,MIE為0。如果不帶硬件浮點(diǎn),可將該值設(shè)置為0x1880。另外設(shè)置ra為線程的返回地址,一般情況下一個(gè)線程我們希望一直運(yùn)行的,當(dāng)需要返回時(shí)說明該線程不再需要運(yùn)行,所以返回地址一般是一段將該線程從線程列表中刪除并切換至下一個(gè)線程的一段程序,即圖2紅框的中調(diào)用的函數(shù)_rt_thread_exit。

初始化線程時(shí)會(huì)定義一個(gè)rt_thread結(jié)構(gòu)的全局變量,線程的操作即依靠該結(jié)構(gòu)體。其內(nèi)部?jī)?nèi)容如下圖3所示,其內(nèi)部可以看到一個(gè)sp成員,初始化好的堆棧指針即傳給該成員。

poYBAGPYq96AaRzyAADJ3FDL9FI924.png

pYYBAGPYq96Aaa7DAADoOMLOp2w772.png

圖3 rt_thread結(jié)構(gòu)體詳情

綜上可以看出有每個(gè)線程一個(gè)rt_thread結(jié)構(gòu)體,由rt_thread->sp可獲得該線程的堆棧位置,堆棧的棧頂?shù)膕izeof(rt_hw_stack_frame)空間存放了該線程運(yùn)行需要的CPU寄存器值,剩余空間用于該線程運(yùn)行時(shí)變量的出入棧。

以上的內(nèi)容在其他RTOS中也能看到,例如上下文保存結(jié)構(gòu)體rt_hw_stack_frame在華為鴻蒙LiteOS_M中有TaskContext,TencentOS_Tiny中有cpu_context_t,而線程管理的結(jié)構(gòu)體rt_thread,LiteOS_M中LosTaskCB,TencentOS_Tiny中有k_task_st等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6032

    文章

    44525

    瀏覽量

    633256
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5325

    瀏覽量

    120052
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1366

    瀏覽量

    40235
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    809

    瀏覽量

    119451
  • RISC-V
    +關(guān)注

    關(guān)注

    44

    文章

    2233

    瀏覽量

    46045
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RISC-V 跑大模型():LLaMA零基礎(chǔ)移植教程

    這是RISC-V跑大模型系列的第篇文章,主要教大家如何將LLaMA移植RISC-V環(huán)境里。
    的頭像 發(fā)表于 07-17 16:16 ?1361次閱讀
    <b class='flag-5'>RISC-V</b> 跑大模型(<b class='flag-5'>二</b>):LLaMA零基礎(chǔ)<b class='flag-5'>移植</b>教程

    risc-v的mcu對(duì)RTOS兼容性如何

    RISC-V的MCU對(duì)RTOS實(shí)時(shí)操作系統(tǒng))的兼容性主要取決于多個(gè)因素,包括RTOS的版本、RISC-
    發(fā)表于 05-27 16:26

    RISC-V中***會(huì)子活動(dòng)之一:基于RISC-V的鴻蒙開發(fā)板設(shè)計(jì)

    的新一代物聯(lián)網(wǎng)操作系統(tǒng)系統(tǒng)RISC-V單片機(jī)不同于ARM架構(gòu)的單片機(jī)RISC-V+鴻蒙,目
    發(fā)表于 06-03 16:26

    如何實(shí)現(xiàn)一個(gè)RISC-V內(nèi)核架構(gòu)的芯片移植工作

    取決于 RTOS 如何實(shí)現(xiàn)當(dāng)然,也可以使用 Software interrupt 來做任務(wù)切換, libcpu/risc-v/nuclei 這里的內(nèi)核移植,就是使用了 Software interrupt
    發(fā)表于 03-25 10:11

    基于RT-Thread操作系統(tǒng)衍生rt-smart實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介

    ,例如 ARM Cortex-A 系列芯片,MIPS 芯片,帶 MMU 的 RISC-V 芯片等。rt-smart 在 RT-Thread 操作系統(tǒng)的基礎(chǔ)上啟用獨(dú)立、完整的進(jìn)程方式,同時(shí)以混合微內(nèi)核模式
    發(fā)表于 06-22 17:56

    基于實(shí)時(shí)操作系統(tǒng)單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)

    介紹了Small RTOS 51 多任務(wù)操作系統(tǒng)的基本原理,結(jié)合單片機(jī)控制的電子存包柜,簡(jiǎn)要介紹了移植small RTOS51 及通過消息隊(duì)
    發(fā)表于 01-06 16:21 ?51次下載

    關(guān)于單片機(jī)與嵌入式、操作系統(tǒng)RTOS之間的關(guān)系詳解

    這篇文章我們就來聊一下關(guān)于單片機(jī)與嵌入式、操作系統(tǒng)RTOS 之間的那些事!通過這篇文章,讓你操作系統(tǒng)實(shí)時(shí)性有一個(gè)
    的頭像 發(fā)表于 03-29 14:20 ?7757次閱讀
    關(guān)于<b class='flag-5'>單片機(jī)</b>與嵌入式、<b class='flag-5'>操作系統(tǒng)</b>與 <b class='flag-5'>RTOS</b>之間的關(guān)系詳解

    實(shí)時(shí)操作系統(tǒng)Free RTOS的詳細(xì)介紹

    ,可基本滿足較小系統(tǒng)的需要。 由于RTOS需占用一定的系統(tǒng)資源(尤其是RAM資源),只有μC/OS-II、embOS、salvo、FreeRTOS等少數(shù)實(shí)時(shí)
    發(fā)表于 06-21 14:30 ?6180次閱讀

    轉(zhuǎn)載:DIY:給單片機(jī)寫個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核

    轉(zhuǎn)載:DIY:給單片機(jī)寫個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核
    發(fā)表于 11-13 19:36 ?1次下載
    轉(zhuǎn)載:DIY:給<b class='flag-5'>單片機(jī)</b>寫個(gè)<b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>內(nèi)核</b>!

    基于精簡(jiǎn)指令集的RISC-V內(nèi)核單片機(jī)

    RISC-V就不必多說了,詳細(xì)大家都了解。它是一個(gè)基于精簡(jiǎn)指令集的開源指令集架構(gòu)。與主流的主流的架構(gòu)為x86與ARM架構(gòu)不同,其特點(diǎn)就是完全開源。今天跟大家一起盤點(diǎn)一下國產(chǎn)RISC-V內(nèi)核
    的頭像 發(fā)表于 10-17 16:49 ?2220次閱讀

    基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(一)

      ARM上移植實(shí)時(shí)操作系統(tǒng)大家可能比較熟悉,且例程較多,對(duì)于RISC-V內(nèi)核單片機(jī),可能相對(duì)
    的頭像 發(fā)表于 01-31 12:08 ?2624次閱讀
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(一)

    基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(三)

      接著以WCH沁恒微電子的赤菟V103(CH32V103)和赤菟V307(CH32V307)兩款RISC-V
    的頭像 發(fā)表于 01-31 13:52 ?1804次閱讀
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(三)

    基于RISC-V內(nèi)核單片機(jī)移植RTOS實(shí)時(shí)操作系統(tǒng)(四)

     接著以WCH沁恒微電子的赤菟V103(CH32V103)和赤菟V307(CH32V307)兩款RISC-V
    的頭像 發(fā)表于 01-31 13:54 ?1430次閱讀
    基于<b class='flag-5'>RISC-V</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>單片機(jī)</b><b class='flag-5'>移植</b><b class='flag-5'>RTOS</b><b class='flag-5'>實(shí)時(shí)</b><b class='flag-5'>操作系統(tǒng)</b>(四)

    Green Hills Software 為 Imagination RISC-V CPU 增加量產(chǎn)就緒的 RTOS 和工具支持

    認(rèn)證的實(shí)時(shí)操作系統(tǒng)RTOS)以增強(qiáng)生態(tài)系統(tǒng)支持。該合作將繼續(xù)擴(kuò)展到 ImaginationCatapult CPU 系列的未來產(chǎn)品上。 μ- veloSity
    的頭像 發(fā)表于 07-06 10:15 ?542次閱讀
    Green Hills Software 為 Imagination <b class='flag-5'>RISC-V</b> CPU 增加量產(chǎn)就緒的 <b class='flag-5'>RTOS</b> 和工具支持

    RISC-V跑大模型():LLaMA零基礎(chǔ)移植教程

    這是RISC-V跑大模型系列的第篇文章,主要教大家如何將LLaMA移植RISC-V環(huán)境里。
    的頭像 發(fā)表于 07-10 10:10 ?1042次閱讀
    <b class='flag-5'>RISC-V</b>跑大模型(<b class='flag-5'>二</b>):LLaMA零基礎(chǔ)<b class='flag-5'>移植</b>教程