如何用C語言開發(fā)DSP嵌入式系統(tǒng)
發(fā)布時間:2008/8/22 0:00:00 訪問次數(shù):638
摘要:目前很多嵌入式系統(tǒng)以dsp為核心構(gòu)建,但是,采用匯編語言開發(fā)dsp系統(tǒng)存在開發(fā)難度大、開發(fā)周期長、維護性差等缺點,應用c語言開發(fā)dsp系統(tǒng)是廣大嵌入式開發(fā)者的迫切要求。有關(guān)單片機的c語言開發(fā)有相當多的資料可以參考,而dsp系統(tǒng)的c語言開發(fā)卻很少見。本文以ti公司的dsp器件tms320f24x系列為例,講述怎樣用c語言開發(fā)一個完整的dsp嵌入式系統(tǒng)。
引言
大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)亩M制代碼少,程序執(zhí)行要比高級語言生成的程序快;②控制器剛問世時,沒有相應的高級語言可供使用;③存儲器的價格問題和尋址空間的限制。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機的應用領域,開發(fā)者已開始使用c語言進行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且c語言程序編譯后的二進制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(dsp)是美國ti公司的tms320家族,而工業(yè)控制上用得最多的又是tms320f2xx系列。ti公司為每一個dsp芯片提供了匯編語言和c語言供開發(fā)者選用。本人一直使用c語言進行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以tms320f240為例,向各位同行推薦用c語言開發(fā)dsp嵌入式系統(tǒng)。
1 dsp的c語言的特殊性
大家在使用51系列c語言時已經(jīng)注意到,控制器的c語言和pc機上使用的c有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進行操作的語句。所以,開發(fā)者要明白怎樣用c語言來操縱控制器的內(nèi)部資源,即怎樣用c語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 mov a,#20h;匯編程序能夠識別a是指累加器;而在51的c程序中我們寫acc=32;,編譯器能夠識別acc是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在tms320f240的c語言中也有一個頭文件c240.h定義各個寄存器的名稱,這里摘錄幾條語句進行介紹。
比如:
#define imr((port)0x0004)
。efine xinti_cr((port) 0x07070)
imr、xint1_cr就對應兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進來。這樣,在dsp的c語言中使用它們只需在前面加一個星號(*),例如,
*imr=0x1010;/*將十六進制數(shù)1010h賦給imr寄存器*/
*xint1_cr=0x0a0b0;/*將十六進制數(shù)a0b0h賦給xint1_cr寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ansi語法一樣。需要注意的是,有些ansi標準中的函數(shù)在dsp的編譯器中不提供,讀者可以參考dsp編譯器的c語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到c語言開發(fā)是很容易的事。當然,沒有匯編語言編程基礎的人同樣可以用c語言開發(fā)dsp應用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的c語言編程可參考《單片機與嵌入式系統(tǒng)應用》2001年1~6期《嵌入式c編程技術(shù)》,本文不作討論。下面只針對以tms320f240芯片為處理器的嵌入式c語言編程進行闡述,希望能夠指導讀者進行具體操作。
2 tms320f240芯片的c語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
、倬庉媍語言源程序;
、诰幾g源程序(注意編譯參數(shù));
③鏈接目標文件(注意用cmd文件);
④在線仿真;
、莨袒绦颉
2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如edit。notepad等,最后以.c為后綴存盤。源代碼可以寫在一個c文件中,也可寫在多個c文件中;有些預定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在c程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進來。
2.2源程序的編譯
源程序編輯好后可以用dspcl編譯程序進行編譯,生成obj文件。
使用格式:dspcl源文件名 參數(shù)
例如: dspcl ex1.c-v2xx-gk-mn
常用參數(shù)的意義:
v2xx——表示c編譯器選擇處理器2xx系列;
gk——保留編譯生成的匯編文件(.a(chǎn)sm文件);
mn——進行正常優(yōu)化。
其它參數(shù)請參考dsp編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個obj文件和asm文件。
2.3 目標文件的鏈接
2.3.1 ti公司的coff文件格式
ti公司新的匯編器和編譯器創(chuàng)建的目標文件采用coff(common object file format)的目標文件格式。采用coff格式有利于模塊化編程,為管理代碼段
引言
大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)亩M制代碼少,程序執(zhí)行要比高級語言生成的程序快;②控制器剛問世時,沒有相應的高級語言可供使用;③存儲器的價格問題和尋址空間的限制。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機的應用領域,開發(fā)者已開始使用c語言進行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且c語言程序編譯后的二進制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(dsp)是美國ti公司的tms320家族,而工業(yè)控制上用得最多的又是tms320f2xx系列。ti公司為每一個dsp芯片提供了匯編語言和c語言供開發(fā)者選用。本人一直使用c語言進行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以tms320f240為例,向各位同行推薦用c語言開發(fā)dsp嵌入式系統(tǒng)。
1 dsp的c語言的特殊性
大家在使用51系列c語言時已經(jīng)注意到,控制器的c語言和pc機上使用的c有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進行操作的語句。所以,開發(fā)者要明白怎樣用c語言來操縱控制器的內(nèi)部資源,即怎樣用c語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 mov a,#20h;匯編程序能夠識別a是指累加器;而在51的c程序中我們寫acc=32;,編譯器能夠識別acc是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在tms320f240的c語言中也有一個頭文件c240.h定義各個寄存器的名稱,這里摘錄幾條語句進行介紹。
比如:
#define imr((port)0x0004)
。efine xinti_cr((port) 0x07070)
imr、xint1_cr就對應兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進來。這樣,在dsp的c語言中使用它們只需在前面加一個星號(*),例如,
*imr=0x1010;/*將十六進制數(shù)1010h賦給imr寄存器*/
*xint1_cr=0x0a0b0;/*將十六進制數(shù)a0b0h賦給xint1_cr寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ansi語法一樣。需要注意的是,有些ansi標準中的函數(shù)在dsp的編譯器中不提供,讀者可以參考dsp編譯器的c語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到c語言開發(fā)是很容易的事。當然,沒有匯編語言編程基礎的人同樣可以用c語言開發(fā)dsp應用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的c語言編程可參考《單片機與嵌入式系統(tǒng)應用》2001年1~6期《嵌入式c編程技術(shù)》,本文不作討論。下面只針對以tms320f240芯片為處理器的嵌入式c語言編程進行闡述,希望能夠指導讀者進行具體操作。
2 tms320f240芯片的c語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
、倬庉媍語言源程序;
、诰幾g源程序(注意編譯參數(shù));
③鏈接目標文件(注意用cmd文件);
④在線仿真;
、莨袒绦颉
2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如edit。notepad等,最后以.c為后綴存盤。源代碼可以寫在一個c文件中,也可寫在多個c文件中;有些預定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在c程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進來。
2.2源程序的編譯
源程序編輯好后可以用dspcl編譯程序進行編譯,生成obj文件。
使用格式:dspcl源文件名 參數(shù)
例如: dspcl ex1.c-v2xx-gk-mn
常用參數(shù)的意義:
v2xx——表示c編譯器選擇處理器2xx系列;
gk——保留編譯生成的匯編文件(.a(chǎn)sm文件);
mn——進行正常優(yōu)化。
其它參數(shù)請參考dsp編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個obj文件和asm文件。
2.3 目標文件的鏈接
2.3.1 ti公司的coff文件格式
ti公司新的匯編器和編譯器創(chuàng)建的目標文件采用coff(common object file format)的目標文件格式。采用coff格式有利于模塊化編程,為管理代碼段
摘要:目前很多嵌入式系統(tǒng)以dsp為核心構(gòu)建,但是,采用匯編語言開發(fā)dsp系統(tǒng)存在開發(fā)難度大、開發(fā)周期長、維護性差等缺點,應用c語言開發(fā)dsp系統(tǒng)是廣大嵌入式開發(fā)者的迫切要求。有關(guān)單片機的c語言開發(fā)有相當多的資料可以參考,而dsp系統(tǒng)的c語言開發(fā)卻很少見。本文以ti公司的dsp器件tms320f24x系列為例,講述怎樣用c語言開發(fā)一個完整的dsp嵌入式系統(tǒng)。
引言
大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)亩M制代碼少,程序執(zhí)行要比高級語言生成的程序快;②控制器剛問世時,沒有相應的高級語言可供使用;③存儲器的價格問題和尋址空間的限制。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機的應用領域,開發(fā)者已開始使用c語言進行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且c語言程序編譯后的二進制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(dsp)是美國ti公司的tms320家族,而工業(yè)控制上用得最多的又是tms320f2xx系列。ti公司為每一個dsp芯片提供了匯編語言和c語言供開發(fā)者選用。本人一直使用c語言進行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以tms320f240為例,向各位同行推薦用c語言開發(fā)dsp嵌入式系統(tǒng)。
1 dsp的c語言的特殊性
大家在使用51系列c語言時已經(jīng)注意到,控制器的c語言和pc機上使用的c有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進行操作的語句。所以,開發(fā)者要明白怎樣用c語言來操縱控制器的內(nèi)部資源,即怎樣用c語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 mov a,#20h;匯編程序能夠識別a是指累加器;而在51的c程序中我們寫acc=32;,編譯器能夠識別acc是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在tms320f240的c語言中也有一個頭文件c240.h定義各個寄存器的名稱,這里摘錄幾條語句進行介紹。
比如:
。efine imr((port)0x0004)
#define xinti_cr((port) 0x07070)
imr、xint1_cr就對應兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進來。這樣,在dsp的c語言中使用它們只需在前面加一個星號(*),例如,
*imr=0x1010;/*將十六進制數(shù)1010h賦給imr寄存器*/
*xint1_cr=0x0a0b0;/*將十六進制數(shù)a0b0h賦給xint1_cr寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ansi語法一樣。需要注意的是,有些ansi標準中的函數(shù)在dsp的編譯器中不提供,讀者可以參考dsp編譯器的c語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到c語言開發(fā)是很容易的事。當然,沒有匯編語言編程基礎的人同樣可以用c語言開發(fā)dsp應用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的c語言編程可參考《單片機與嵌入式系統(tǒng)應用》2001年1~6期《嵌入式c編程技術(shù)》,本文不作討論。下面只針對以tms320f240芯片為處理器的嵌入式c語言編程進行闡述,希望能夠指導讀者進行具體操作。
2 tms320f240芯片的c語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
①編輯c語言源程序;
、诰幾g源程序(注意編譯參數(shù));
、坻溄幽繕宋募ㄗ⒁庥胏md文件);
④在線仿真;
、莨袒绦颉
2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如edit。notepad等,最后以.c為后綴存盤。源代碼可以寫在一個c文件中,也可寫在多個c文件中;有些預定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在c程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進來。
2.2源程序的編譯
源程序編輯好后可以用dspcl編譯程序進行編譯,生成obj文件。
使用格式:dspcl源文件名 參數(shù)
例如: dspcl ex1.c-v2xx-gk-mn
常用參數(shù)的意義:
v2xx——表示c編譯器選擇處理器2xx系列;
gk——保留編譯生成的匯編文件(.a(chǎn)sm文件);
mn——進行正常優(yōu)化。
其它參數(shù)請參考dsp編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個obj文件和asm文件。
2.3 目標文件的鏈接
2.3.1 ti公司的coff文件格式
ti公司新的匯編器和編譯器創(chuàng)建的目標文件采用coff(common object file format)的目標文件格式。采用coff格式有利于模塊化編程,為管理代碼段
引言
大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)亩M制代碼少,程序執(zhí)行要比高級語言生成的程序快;②控制器剛問世時,沒有相應的高級語言可供使用;③存儲器的價格問題和尋址空間的限制。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機的應用領域,開發(fā)者已開始使用c語言進行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且c語言程序編譯后的二進制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(dsp)是美國ti公司的tms320家族,而工業(yè)控制上用得最多的又是tms320f2xx系列。ti公司為每一個dsp芯片提供了匯編語言和c語言供開發(fā)者選用。本人一直使用c語言進行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以tms320f240為例,向各位同行推薦用c語言開發(fā)dsp嵌入式系統(tǒng)。
1 dsp的c語言的特殊性
大家在使用51系列c語言時已經(jīng)注意到,控制器的c語言和pc機上使用的c有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進行操作的語句。所以,開發(fā)者要明白怎樣用c語言來操縱控制器的內(nèi)部資源,即怎樣用c語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 mov a,#20h;匯編程序能夠識別a是指累加器;而在51的c程序中我們寫acc=32;,編譯器能夠識別acc是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在tms320f240的c語言中也有一個頭文件c240.h定義各個寄存器的名稱,這里摘錄幾條語句進行介紹。
比如:
。efine imr((port)0x0004)
#define xinti_cr((port) 0x07070)
imr、xint1_cr就對應兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進來。這樣,在dsp的c語言中使用它們只需在前面加一個星號(*),例如,
*imr=0x1010;/*將十六進制數(shù)1010h賦給imr寄存器*/
*xint1_cr=0x0a0b0;/*將十六進制數(shù)a0b0h賦給xint1_cr寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ansi語法一樣。需要注意的是,有些ansi標準中的函數(shù)在dsp的編譯器中不提供,讀者可以參考dsp編譯器的c語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到c語言開發(fā)是很容易的事。當然,沒有匯編語言編程基礎的人同樣可以用c語言開發(fā)dsp應用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的c語言編程可參考《單片機與嵌入式系統(tǒng)應用》2001年1~6期《嵌入式c編程技術(shù)》,本文不作討論。下面只針對以tms320f240芯片為處理器的嵌入式c語言編程進行闡述,希望能夠指導讀者進行具體操作。
2 tms320f240芯片的c語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
①編輯c語言源程序;
、诰幾g源程序(注意編譯參數(shù));
、坻溄幽繕宋募ㄗ⒁庥胏md文件);
④在線仿真;
、莨袒绦颉
2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如edit。notepad等,最后以.c為后綴存盤。源代碼可以寫在一個c文件中,也可寫在多個c文件中;有些預定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在c程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進來。
2.2源程序的編譯
源程序編輯好后可以用dspcl編譯程序進行編譯,生成obj文件。
使用格式:dspcl源文件名 參數(shù)
例如: dspcl ex1.c-v2xx-gk-mn
常用參數(shù)的意義:
v2xx——表示c編譯器選擇處理器2xx系列;
gk——保留編譯生成的匯編文件(.a(chǎn)sm文件);
mn——進行正常優(yōu)化。
其它參數(shù)請參考dsp編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個obj文件和asm文件。
2.3 目標文件的鏈接
2.3.1 ti公司的coff文件格式
ti公司新的匯編器和編譯器創(chuàng)建的目標文件采用coff(common object file format)的目標文件格式。采用coff格式有利于模塊化編程,為管理代碼段