• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種基于Cortex-M3的任務(wù)核心機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)

    2020-12-28 02:10:22方敏
    電腦知識(shí)與技術(shù) 2020年33期

    摘要:嵌入式實(shí)時(shí)操作系統(tǒng)是整個(gè)嵌入式實(shí)時(shí)系統(tǒng)的核心,采用嵌入式實(shí)時(shí)操作系統(tǒng)( RTOS)可以更合理、更有效地利用CPU資源,簡(jiǎn)化應(yīng)用軟件設(shè)計(jì),縮短系統(tǒng)開發(fā)時(shí)間。該文基于Cortex-M3芯片內(nèi)核,設(shè)計(jì)并實(shí)現(xiàn)了一種針對(duì)RTOS的任務(wù)核心機(jī)制,包括任務(wù)切換、任務(wù)時(shí)間片切換、任務(wù)延時(shí)接口實(shí)現(xiàn)、臨界區(qū)保護(hù)、多優(yōu)先級(jí)任務(wù)等功能,從而高效率實(shí)現(xiàn)了基于RTOS任務(wù)管理,提高了系統(tǒng)的實(shí)時(shí)性和可靠性。

    關(guān)鍵詞:Cortex-M3:RTOS;任務(wù)機(jī)制;切換;多優(yōu)先級(jí)

    中圖分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A

    文章編號(hào):1009-3044(2020)33-0074-02

    開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):

    1 背景

    在后PC時(shí)代,嵌入式的發(fā)展逐漸取代PC成為時(shí)代主流,嵌入式實(shí)系統(tǒng)的應(yīng)用日益廣泛[1]。嵌入式實(shí)時(shí)操作系統(tǒng)( RTOS)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)[2]為基礎(chǔ),軟硬可裁剪[3],適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性[4]、成本、體積、功耗等嚴(yán)格要求,當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),能夠接受并以足夠快的速度予以處理[5]。其處理的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)做出快速響應(yīng)[6],調(diào)度一切可利用的資源完成實(shí)時(shí)任務(wù),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)行的操作系統(tǒng)。

    RTOS系統(tǒng)如果要有更好的事件實(shí)時(shí)處理機(jī)制,需要對(duì)任務(wù)機(jī)制進(jìn)行設(shè)計(jì),讓其對(duì)任務(wù)進(jìn)行較好的管理,設(shè)計(jì)任務(wù)的切換,任務(wù)時(shí)間片設(shè)計(jì)、任務(wù)延時(shí)接口處理、臨界區(qū)及調(diào)度鎖的保護(hù)、多優(yōu)先級(jí)任務(wù)等。

    2 Cortex-M3芯片內(nèi)核

    Cortex-M3是ARM公司開發(fā)的CPU內(nèi)核。Cortex-M3是一個(gè)32位處理器內(nèi)核,內(nèi)部的數(shù)據(jù)路徑是32位,寄存器是32位,存儲(chǔ)器接口是32位。Cortex-M3采用哈佛架構(gòu),擁有獨(dú)立的指令總線和數(shù)據(jù)總線,取指與數(shù)據(jù)訪問可以同時(shí)進(jìn)行。

    Cortex-M3支持小端模式、大端模式。Cortex-M3內(nèi)核通過接口總線的形式掛載了儲(chǔ)存器、外設(shè)、中斷等組成一個(gè)MCU,如圖1所示:

    Cortex-M3預(yù)先定義了“粗線條的”存儲(chǔ)器映射。通過把片上外設(shè)的寄存器映射到外設(shè)區(qū),就可以簡(jiǎn)單地以訪問內(nèi)存的方式來訪問這些外設(shè)的寄存器,從而控制外設(shè)的工作。各個(gè)分區(qū)存儲(chǔ)器映射如圖2所示:

    3 任務(wù)核心機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)

    3.1任務(wù)切換

    任務(wù)切換又叫上下文切換,當(dāng)操作系統(tǒng)需要運(yùn)行其他任務(wù)時(shí),操作系統(tǒng)首先會(huì)保存和當(dāng)前任務(wù)相關(guān)的寄存器的內(nèi)容到當(dāng)前任務(wù)的棧中,然后從將要加載的任務(wù)的棧中取出之前保存的全部寄存器的內(nèi)容并加載到相關(guān)的寄存器中,從而繼續(xù)運(yùn)行被加載的任務(wù)[7]。

    構(gòu)建一個(gè)最小的兩個(gè)任務(wù)切換運(yùn)行的小系統(tǒng),目的是理解RTOS任務(wù)切換的核心原理[8]。有兩個(gè)任務(wù),分別執(zhí)行taskIEn-try和task2Entry。功能是分別對(duì)相應(yīng)的變量進(jìn)行周期性置0置1,每次完成從1->0的切換后,自動(dòng)切換至另一個(gè)任務(wù)中運(yùn)行。這樣便實(shí)現(xiàn)了兩個(gè)任務(wù)交替性地使用一段時(shí)間CPU,對(duì)相應(yīng)變量值修改。仿真結(jié)果如圖3所示:

    3.2 任務(wù)時(shí)間片的實(shí)現(xiàn)

    構(gòu)建一個(gè)最小的基于時(shí)間片切換的任務(wù)系統(tǒng),目的是理解RTOS時(shí)間片切換的核心原理。在上個(gè)任務(wù)切換實(shí)現(xiàn)的基礎(chǔ)上中,改用SysTick定時(shí)器來使taskl和task2均等的占用CPU,即配置其多久切換一次。配置SysTick定時(shí)器:

    void tSetSysTickPeriod(uint32_t ms)

    SysTick->LOAD= ms*SystemCoreClock/1000 -1;

    NVIC_SetPriority

    (SysTick_IRQn,

    (1《_NVIU1RIO_BITS) -1);

    SysTick->VAL=0;

    SysTick->CTRL= SysTick_CTRL_CLKSOURCE_Msk l

    SysTick_CTRL_TICKINT_Msk f

    SYsTick_CTRL_ENABLE_Msk;

    }

    3.3臨界區(qū)和保護(hù)鎖的保護(hù)

    3.3.1臨界區(qū)的保護(hù)

    使用關(guān)中斷保護(hù)臨界區(qū),由于共享資源的訪問存在于任務(wù)與任務(wù),任務(wù)與中斷ISR之間,那么只需要防止任務(wù)在訪問共享資源時(shí)切換到其它任務(wù)或防止中斷發(fā)生。

    uint32_t tTaskEnterCritical (void)//進(jìn)入臨界區(qū) 返回進(jìn)入之前的臨界區(qū)狀態(tài)值

    {

    uint32_t primask= _get_PRIMASKO;

    _disable_irq0;

    //CPSID I

    return primask;

    //退出臨界區(qū),恢復(fù)之前的臨界區(qū)狀態(tài)status進(jìn)入臨界區(qū)之前的CPU返回進(jìn)入臨界區(qū)之前的臨界區(qū)狀態(tài)值

    void tTaskExitCritical (uint32_t status){

    一set_PRIMASK(status);

    3.3.2 調(diào)度鎖保護(hù)

    調(diào)度鎖保護(hù)能在多個(gè)任務(wù)共享資源時(shí)進(jìn)行保護(hù),其工作原理是上鎖時(shí),禁止任務(wù)切換。無論何種情況,即使時(shí)間片用完了,仍運(yùn)行原任務(wù),直至解鎖時(shí),才允許任務(wù)切換。

    1)初始化調(diào)度鎖計(jì)數(shù)器:

    schedLockCount=0:

    2)禁止任務(wù)調(diào)度(調(diào)度器上鎖):

    uint32_t status= tTaskEnterCritical0;

    if (schedLockCount< 255)

    schedLockCount++;

    tTaskExitCritical(status);

    3)允許任務(wù)調(diào)度(調(diào)度器解鎖):

    uint32_t status= tTaskEnterCritical0;

    if (schedLockCount>01

    if (--schedLockCount==01

    ‘TaskSched0;

    tTaskExitCritical(status);

    3.4 多優(yōu)先級(jí)任務(wù)

    任務(wù)數(shù)量無限,而資源有限。當(dāng)多個(gè)任務(wù)在等待同一資源或事件時(shí),如果資源或事件不能在任務(wù)間共享,應(yīng)該由哪個(gè)任務(wù)來處理?根據(jù)實(shí)際應(yīng)用特點(diǎn),為任務(wù)指定優(yōu)先級(jí)。優(yōu)先級(jí)更高的任務(wù),具備對(duì)CPU、事件和資源的優(yōu)先處理權(quán)和占有權(quán)。

    RTOS維護(hù)一個(gè)就緒表,指明哪些優(yōu)先級(jí)的任務(wù)等待占用CPU運(yùn)行,每個(gè)表項(xiàng)對(duì)應(yīng)一個(gè)任務(wù),對(duì)應(yīng)一種優(yōu)先級(jí)。為了便于快速找到優(yōu)先級(jí)更高的任務(wù),使用了就緒位圖,如圖4所示:

    3.5 任務(wù)的實(shí)現(xiàn)

    為使系統(tǒng)完整,加入任務(wù)掛起與喚醒、任務(wù)刪除和任務(wù)狀態(tài)查詢等接口實(shí)現(xiàn)。未創(chuàng)建:只定義了任務(wù)代碼,未調(diào)用tTas-klnit0初始化。就緒:任務(wù)已經(jīng)創(chuàng)建,且等待機(jī)會(huì)占用CPU運(yùn)行。運(yùn)行:任務(wù)正在占用CPU運(yùn)行代碼。延時(shí):任務(wù)調(diào)用了tTaskDelay0延時(shí)。掛起:暫停任務(wù)運(yùn)行。

    進(jìn)入臨界區(qū):

    uint32_t status= tTaskEnterCritical0;

    不允許對(duì)已經(jīng)進(jìn)入延時(shí)狀態(tài)的任務(wù)掛起:iff! (task->state&TINYOS_TASK—STATE_DELAYED)

    增加掛起計(jì)數(shù),僅當(dāng)該任務(wù)被執(zhí)行第一次掛起操作時(shí),才考慮是否要執(zhí)行任務(wù)切換操作:

    if (++task->suspendCount<=1)

    task->state l= TINYOS_TASK—STATE_SUSPEND;

    tTaskSchedUnRdy(task);

    if (task==currentTask)

    tTaskSched0;

    4 結(jié)束語(yǔ)

    本文的解決方案和實(shí)施過程成功開發(fā)了一個(gè)小型的嵌入式實(shí)時(shí)操作系統(tǒng),解決了RTOS任務(wù)核心機(jī)制。經(jīng)測(cè)試,實(shí)現(xiàn)了任務(wù)管理的高可用性。

    RTOS系統(tǒng)具有更好的事件實(shí)時(shí)處理機(jī)制,當(dāng)事件發(fā)生時(shí),或有更高優(yōu)先級(jí)的任務(wù)需要運(yùn)行時(shí),均能快速切換過去,做更重要更緊急的事情,解決了前后臺(tái)實(shí)時(shí)性不能保證的缺點(diǎn);有通用的任務(wù)管理框架,開發(fā)不同項(xiàng)目時(shí)可重復(fù)利用,簡(jiǎn)化了開發(fā)難度,更加接近于人處理問題的思考方式,解決了前后臺(tái)系統(tǒng)強(qiáng)迫人按照機(jī)器的工作順序方式思考編碼的缺陷。

    參考文獻(xiàn):

    [1]王穎潔,周寬久,李明楚.實(shí)時(shí)嵌入式系統(tǒng)的WCET分析與預(yù)測(cè)研究綜述[J].計(jì)算機(jī)科學(xué),2019,46(S1):16-22.

    [2]孫濤,楊建勛,羅軍,等.通用操作系統(tǒng)安全保護(hù)技術(shù)研究與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2020(5):59-61,63.

    [3]楊鴻珍,王云燁,吳建偉,等。基于人工智能的高可信嵌入式操作系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2020,43(16):153-155,158.

    [4]丁如藝,張激,李嘉偉.嵌入式系統(tǒng)平臺(tái)抽象層設(shè)計(jì)與接口實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2020,29(3):108-113.

    [5]吳利生.基于ARM Cortex-A9 MPCore嵌入式多核操作系統(tǒng)內(nèi)核研究與實(shí)現(xiàn)[J].數(shù)字技術(shù)與應(yīng)用,2020(3):134-135.

    [6]黃忠建,代紅兵,王蕾.嵌入式Forth操作系統(tǒng)實(shí)時(shí)調(diào)度算法研究[J].計(jì)算機(jī)應(yīng)用研究,2019,36(9):2700-2703,2721.

    [7]劉進(jìn)英,董濤.基于嵌入式操作系統(tǒng)RTX-51的單片機(jī)多任務(wù)編程[J].電子技術(shù)與軟件工程,2019(23):235-236.

    [8]代紅兵,周永錄,安紅萍,等.嵌入式Forth虛擬機(jī)架構(gòu)的多任務(wù)調(diào)度算法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2019,36(2):472-475,485.

    【通聯(lián)編輯:謝媛媛】

    作者簡(jiǎn)介:方敏(1981-),女,四川眉山人,講師,碩士,研究方向?yàn)檐浖こ獭?/p>

    潜山县| 米易县| 阿坝县| 正阳县| 邛崃市| 竹北市| 萨嘎县| 遵义县| 砚山县| 永靖县| 甘德县| 绍兴市| 拉孜县| 嫩江县| 老河口市| 鲁甸县| 黔南| 垣曲县| 新民市| 哈尔滨市| 阳城县| 永靖县| 休宁县| 万源市| 明光市| 化隆| 治多县| 青田县| 松桃| 溆浦县| 仙游县| 增城市| 固阳县| 来宾市| 裕民县| 白沙| 衡阳市| 明溪县| 织金县| 吉林省| 甘谷县|