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

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

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

DSP實(shí)時(shí)多任務(wù)調(diào)度的解決方案

電子工程師 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2021-03-24 15:22 ? 次閱讀

DSP處理器是一種嵌入式處理器(embedded microprocessor),它專(zhuān)門(mén)用于數(shù)字信號(hào)處理,其在系統(tǒng)結(jié)構(gòu)和指令算法方面進(jìn)行了特殊設(shè)計(jì),具有很高的編譯效率和指令執(zhí)行速度。

嵌入式系統(tǒng)在當(dāng)今是一種非?;钴S的應(yīng)用,在工業(yè)、服務(wù)業(yè)、消費(fèi)電子等領(lǐng)域的應(yīng)用范圍都不斷擴(kuò)大。為了方便嵌入式系統(tǒng)的開(kāi)發(fā),人們研發(fā)了許多嵌入式操作系統(tǒng),如WinCE、uc/OS、嵌入式LinuxVxWorks、pSOS、QNX、Palm OS等,由于嵌入式系統(tǒng)往往用于一些較為實(shí)時(shí)性的用途,這些操作系統(tǒng)也往往被稱(chēng)為實(shí)時(shí)多任務(wù)操作系統(tǒng)(RTOS, Real Time Operation System)。這些系統(tǒng)往往被用在通用嵌入式處理器上(如ARM等)。

DSP系統(tǒng)和通用嵌入式系統(tǒng)的區(qū)別

雖然說(shuō)DSP也是一種嵌入式系統(tǒng),但是由于其“專(zhuān)用于數(shù)字信號(hào)處理”的特點(diǎn),其系統(tǒng)架構(gòu)也會(huì)同通用嵌入式系統(tǒng)略有區(qū)別(當(dāng)然,只是“略有區(qū)別”而已)。DSP往往用來(lái)跑高速的數(shù)學(xué)算法,而不牽涉到人機(jī)界面、數(shù)據(jù)庫(kù)、高層應(yīng)用等功能(從PC角度來(lái)理解的話(huà),DSP在一個(gè)嵌入式系統(tǒng)中的功能類(lèi)似于底層驅(qū)動(dòng),例如3D圖象的演算、環(huán)繞聲的演算、網(wǎng)絡(luò)協(xié)議處理等)。

因此,從這樣的認(rèn)識(shí)角度來(lái)看,DSP中的各種任務(wù)的調(diào)度在過(guò)程上相對(duì)“單純”些。DSP中的任務(wù)更加側(cè)重于“實(shí)時(shí)性”和“并行性”。實(shí)際上,對(duì)于單核的DSP芯片來(lái)說(shuō),并不可能存在真正的“并行計(jì)算”,所謂的并行只不過(guò)是通過(guò)高速切換幾個(gè)“串行的線(xiàn)程”來(lái)實(shí)現(xiàn)。而對(duì)于“實(shí)時(shí)性”,則要求盡可能多的將CPU時(shí)間用于計(jì)算,并且不同的線(xiàn)程間不能有阻塞的現(xiàn)象發(fā)生(從軟件角度看,就是執(zhí)行任務(wù)的代碼執(zhí)行時(shí)間要短,如果是復(fù)雜的算法,就需要對(duì)算法進(jìn)行優(yōu)化使得算法可以“分步執(zhí)行”)。

DSP實(shí)時(shí)多任務(wù)調(diào)度的解決方案

根據(jù)以上的分析,我們可以大致的得出一個(gè)簡(jiǎn)單的DSP RTOS的雛形,它的核心就是創(chuàng)建一種可以實(shí)時(shí)執(zhí)行的線(xiàn)程。這種線(xiàn)程被稱(chēng)為“PRD Task”(period task),指的是這種線(xiàn)程一旦創(chuàng)建,就由系統(tǒng)內(nèi)核自動(dòng)的周期性調(diào)用,而調(diào)度周期可以保證相當(dāng)高的時(shí)間精度。管理這個(gè)機(jī)制的部件叫做“PRD模塊”。

創(chuàng)建PRD任務(wù)的方法是在初始化的時(shí)候向內(nèi)核注冊(cè)一個(gè)PRD任務(wù)。

int Thread_PRD_Append(long TimeSlinceCount/*執(zhí)行周期

*/,void (*CallBackHandle)()/* 函數(shù)句柄*/)

返回值: TRUE / FALSE

函數(shù)功能:向系統(tǒng)注冊(cè)一個(gè)新的線(xiàn)程,指定執(zhí)行周期以及需要調(diào)度的函數(shù)句柄,系統(tǒng)便會(huì)在指定的時(shí)間間隔自動(dòng)調(diào)用這個(gè)函數(shù)。

這個(gè)注冊(cè)任務(wù)等待執(zhí)行的方式叫做“回調(diào)”,注冊(cè)的時(shí)候向內(nèi)核提交一個(gè)指定的執(zhí)行周期和任務(wù)函數(shù)的入口函數(shù)指針。內(nèi)核在通過(guò)計(jì)時(shí),在達(dá)到執(zhí)行周期的時(shí)候通過(guò)函數(shù)指針調(diào)用任務(wù)函數(shù)。

內(nèi)核為了管理這個(gè)功能,需要一張“PRD任務(wù)表”。它的定義如下:

typedef struct {

long TimeSlice_Current; //當(dāng)前時(shí)間片

long TimeSlice_Count; //總時(shí)間片

void (*Callback_Handle)(); //調(diào)用句柄

} Type_PRD_Table;

Type_PRD_Table PRD_Table[SYS__THREAD_PRD_TABLE_SIZE];//PRD表

int PRD_Table_ItemCount=0;//當(dāng)前的PRD表最大項(xiàng)目數(shù)

TimeSlice_Current和TimeSlice_Count兩個(gè)變量構(gòu)成了一個(gè)軟件定時(shí)器,內(nèi)核通過(guò)對(duì)于TimeSlice_Current的操作即可知道何時(shí)可以調(diào)用相關(guān)的任務(wù)函數(shù)。

相關(guān)的代碼如下。這是一個(gè)典型的減法計(jì)時(shí)器的代碼。

for(i=0;i 0)

{ PRD_Table[i].TimeSlice_Current --; //遞減時(shí)間片 }}

而在另外一處,需要判斷時(shí)間片計(jì)數(shù)器是否已經(jīng)計(jì)到0。

if((PRD_Table[i].TimeSlice_Current) == 0) {//調(diào)用相應(yīng)的句柄

PRD_Table[i].TimeSlice_Current=PRD_Table[i].TimeSlice_Count;//恢復(fù)時(shí)間片

(*(PRD_Table[i].Callback_Handle))();//調(diào)用任務(wù)入口函數(shù)指針 }

接著,需要將減法計(jì)時(shí)器的代碼放入一個(gè)硬件定時(shí)器中斷中,這樣便能保證這個(gè)減法計(jì)時(shí)的高度精確性。這個(gè)硬件定時(shí)器依賴(lài)于硬件,因此要求DSP芯片硬件上必須提供這樣一個(gè)定時(shí)器,否則這個(gè)DSP內(nèi)核便無(wú)法在這個(gè)DSP芯片上執(zhí)行(幸好基本上不太會(huì)存在沒(méi)有硬件定時(shí)器的DSP)。

而對(duì)于第二段代碼,判別時(shí)間片計(jì)數(shù)是否“已經(jīng)到點(diǎn)”的代碼則應(yīng)

當(dāng)放在一個(gè)死循環(huán)中。例如在main函數(shù)中放置一個(gè)死循環(huán)。

Void Main() {

for(;;) { …。。判斷時(shí)間片計(jì)數(shù)器是否已經(jīng)計(jì)到0的代碼}

…}

顯然,除了計(jì)時(shí)是對(duì)“到點(diǎn)”的判別以外,我們還需要初始化和添加任務(wù)的函數(shù)。

int Thread_PRD_Append(long TimeSlinceCount,void *CallbackHandle)

{//給PRD表添加任務(wù)

if(PRD_Table_ItemCount

責(zé)任編輯:lq6

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

    關(guān)注

    0

    文章

    26

    瀏覽量

    11682
  • 計(jì)時(shí)器
    +關(guān)注

    關(guān)注

    1

    文章

    416

    瀏覽量

    32572
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    雙電源電壓DSP的電源時(shí)序控制解決方案

    電子發(fā)燒友網(wǎng)站提供《雙電源電壓DSP的電源時(shí)序控制解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 11:33 ?0次下載
    雙電源電壓<b class='flag-5'>DSP</b>的電源時(shí)序控制<b class='flag-5'>解決方案</b>

    MES系統(tǒng)如何實(shí)現(xiàn)生產(chǎn)車(chē)間的實(shí)時(shí)監(jiān)控、精準(zhǔn)調(diào)度

    MES系統(tǒng)通過(guò)數(shù)據(jù)采集、傳輸、處理和展示等技術(shù)手段,實(shí)現(xiàn)了生產(chǎn)過(guò)程的實(shí)時(shí)監(jiān)控;同時(shí),通過(guò)生產(chǎn)計(jì)劃優(yōu)化、生產(chǎn)任務(wù)分配、動(dòng)態(tài)調(diào)度、資源優(yōu)化和協(xié)同管理等功能模塊,實(shí)現(xiàn)了生產(chǎn)過(guò)程的精準(zhǔn)調(diào)度。
    的頭像 發(fā)表于 10-07 12:51 ?160次閱讀
    MES系統(tǒng)如何實(shí)現(xiàn)生產(chǎn)車(chē)間的<b class='flag-5'>實(shí)時(shí)</b>監(jiān)控、精準(zhǔn)<b class='flag-5'>調(diào)度</b>

    鴻蒙開(kāi)發(fā)接口資源調(diào)度:【@ohos.workScheduler (延遲任務(wù)調(diào)度)】

    開(kāi)發(fā)者在開(kāi)發(fā)應(yīng)用時(shí),通過(guò)調(diào)用延遲任務(wù)注冊(cè)接口,注冊(cè)對(duì)實(shí)時(shí)性要求不高的延遲任務(wù),該任務(wù)默認(rèn)由系統(tǒng)安排,在系統(tǒng)空閑時(shí)根據(jù)性能、功耗、熱等情況進(jìn)行調(diào)度
    的頭像 發(fā)表于 06-04 10:01 ?786次閱讀
    鴻蒙開(kāi)發(fā)接口資源<b class='flag-5'>調(diào)度</b>:【@ohos.workScheduler (延遲<b class='flag-5'>任務(wù)</b><b class='flag-5'>調(diào)度</b>)】

    請(qǐng)問(wèn)CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?

    請(qǐng)問(wèn)一下,CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?謝謝!
    發(fā)表于 05-13 08:28

    STM32F103 FreeRTOS任務(wù)調(diào)度異常的原因?

    ) { vTaskDelay(500); //延時(shí)函數(shù)(任務(wù)調(diào)度) printf(\"Task1rn\");//串口打印 } } void Task2_Task(void
    發(fā)表于 04-16 06:24

    介紹一種基于核集的多核嵌入式實(shí)時(shí)調(diào)度方法

    多任務(wù)環(huán)境下,嵌入式系統(tǒng)中通常運(yùn)行著多于處理機(jī)數(shù)目的任務(wù),這就要求操作系統(tǒng)能夠按照某種算法為處于就緒狀態(tài)的任務(wù)動(dòng)態(tài)地分配處理機(jī),處理機(jī)調(diào)度的實(shí)質(zhì)是對(duì)處理器資源進(jìn)行分配。
    的頭像 發(fā)表于 03-05 11:31 ?593次閱讀
    介紹一種基于核集的多核嵌入式<b class='flag-5'>實(shí)時(shí)調(diào)度</b>方法

    鴻蒙OS 分布式任務(wù)調(diào)度

    鴻蒙OS 分布式任務(wù)調(diào)度概述 在 HarmonyO S中,分布式任務(wù)調(diào)度平臺(tái)對(duì)搭載 HarmonyOS 的多設(shè)備構(gòu)筑的“超級(jí)虛擬終端”提供統(tǒng)一的組件管理能力,為應(yīng)用定義統(tǒng)一的能力基線(xiàn)、
    的頭像 發(fā)表于 01-29 16:50 ?422次閱讀

    請(qǐng)教:有SPC560B的多任務(wù)實(shí)時(shí)系統(tǒng)的例程嗎(freertos)

    請(qǐng)教:有SPC560B的多任務(wù)實(shí)時(shí)系統(tǒng)的例程嗎(freertos)
    發(fā)表于 01-15 17:04

    ZMC運(yùn)動(dòng)控制器多任務(wù)編程一

    在工業(yè)自動(dòng)化領(lǐng)域,多任務(wù)編程在運(yùn)動(dòng)控制器上得到廣泛應(yīng)用。多任務(wù)編程允許將復(fù)雜的程序分解為獨(dú)立的任務(wù),實(shí)現(xiàn)并發(fā)性和高效處理。每個(gè)任務(wù)在運(yùn)動(dòng)控制周期中運(yùn)行,包括Motion Control
    發(fā)表于 11-07 09:52

    51單片機(jī)多任務(wù)操作系統(tǒng)的原理是什么?

    51單片機(jī)多任務(wù)操作系統(tǒng)的原理
    發(fā)表于 11-06 08:10

    Crontab:簡(jiǎn)單實(shí)用的Python 周期任務(wù)調(diào)度工具

    任務(wù)調(diào)度工具,而且希望它盡量簡(jiǎn)單、容易使用、不需要外部依賴(lài),最好能夠容納 Crontab 的所有基本功能
    的頭像 發(fā)表于 11-01 09:40 ?646次閱讀

    Schedule:簡(jiǎn)單實(shí)用的 Python 周期任務(wù)調(diào)度工具

    。 ** ** 2.當(dāng)需要執(zhí)行的定時(shí)任務(wù)有上百個(gè)的時(shí)候,Crontab的 管理就會(huì)特別不方便 。 ** 另外一個(gè)選擇是 Celery,但是 Celery 的配置比較麻煩,如果你只是需要一個(gè)輕量級(jí)的調(diào)度工具,Celery
    的頭像 發(fā)表于 10-30 11:18 ?626次閱讀

    51怎么做到多任務(wù)處理而不干擾其他任務(wù)

    51怎么做到多任務(wù)處理而不干擾其他任務(wù)
    發(fā)表于 10-30 06:33

    基于RTX51嵌入式多任務(wù)實(shí)時(shí)操作系統(tǒng)的智能卡電能表設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于RTX51嵌入式多任務(wù)實(shí)時(shí)操作系統(tǒng)的智能卡電能表設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-26 09:12 ?2次下載
    基于RTX51嵌入式<b class='flag-5'>多任務(wù)實(shí)時(shí)</b>操作系統(tǒng)的智能卡電能表設(shè)計(jì)

    MCU硬件看門(mén)狗+軟件看門(mén)狗監(jiān)測(cè)多任務(wù)的思路

    MCU硬件看門(mén)狗+軟件看門(mén)狗監(jiān)測(cè)多任務(wù)的思路
    的頭像 發(fā)表于 10-24 15:25 ?1731次閱讀
    MCU硬件看門(mén)狗+軟件看門(mén)狗監(jiān)測(cè)<b class='flag-5'>多任務(wù)</b>的思路