用C語(yǔ)言開(kāi)發(fā)DSP嵌入式系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:目前很多嵌入式系統(tǒng)以dsp 為核心構(gòu)建,但是,采用匯編語(yǔ)言開(kāi)發(fā)dsp 系統(tǒng)存在開(kāi)發(fā)難度大、開(kāi)發(fā)周期長(zhǎng)、維護(hù)性差等缺點(diǎn),應(yīng)用c 語(yǔ)言開(kāi)發(fā)dsp 系統(tǒng)是廣大嵌入式開(kāi)發(fā)者的迫切要求。有關(guān)單片機(jī)的c 語(yǔ)言開(kāi)發(fā)有相當(dāng)多的資料可以參考,而dsp 系統(tǒng)的c 語(yǔ)言開(kāi)發(fā)卻很少見(jiàn)。本文以ti 公司的dsp 器件tms320f24x 系列為例,講述怎樣用c 語(yǔ)言開(kāi)發(fā)一個(gè)完整的dsp 嵌入式系統(tǒng)?! 〈蠹以陂_(kāi)發(fā)嵌入式產(chǎn)品時(shí)首先會(huì)想到用控制器的匯編語(yǔ)言編寫(xiě)監(jiān)控程序,主要原因是: 一、匯編語(yǔ)言生成的程序?qū)?yīng)的二進(jìn)制代碼少,程序執(zhí)行要比高級(jí)語(yǔ)言生成的程序快。 二、控制器剛問(wèn)世時(shí),沒(méi)有相應(yīng)的高級(jí)語(yǔ)言可供使用。 三、存儲(chǔ)器的價(jià)格問(wèn)題和尋址空間的限制?! ∫陨纤鰡?wèn)題目前都基本上解決了,在這就不闡述了。實(shí)際情況是:在單片機(jī)的應(yīng)用領(lǐng)域,開(kāi)發(fā)者開(kāi)始使用c語(yǔ)言進(jìn)行開(kāi)發(fā)了。大家發(fā)現(xiàn)用高級(jí)語(yǔ)言開(kāi)發(fā)嵌入式產(chǎn)品是如此輕松,并且c語(yǔ)言程序編譯后的二進(jìn)制代碼也非常短小精練?! ∧壳笆褂米疃嗟臄?shù)字信號(hào)處理器(dsp)是美國(guó)ti公司的tms320家族,而工業(yè)控制上用的最多的又是tms320f2xx系列,ti公司為每一個(gè)dsp 芯片提供了匯編語(yǔ)言和c語(yǔ)言供開(kāi)發(fā)者選用,本人一直使用c語(yǔ)言進(jìn)行產(chǎn)品開(kāi)發(fā),而目前很少見(jiàn)到這方面的介紹,所以特撰此文以tms320f240為例,向各位同行推薦用c語(yǔ)言開(kāi)發(fā)dsp嵌入式系統(tǒng)?! 。薄ⅲ洌螅鸬模阏Z(yǔ)言的特殊性 大家在使用51系列c語(yǔ)言時(shí)已經(jīng)注意到,控制器的c語(yǔ)言和pc機(jī)上使用的c有一個(gè)顯著的特點(diǎn):經(jīng)常要對(duì)硬件操作,程序中有大量針對(duì)控制器內(nèi)部資源進(jìn)行操作的語(yǔ)句。所以,開(kāi)發(fā)者要明白怎樣用c語(yǔ)言來(lái)操縱控制器的內(nèi)部資源,既怎樣用c語(yǔ)句操作寄存器和內(nèi)部存儲(chǔ)器等?! ∨e個(gè)例子,在51匯編中我們寫(xiě)?。恚铮觥。?,#20h,匯編程序能夠識(shí)別a是指累加器,而在51 c程序中我們寫(xiě)?。幔悖悖剑常?;,編譯器能夠識(shí)別acc是指累加器而不是一般的變量。即每一個(gè)寄存器都有一個(gè)專(zhuān)有名字供開(kāi)發(fā)者使用,它們定義在一個(gè)頭文件reg51.h 中,程序員只需在程序的開(kāi)始部分用#include“reg51.h”語(yǔ)句將該文件包含進(jìn)來(lái)即可。注意:這些寄存器的名字不能用做變量名?! ⊥瑯樱冢簦恚螅常玻埃妫玻矗暗模阏Z(yǔ)言中也有一個(gè)頭文件c240.h定義各個(gè)寄存器的名稱(chēng),這里摘錄幾條語(yǔ)句進(jìn)行介紹?! ”热纾海#洌澹妫椋睿濉。椋恚颉。ǎǎ穑铮颍簦埃埃埃埃矗 。#洌澹妫椋睿濉。椋睿簦保撸悖颉。ǎǎ穑铮颍簦埃埃罚埃罚埃 。椋恚颉 ⅲ椋睿簦保撸悖蚓蛯?duì)應(yīng)兩個(gè)寄存器,實(shí)際是寄存器的地址,用高級(jí)語(yǔ)言的說(shuō)法是指針。我們也在程序的開(kāi)始部分用#include“c240.h”語(yǔ)句將該文件包含進(jìn)來(lái)。這樣,在dsp的c語(yǔ)言中使用它們只需在前面加一個(gè)星號(hào)(*),例如, ?。椋恚颍剑埃保埃保埃唬ⅲ保哆M(jìn)制數(shù)1010h賦給imr寄存器?。 。椋睿簦保撸悖颍剑埃埃幔埃猓埃唬獙ⅲ保哆M(jìn)制數(shù)a0b0h賦給xint1_cr寄存器?。 ¢_(kāi)發(fā)者最好將c240.h這個(gè)文件打印出來(lái),弄清楚各個(gè)寄存器的定義名稱(chēng)。至于不涉及硬件的語(yǔ)法和ansi 語(yǔ)法一樣,需要注意的是,有些ansi標(biāo)準(zhǔn)中的函數(shù)在dsp的編譯器中不提供,讀者可以參考dsp編譯器的c語(yǔ)言手冊(cè)。搞清楚了這些特殊性,由匯編語(yǔ)言轉(zhuǎn)到c語(yǔ)言開(kāi)發(fā)是很容易的事,當(dāng)然,沒(méi)有匯編語(yǔ)言編程基礎(chǔ)的人同樣可以用c語(yǔ)言開(kāi)發(fā)dsp應(yīng)用系統(tǒng)?! ∮嘘P(guān)嵌入式系統(tǒng)的c語(yǔ)言編程可參考《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2001年1到6期上馬忠梅的“嵌入式c編程技術(shù)”,本文不做討論。下面只針對(duì)以tms320f240芯片為處理器的嵌入式c語(yǔ)言編程進(jìn)行闡述,希望能夠指導(dǎo)讀者進(jìn)行具體操作?! 。?、tms320f240芯片的c語(yǔ)言開(kāi)發(fā)過(guò)程 簡(jiǎn)單地說(shuō),整個(gè)過(guò)程包括以下五個(gè)步驟: 編輯c語(yǔ)言源程序 編譯源程序(注意編譯參數(shù)) 鏈接目標(biāo)文件(注意用cmd文件) 在線仿真 固化程序 下面分別進(jìn)行闡述?! ∫弧≡闯绦虻木庉嫛 】梢杂萌魏我粋€(gè)編輯器書(shū)寫(xiě)源程序,如edit、notepad等,最后以.c為后綴存盤(pán)。源代碼可以寫(xiě)在一個(gè)c文件中,也可寫(xiě)在多個(gè)c文件中,有些預(yù)定義變量和函數(shù)原型聲明可以集中放在一個(gè)頭文件中。 注意事項(xiàng):不要忘記在c程序的前面用?。#椋睿悖欤酰洌濉 埃悖玻矗埃琛睂⒓拇嫫鞫x文件包括進(jìn)來(lái)?! 《≡闯绦虻木幾g 源程序編輯好后可以用dspcl編譯程序進(jìn)行編譯,生成obj文件。 使用格式





