調(diào)度器在DSP編程中的應(yīng)用
發(fā)布時(shí)間:2008/8/21 0:00:00 訪問(wèn)次數(shù):780
dsp芯片,也稱數(shù)字信號(hào)處理器,是一種具有特殊結(jié)構(gòu)的微處理器。它的內(nèi)部采用程序和數(shù)據(jù)分開(kāi)的哈佛結(jié)構(gòu),具有專門的乘法器,廣泛采用流水線結(jié)構(gòu),提供特殊的dsp指令,在一個(gè)周期內(nèi)完成一次乘法和一次加法。在國(guó)外,dsp芯片已經(jīng)被廣泛地應(yīng)用于當(dāng)今技術(shù)革命的各個(gè)領(lǐng)域;在我國(guó),dsp技術(shù)也正以極快的速度被應(yīng)用在通信、電子系統(tǒng)、信號(hào)處理系統(tǒng)、自動(dòng)控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器、電力系統(tǒng)等許多領(lǐng)域中,而且新的應(yīng)用領(lǐng)域在不斷地被發(fā)掘。因此基于dsp技術(shù)的開(kāi)發(fā)應(yīng)用正成為數(shù)字時(shí)代的應(yīng)用技術(shù)潮流。相對(duì)于單片機(jī),它速度更快,外設(shè)集成度更高,程序存儲(chǔ)器更大。在《時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式》一書(shū)中詳細(xì)介紹了基于單片機(jī)的軟件設(shè)計(jì)方法,而本文基于dsp對(duì)這種設(shè)計(jì)進(jìn)行了擴(kuò)展,使這種設(shè)計(jì)方法更為靈活,有效。
二.調(diào)度器介紹
可以從兩方面來(lái)看調(diào)度器:一方面:調(diào)度器可以看作是一個(gè)簡(jiǎn)單的操作系統(tǒng),允許以周期性或單次方式調(diào)用任務(wù);另一方面:從底層角度來(lái)看,調(diào)度器可以看作是一個(gè)由許多不同任務(wù)共享的定時(shí)器中斷服務(wù)程序。
1. 調(diào)度器的組成
。1)調(diào)度器數(shù)據(jù)結(jié)構(gòu)
調(diào)度器的核心是調(diào)度器數(shù)據(jù)結(jié)構(gòu)。這是一種用戶自定義的數(shù)據(jù)類型,集中了每個(gè)任務(wù)所需的信息。
typedef struct
{
void ( * ptask)(void); 指向任務(wù)的指針(必須是一個(gè)void(void)函數(shù))。
unsigned int delay; 延時(shí)時(shí)標(biāo)數(shù):直到任務(wù)將下一次運(yùn)行所剩時(shí)標(biāo)數(shù).時(shí)標(biāo),是硬件定時(shí)器周期中斷設(shè)定的 時(shí)間間隔,它是調(diào)度器的驅(qū)動(dòng)者。
unsigned int period; 周期時(shí)標(biāo)數(shù):任務(wù)連續(xù)運(yùn)行所間隔的時(shí)標(biāo)數(shù)。
unsigned int delcounter; 若不為周期任務(wù),表示任務(wù)運(yùn)行次數(shù);若為周期函數(shù),則無(wú)意義。
char prdortemp; 若prdortemp=1,則為周期任務(wù);若prdortemp=0,則為非周期任務(wù)。
char runme; 當(dāng)任務(wù)需要運(yùn)行時(shí)(由調(diào)度器)加1
} stask;
另外,還需要定義一些全局變量:unsigned int task_index 記錄當(dāng)前所添加任務(wù)索引變量,對(duì)于每一個(gè)任務(wù)都要定義一個(gè)任務(wù)索引變量,以便對(duì)任務(wù)進(jìn)行查找。例如:可以利用任務(wù)索引變量對(duì)任務(wù)進(jìn)行刪除。任務(wù)隊(duì)列stask sch_tasks_g [sch_max_tasks]記錄所有任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量,其中sch_max_tasks為定義的最大任務(wù)數(shù)。雖然在系統(tǒng)運(yùn)行時(shí),任務(wù)有添加或刪除,但系統(tǒng)不是很復(fù)雜,給出的sch_max_tasks一定要大于運(yùn)行的任務(wù)數(shù)。
。2) 初始化函數(shù)(void sch_init_t(void))
這個(gè)函數(shù)主要的作用是設(shè)置定時(shí)器,用來(lái)產(chǎn)生驅(qū)動(dòng)調(diào)度器的定期時(shí)標(biāo)。一般的dsp都有多個(gè)定時(shí)器,它們中的任何一個(gè)都可以用來(lái)驅(qū)動(dòng)調(diào)度器。對(duì)于調(diào)度器來(lái)說(shuō),要在不同地微處理器運(yùn)行,主要是初始化函數(shù)不同(即微處理器的定時(shí)器初始化不同)。時(shí)標(biāo)設(shè)定的大小關(guān)系到cpu的利用率和系統(tǒng)的精度,它的大小與具體的系統(tǒng)有關(guān),例如微處理器的速度,執(zhí)行任務(wù)的大小,執(zhí)行任務(wù)周期的大小等。ti 公司推出的2000 系列的dsp與一般51系列的單片機(jī)時(shí)標(biāo)的設(shè)定有所不同:dsp的cpu頻率可達(dá)到40m,而且采用流水線結(jié)構(gòu),基本上一個(gè)時(shí)鐘周期執(zhí)行一條指令;一般單片機(jī)頻率為10m,而且遠(yuǎn)不能達(dá)到一個(gè)時(shí)鐘周期執(zhí)行一條指令。在《時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式》一書(shū)中,單片機(jī)時(shí)標(biāo)設(shè)定為1ms,可獲得很高的cpu利用率;而調(diào)度器應(yīng)用在交流數(shù)據(jù)采集和控制系統(tǒng)中(采用tms320lf2407), 時(shí)標(biāo)設(shè)定為200us,cpu利用率也不小于百分之九十五。
。3) 添加任務(wù)的函數(shù)
unsigned int sch_add_task(void ( * pfunction)( delay, period, delcounter, prdortemp)
添加任務(wù)函數(shù)首先開(kāi)始檢查任務(wù)隊(duì)列stask sch_tasks_g[sch_max_tasks]記錄所有任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量哪一個(gè)空閑,然后將所添加任務(wù)的地址,延時(shí)執(zhí)行時(shí)標(biāo)數(shù),周期時(shí)標(biāo)數(shù),任務(wù)運(yùn)行次數(shù),周期任務(wù)指示標(biāo)志賦給任務(wù)隊(duì)列那一個(gè)空閑全局變量。再記錄下當(dāng)前任務(wù)索引變量,以便在需要的情況下賦給任務(wù)自身索引變量,對(duì)任務(wù)進(jìn)行跟蹤。
(4) 刪除任務(wù)的函數(shù)
void sch_del_task(const unsigned int task_index)
刪除任務(wù)函數(shù)從 task_index得到所要?jiǎng)h除任務(wù)的任務(wù)索引變量。然后將對(duì)應(yīng)的任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量清除。刪除任務(wù)時(shí),對(duì)應(yīng)的任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量的內(nèi)容清除,但變量并沒(méi)有撤銷,當(dāng)再次執(zhí)行添加任務(wù)函數(shù)時(shí),此任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量有可能分配給其他任務(wù)。
。5) 刷新函數(shù) void sch_update(void)
刷新函數(shù)是調(diào)度器的中斷服務(wù)程序,用一定的時(shí)間間隔刷新調(diào)度器。它是由定時(shí)器溢出激活的,刷新函數(shù)并不復(fù)雜。當(dāng)刷新函數(shù)確定某個(gè)任務(wù)需要運(yùn)行時(shí),將這個(gè)任務(wù)runme標(biāo)志加一,然后該任務(wù)將由調(diào)度函數(shù)執(zhí)行。刷新函數(shù)的執(zhí)行流程如圖1所示。
。6) 調(diào)度函數(shù) void sch_dispatch_tas
dsp芯片,也稱數(shù)字信號(hào)處理器,是一種具有特殊結(jié)構(gòu)的微處理器。它的內(nèi)部采用程序和數(shù)據(jù)分開(kāi)的哈佛結(jié)構(gòu),具有專門的乘法器,廣泛采用流水線結(jié)構(gòu),提供特殊的dsp指令,在一個(gè)周期內(nèi)完成一次乘法和一次加法。在國(guó)外,dsp芯片已經(jīng)被廣泛地應(yīng)用于當(dāng)今技術(shù)革命的各個(gè)領(lǐng)域;在我國(guó),dsp技術(shù)也正以極快的速度被應(yīng)用在通信、電子系統(tǒng)、信號(hào)處理系統(tǒng)、自動(dòng)控制、雷達(dá)、軍事、航空航天、醫(yī)療、家用電器、電力系統(tǒng)等許多領(lǐng)域中,而且新的應(yīng)用領(lǐng)域在不斷地被發(fā)掘。因此基于dsp技術(shù)的開(kāi)發(fā)應(yīng)用正成為數(shù)字時(shí)代的應(yīng)用技術(shù)潮流。相對(duì)于單片機(jī),它速度更快,外設(shè)集成度更高,程序存儲(chǔ)器更大。在《時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式》一書(shū)中詳細(xì)介紹了基于單片機(jī)的軟件設(shè)計(jì)方法,而本文基于dsp對(duì)這種設(shè)計(jì)進(jìn)行了擴(kuò)展,使這種設(shè)計(jì)方法更為靈活,有效。
二.調(diào)度器介紹
可以從兩方面來(lái)看調(diào)度器:一方面:調(diào)度器可以看作是一個(gè)簡(jiǎn)單的操作系統(tǒng),允許以周期性或單次方式調(diào)用任務(wù);另一方面:從底層角度來(lái)看,調(diào)度器可以看作是一個(gè)由許多不同任務(wù)共享的定時(shí)器中斷服務(wù)程序。
1. 調(diào)度器的組成
。1)調(diào)度器數(shù)據(jù)結(jié)構(gòu)
調(diào)度器的核心是調(diào)度器數(shù)據(jù)結(jié)構(gòu)。這是一種用戶自定義的數(shù)據(jù)類型,集中了每個(gè)任務(wù)所需的信息。
typedef struct
{
void ( * ptask)(void); 指向任務(wù)的指針(必須是一個(gè)void(void)函數(shù))。
unsigned int delay; 延時(shí)時(shí)標(biāo)數(shù):直到任務(wù)將下一次運(yùn)行所剩時(shí)標(biāo)數(shù).時(shí)標(biāo),是硬件定時(shí)器周期中斷設(shè)定的 時(shí)間間隔,它是調(diào)度器的驅(qū)動(dòng)者。
unsigned int period; 周期時(shí)標(biāo)數(shù):任務(wù)連續(xù)運(yùn)行所間隔的時(shí)標(biāo)數(shù)。
unsigned int delcounter; 若不為周期任務(wù),表示任務(wù)運(yùn)行次數(shù);若為周期函數(shù),則無(wú)意義。
char prdortemp; 若prdortemp=1,則為周期任務(wù);若prdortemp=0,則為非周期任務(wù)。
char runme; 當(dāng)任務(wù)需要運(yùn)行時(shí)(由調(diào)度器)加1
} stask;
另外,還需要定義一些全局變量:unsigned int task_index 記錄當(dāng)前所添加任務(wù)索引變量,對(duì)于每一個(gè)任務(wù)都要定義一個(gè)任務(wù)索引變量,以便對(duì)任務(wù)進(jìn)行查找。例如:可以利用任務(wù)索引變量對(duì)任務(wù)進(jìn)行刪除。任務(wù)隊(duì)列stask sch_tasks_g [sch_max_tasks]記錄所有任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量,其中sch_max_tasks為定義的最大任務(wù)數(shù)。雖然在系統(tǒng)運(yùn)行時(shí),任務(wù)有添加或刪除,但系統(tǒng)不是很復(fù)雜,給出的sch_max_tasks一定要大于運(yùn)行的任務(wù)數(shù)。
。2) 初始化函數(shù)(void sch_init_t(void))
這個(gè)函數(shù)主要的作用是設(shè)置定時(shí)器,用來(lái)產(chǎn)生驅(qū)動(dòng)調(diào)度器的定期時(shí)標(biāo)。一般的dsp都有多個(gè)定時(shí)器,它們中的任何一個(gè)都可以用來(lái)驅(qū)動(dòng)調(diào)度器。對(duì)于調(diào)度器來(lái)說(shuō),要在不同地微處理器運(yùn)行,主要是初始化函數(shù)不同(即微處理器的定時(shí)器初始化不同)。時(shí)標(biāo)設(shè)定的大小關(guān)系到cpu的利用率和系統(tǒng)的精度,它的大小與具體的系統(tǒng)有關(guān),例如微處理器的速度,執(zhí)行任務(wù)的大小,執(zhí)行任務(wù)周期的大小等。ti 公司推出的2000 系列的dsp與一般51系列的單片機(jī)時(shí)標(biāo)的設(shè)定有所不同:dsp的cpu頻率可達(dá)到40m,而且采用流水線結(jié)構(gòu),基本上一個(gè)時(shí)鐘周期執(zhí)行一條指令;一般單片機(jī)頻率為10m,而且遠(yuǎn)不能達(dá)到一個(gè)時(shí)鐘周期執(zhí)行一條指令。在《時(shí)間觸發(fā)嵌入式系統(tǒng)設(shè)計(jì)模式》一書(shū)中,單片機(jī)時(shí)標(biāo)設(shè)定為1ms,可獲得很高的cpu利用率;而調(diào)度器應(yīng)用在交流數(shù)據(jù)采集和控制系統(tǒng)中(采用tms320lf2407), 時(shí)標(biāo)設(shè)定為200us,cpu利用率也不小于百分之九十五。
(3) 添加任務(wù)的函數(shù)
unsigned int sch_add_task(void ( * pfunction)( delay, period, delcounter, prdortemp)
添加任務(wù)函數(shù)首先開(kāi)始檢查任務(wù)隊(duì)列stask sch_tasks_g[sch_max_tasks]記錄所有任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量哪一個(gè)空閑,然后將所添加任務(wù)的地址,延時(shí)執(zhí)行時(shí)標(biāo)數(shù),周期時(shí)標(biāo)數(shù),任務(wù)運(yùn)行次數(shù),周期任務(wù)指示標(biāo)志賦給任務(wù)隊(duì)列那一個(gè)空閑全局變量。再記錄下當(dāng)前任務(wù)索引變量,以便在需要的情況下賦給任務(wù)自身索引變量,對(duì)任務(wù)進(jìn)行跟蹤。
。4) 刪除任務(wù)的函數(shù)
void sch_del_task(const unsigned int task_index)
刪除任務(wù)函數(shù)從 task_index得到所要?jiǎng)h除任務(wù)的任務(wù)索引變量。然后將對(duì)應(yīng)的任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量清除。刪除任務(wù)時(shí),對(duì)應(yīng)的任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量的內(nèi)容清除,但變量并沒(méi)有撤銷,當(dāng)再次執(zhí)行添加任務(wù)函數(shù)時(shí),此任務(wù)數(shù)據(jù)結(jié)構(gòu)的全局變量有可能分配給其他任務(wù)。
(5) 刷新函數(shù) void sch_update(void)
刷新函數(shù)是調(diào)度器的中斷服務(wù)程序,用一定的時(shí)間間隔刷新調(diào)度器。它是由定時(shí)器溢出激活的,刷新函數(shù)并不復(fù)雜。當(dāng)刷新函數(shù)確定某個(gè)任務(wù)需要運(yùn)行時(shí),將這個(gè)任務(wù)runme標(biāo)志加一,然后該任務(wù)將由調(diào)度函數(shù)執(zhí)行。刷新函數(shù)的執(zhí)行流程如圖1所示。
。6) 調(diào)度函數(shù) void sch_dispatch_tas
熱門點(diǎn)擊
- 中斷在TMS320C54x系列DSP中的應(yīng)用
- 調(diào)度器在DSP編程中的應(yīng)用
- TI推出可編程PLL時(shí)鐘合成器
- matlab濾波器設(shè)計(jì)-IIR濾波器的設(shè)計(jì)與
- 智安邦攜TI推出SMTK02智能視頻服務(wù)器產(chǎn)
- C代碼在TMS320C54X上的手工匯編優(yōu)化
- TI推出成功突破低功耗挑戰(zhàn)的 DSP 與應(yīng)用
- 雙TSC695F處理器在微小衛(wèi)星電子平臺(tái)中的
- 16位高速A/D轉(zhuǎn)換器在高速DSP中的應(yīng)用
- 晶門科技推出MagusCore SSD193
推薦技術(shù)資料
- 業(yè)余條件下PCM2702
- PGM2702采用SSOP28封裝,引腳小而密,EP3... [詳細(xì)]
- MOSFET 電感單片降壓開(kāi)關(guān)模式變換器優(yōu)勢(shì)
- SiC MOSFET 和 IG
- 新型 電隔離無(wú)芯線性霍爾效應(yīng)電
- 業(yè)界超小絕對(duì)位置編碼器技術(shù)參數(shù)設(shè)計(jì)
- 高帶寬、更高分辨率磁角度傳感技術(shù)應(yīng)用探究
- MagAlpha 角度位置傳感
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究