資料介紹
大家在開發(fā)嵌入式產(chǎn)品時首先會想到用控制器的匯編語言編寫監(jiān)控程序,主要原因是:①匯編語言生成的程序?qū)?yīng)的二進(jìn)制代碼少,程序執(zhí)行要比高級語言生成的程序快;②控制器剛問世時,沒有相應(yīng)的高級語言可供使用;③存儲器的價格問題和尋址空間的限制。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機(jī)的應(yīng)用領(lǐng)域,開發(fā)者已開始使用C語言進(jìn)行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且C語言程序編譯后的二進(jìn)制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(DSP)是美國TI公司的TMS320家族,而工業(yè)控制上用得最多的又是TMS320F2XX系列。TI公司為每一個DSP芯片提供了匯編語言和C語言供開發(fā)者選用。本人一直使用C語言進(jìn)行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以TMS320F240為例,向各位同行推薦用C語言開發(fā)DSP嵌入式系統(tǒng)。
1 DSP的C語言的特殊性
大家在使用51系列C語言時已經(jīng)注意到,控制器的C語言和PC機(jī)上使用的C有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進(jìn)行操作的語句。所以,開發(fā)者要明白怎樣用C語言來操縱控制器的內(nèi)部資源,即怎樣用C語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 MOV A,#20H;匯編程序能夠識別A是指累加器;而在51的C程序中我們寫ACC=32;,編譯器能夠識別ACC是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進(jìn)來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在TMS320F240的C語言中也有一個頭文件C240.H定義各個寄存器的名稱,這里摘錄幾條語句進(jìn)行介紹。
比如:#define IMR((PORT)0x0004)
?。efine XINTI_CR((PORT) 0x07070)
IMR、XINT1_CR就對應(yīng)兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進(jìn)來。這樣,在DSP的C語言中使用它們只需在前面加一個星號(*),例如,
*IMR=0X1010;/*將十六進(jìn)制數(shù)1010H賦給IMR寄存器*/
*XINT1_CR=0X0A0B0;/*將十六進(jìn)制數(shù)A0B0H賦給XINT1_CR寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ANSI語法一樣。需要注意的是,有些ANSI標(biāo)準(zhǔn)中的函數(shù)在DSP的編譯器中不提供,讀者可以參考DSP編譯器的C語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到C語言開發(fā)是很容易的事。當(dāng)然,沒有匯編語言編程基礎(chǔ)的人同樣可以用C語言開發(fā)DSP應(yīng)用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的C語言編程可參考《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2001年1~6期《嵌入式C編程技術(shù)》,本文不作討論。下面只針對以TMS320F240芯片為處理器的嵌入式C語言編程進(jìn)行闡述,希望能夠指導(dǎo)讀者進(jìn)行具體操作。
2 TMS320F240芯片的C語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
?、倬庉婥語言源程序;
?、诰幾g源程序(注意編譯參數(shù));
?、坻溄幽繕?biāo)文件(注意用CMD文件);
?、茉诰€仿真;
?、莨袒绦颉?br /> 2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如EDIT。NOTEPAD等,最后以.C為后綴存盤。源代碼可以寫在一個C文件中,也可寫在多個C文件中;有些預(yù)定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在C程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進(jìn)來。
2.2源程序的編譯
源程序編輯好后可以用DSPCL編譯程序進(jìn)行編譯,生成OBJ文件。
使用格式:DSPCL源文件名 參數(shù)
例如: DSPCL EX1.C-V2XX-GK-MN
常用參數(shù)的意義:
V2XX——表示C編譯器選擇處理器2XX系列;
GK——保留編譯生成的匯編文件(.ASM文件);
MN——進(jìn)行正常優(yōu)化。
其它參數(shù)請參考DSP編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個OBJ文件和ASM文件。
2.3 目標(biāo)文件的鏈接
2.3.1 TI公司的COFF文件格式
TI公司新的匯編器和編譯器創(chuàng)建的目標(biāo)文件采用COFF(Common Object File Format)的目標(biāo)文件格式。采用COFF格式有利于模塊化編程,為管理代碼段和目標(biāo)系統(tǒng)存儲器提供更加有力和靈活的方法?;贑OFF格式編寫匯編程序或C語言程序時,不必為程序代碼和變量指定目標(biāo)地址;為程序編寫和程序移植提供了極大的方便。
COFF格式的基本思想是:鼓勵程序員在用匯編語言或C語言編程時運用代碼塊和數(shù)據(jù)塊的概念。這種塊稱為SECTION,是目標(biāo)文件中的最小單位。
所有的塊分為兩大類:已初始化塊和未初始化塊。已初始化塊包含程序代碼和數(shù)據(jù),未初始化塊是為未初始化的數(shù)據(jù)在存儲器中的保留塊。C編譯器對C程序編譯后產(chǎn)生已初始化塊和未初始化塊,已初始化塊如.text塊、.const塊、.cinit塊;未初始化塊如.bss塊。
舉個例子,當(dāng)程序員用C語句float data[100];定義一個數(shù)組時,不需要指定這100個數(shù)組元素的具體位置,編譯器會在數(shù)據(jù)區(qū)預(yù)留所需空間。到鏈接時鏈接器會具體定位。
2.3.2 鏈接器對塊的處理
鏈接器對塊的處理有兩個功能:其一,將COFF目標(biāo)文件中的塊用來建立程序塊和數(shù)據(jù)塊,并將這些塊組合成可以被DSP芯片執(zhí)行的COFF輸出模塊;其二,鏈接器為輸出塊指定存儲位置。
鏈接器提供兩個命令實現(xiàn)上述功能:MEMORY和SECTIONS。MEMORY命令定義目標(biāo)系統(tǒng)的存儲器,程序員可以定義每一塊存儲器并指定起始地址和長度;SECTIONS命令用來定義輸入塊的組合和輸出塊在存儲器中的存放位置。若不用MEMORY和SECTIONS命令,鏈接器采用缺省的分配算法。推薦使用這兩個命令,但要注意這兩個命令在CMD文件(鏈接器命令文件)中使用。
下面分析一個TMS320F240芯片的典型CMD文件。(假設(shè)文件名 EX1.CMD。)
?。?)CMD文件的構(gòu)成及其詳細(xì)解釋
BOOT.OBJ /*F240的中斷矢量表,參見后面的說明*/
EX1.OBJ /*源程序編譯后對應(yīng)的目標(biāo)文件*/
/*若程序有多個目標(biāo)文件,一塊寫在這里*/
-STACK 0X400 /*設(shè)定系統(tǒng)堆棧*/
-C /*ROM初始化*/
-O EX1.OUT /*輸出的文件名*/
?。璏 EX1.MAP /*輸出映像文件名*/
?。璍 RTS2XX.LIB /*漣接RTS2XX.LIB庫*/
MEMORY /*MEMORY命令規(guī)定系統(tǒng)的存儲器配置*/
{
PAGEO:ROM0:origin=0000h,length=003fh
/*FLASH ROM*/
PAGE0:ROM1:origin=0040h,length=0200h
/*FLASH ROM*/
PAGEO:ROM2:origin=0240h,length=3000h
/*FLASH ROM*/
PAGE1:RAM_B2:origin=0060h,length=0020h
/*內(nèi)部RAMB2*/
PAGE1:RAM_B1:origin=0300h,length=0100h
/*內(nèi)部RAM B1*/
PAGE1:RAM_B0:origin=0100h,length=0100h
/*內(nèi)部RAM B0*/
PAGE1:RAM_EX:origin=0d000h,length=2800h
/*外部擴(kuò)展RAM*/
}
SECTIONS /*SECTIONS命令規(guī)定了程序中塊的具體分配方法*/
{
.vectors:load=ROM0 /*規(guī)定矢量表的存放位置*/
.cinit:load=rom1 /*C初始化表的存放位置*/
?。畉ext: load=ROM2 /*系統(tǒng)程序的存放位置*/
?。産SS load=RAM_B0 /*未初始化數(shù)據(jù)的存放位置*/
.const load=RAM_B1 *已初始化數(shù)據(jù)的存放位置*/
}
?。?)TMS320F240鏈接時所需的中斷矢量表文件
TMS320F240的目標(biāo)文件在鏈接時要用到中斷矢量表。中斷矢量表用匯編語言編寫,和具體的DSP芯片有關(guān)。假設(shè)TMS320F240的中斷矢量表對應(yīng)的匯編程序為BOOT.ASM,匯編后的文件名為BOOT.OBJ。
下面是一個典型的矢量表文件。(假設(shè)程序名為BOOT.ASM。)
.port /*定義中斷函數(shù)的名字*/
.globl_c_int0 /*中斷0對應(yīng)的函數(shù)名*/
?。甮lobl_c_int1 /*中斷1對應(yīng)的函數(shù)名,以下語句的意義相同*/
?。甮lobl_c_int2 /*可以將中斷函數(shù)名看作中斷入口地址*/
?。甮lobl_c_int3 /*矢量表的存放不需程序員干預(yù)*/
?。甮lobl_c_int4
?。甮lobl_c_int5
?。甮lobl_c_int6
.globl_c_int7
?。甮lobl_c_int8
·sect“.vectors”/*用.sect命令自定義一個塊,用于存放中斷矢量表*/
RSVE CT B _c_int0 /*中斷0發(fā)生后,程序的跳轉(zhuǎn)目的地址*/
INT1 B _c_int1 /*中斷1發(fā)生后,則跳到c_int1()函數(shù)處*/
INT2 B _c_int2 /*意義同上,下同*/
INT3 B _c_int3
INT4 B _c_int4
INT5 B _c_int5
INT6 B _c_int6
用匯編器匯編該程序,命令形式:DSPABOOT.ASM-V2XX生成BOOT.OBJ文件供鏈接器使用。這樣,就可以按如下形式在C源程序中編寫中斷函數(shù):
voidc_inx() /*x為1~8中之一*/
?。?br /> 中斷程序的C語句系列;
?。?br /> 注意事項:c_int0()是系統(tǒng)入口函數(shù),用戶不能編寫。
以上所述問題目前已基本解決,在這就不闡述了。實際情況是:在單片機(jī)的應(yīng)用領(lǐng)域,開發(fā)者已開始使用C語言進(jìn)行開發(fā)。大家發(fā)現(xiàn)用高級語言開發(fā)嵌入式產(chǎn)品是如此輕松,并且C語言程序編譯后的二進(jìn)制代碼也非常短小精練。
目前使用最多的數(shù)字信號處理器(DSP)是美國TI公司的TMS320家族,而工業(yè)控制上用得最多的又是TMS320F2XX系列。TI公司為每一個DSP芯片提供了匯編語言和C語言供開發(fā)者選用。本人一直使用C語言進(jìn)行產(chǎn)品開發(fā),而目前很少見到這方面的介紹、所以特撰此文,以TMS320F240為例,向各位同行推薦用C語言開發(fā)DSP嵌入式系統(tǒng)。
1 DSP的C語言的特殊性
大家在使用51系列C語言時已經(jīng)注意到,控制器的C語言和PC機(jī)上使用的C有一個顯著的特點:經(jīng)常要對硬件操作,程序中有大量針對控制器內(nèi)部資源進(jìn)行操作的語句。所以,開發(fā)者要明白怎樣用C語言來操縱控制器的內(nèi)部資源,即怎樣用C語句操作寄存器和內(nèi)部存儲器等。
舉個例子:在51匯編中我們寫 MOV A,#20H;匯編程序能夠識別A是指累加器;而在51的C程序中我們寫ACC=32;,編譯器能夠識別ACC是指累加器而不是一般的變量。即每一個寄存器都有一個專有名字供開發(fā)者使用,它們定義在一個頭文件reg51.h中,程序員只需在程序的開始部分用#include“reg51.h”語句將該文件包含進(jìn)來即可。注意:這些寄存器的名字不能用作變量名。
同樣,在TMS320F240的C語言中也有一個頭文件C240.H定義各個寄存器的名稱,這里摘錄幾條語句進(jìn)行介紹。
比如:#define IMR((PORT)0x0004)
?。efine XINTI_CR((PORT) 0x07070)
IMR、XINT1_CR就對應(yīng)兩個寄存器,實際是寄存器的地址,用高級語言的說法是指針。我們也在程序的開始部分用#include“c240.h”語句將該文件包含進(jìn)來。這樣,在DSP的C語言中使用它們只需在前面加一個星號(*),例如,
*IMR=0X1010;/*將十六進(jìn)制數(shù)1010H賦給IMR寄存器*/
*XINT1_CR=0X0A0B0;/*將十六進(jìn)制數(shù)A0B0H賦給XINT1_CR寄存器*/
開發(fā)者最好將c240.h這個文件打印出來,弄清楚各個寄存器的定義名稱。至于不涉及硬件的語法和ANSI語法一樣。需要注意的是,有些ANSI標(biāo)準(zhǔn)中的函數(shù)在DSP的編譯器中不提供,讀者可以參考DSP編譯器的C語言手冊。搞清楚了這些特殊性,由匯編語言轉(zhuǎn)到C語言開發(fā)是很容易的事。當(dāng)然,沒有匯編語言編程基礎(chǔ)的人同樣可以用C語言開發(fā)DSP應(yīng)用系統(tǒng)。
有關(guān)嵌入式系統(tǒng)的C語言編程可參考《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》2001年1~6期《嵌入式C編程技術(shù)》,本文不作討論。下面只針對以TMS320F240芯片為處理器的嵌入式C語言編程進(jìn)行闡述,希望能夠指導(dǎo)讀者進(jìn)行具體操作。
2 TMS320F240芯片的C語言開發(fā)過程
簡單地說,整個過程包括以下5個步驟:
?、倬庉婥語言源程序;
?、诰幾g源程序(注意編譯參數(shù));
?、坻溄幽繕?biāo)文件(注意用CMD文件);
?、茉诰€仿真;
?、莨袒绦颉?br /> 2.1源程序的編輯
可以用任何一個編輯器書寫源程序,如EDIT。NOTEPAD等,最后以.C為后綴存盤。源代碼可以寫在一個C文件中,也可寫在多個C文件中;有些預(yù)定義變量和函數(shù)原型聲明可以集中放在一個頭文件中。
注意事項:不要忘記在C程序的前面用 #in-clude “c240.h”將寄存器定義文件包括進(jìn)來。
2.2源程序的編譯
源程序編輯好后可以用DSPCL編譯程序進(jìn)行編譯,生成OBJ文件。
使用格式:DSPCL源文件名 參數(shù)
例如: DSPCL EX1.C-V2XX-GK-MN
常用參數(shù)的意義:
V2XX——表示C編譯器選擇處理器2XX系列;
GK——保留編譯生成的匯編文件(.ASM文件);
MN——進(jìn)行正常優(yōu)化。
其它參數(shù)請參考DSP編譯器的手冊。如果有多個源文件分別編譯,每一個源文件經(jīng)編譯后產(chǎn)生一個OBJ文件和ASM文件。
2.3 目標(biāo)文件的鏈接
2.3.1 TI公司的COFF文件格式
TI公司新的匯編器和編譯器創(chuàng)建的目標(biāo)文件采用COFF(Common Object File Format)的目標(biāo)文件格式。采用COFF格式有利于模塊化編程,為管理代碼段和目標(biāo)系統(tǒng)存儲器提供更加有力和靈活的方法?;贑OFF格式編寫匯編程序或C語言程序時,不必為程序代碼和變量指定目標(biāo)地址;為程序編寫和程序移植提供了極大的方便。
COFF格式的基本思想是:鼓勵程序員在用匯編語言或C語言編程時運用代碼塊和數(shù)據(jù)塊的概念。這種塊稱為SECTION,是目標(biāo)文件中的最小單位。
所有的塊分為兩大類:已初始化塊和未初始化塊。已初始化塊包含程序代碼和數(shù)據(jù),未初始化塊是為未初始化的數(shù)據(jù)在存儲器中的保留塊。C編譯器對C程序編譯后產(chǎn)生已初始化塊和未初始化塊,已初始化塊如.text塊、.const塊、.cinit塊;未初始化塊如.bss塊。
舉個例子,當(dāng)程序員用C語句float data[100];定義一個數(shù)組時,不需要指定這100個數(shù)組元素的具體位置,編譯器會在數(shù)據(jù)區(qū)預(yù)留所需空間。到鏈接時鏈接器會具體定位。
2.3.2 鏈接器對塊的處理
鏈接器對塊的處理有兩個功能:其一,將COFF目標(biāo)文件中的塊用來建立程序塊和數(shù)據(jù)塊,并將這些塊組合成可以被DSP芯片執(zhí)行的COFF輸出模塊;其二,鏈接器為輸出塊指定存儲位置。
鏈接器提供兩個命令實現(xiàn)上述功能:MEMORY和SECTIONS。MEMORY命令定義目標(biāo)系統(tǒng)的存儲器,程序員可以定義每一塊存儲器并指定起始地址和長度;SECTIONS命令用來定義輸入塊的組合和輸出塊在存儲器中的存放位置。若不用MEMORY和SECTIONS命令,鏈接器采用缺省的分配算法。推薦使用這兩個命令,但要注意這兩個命令在CMD文件(鏈接器命令文件)中使用。
下面分析一個TMS320F240芯片的典型CMD文件。(假設(shè)文件名 EX1.CMD。)
?。?)CMD文件的構(gòu)成及其詳細(xì)解釋
BOOT.OBJ /*F240的中斷矢量表,參見后面的說明*/
EX1.OBJ /*源程序編譯后對應(yīng)的目標(biāo)文件*/
/*若程序有多個目標(biāo)文件,一塊寫在這里*/
-STACK 0X400 /*設(shè)定系統(tǒng)堆棧*/
-C /*ROM初始化*/
-O EX1.OUT /*輸出的文件名*/
?。璏 EX1.MAP /*輸出映像文件名*/
?。璍 RTS2XX.LIB /*漣接RTS2XX.LIB庫*/
MEMORY /*MEMORY命令規(guī)定系統(tǒng)的存儲器配置*/
{
PAGEO:ROM0:origin=0000h,length=003fh
/*FLASH ROM*/
PAGE0:ROM1:origin=0040h,length=0200h
/*FLASH ROM*/
PAGEO:ROM2:origin=0240h,length=3000h
/*FLASH ROM*/
PAGE1:RAM_B2:origin=0060h,length=0020h
/*內(nèi)部RAMB2*/
PAGE1:RAM_B1:origin=0300h,length=0100h
/*內(nèi)部RAM B1*/
PAGE1:RAM_B0:origin=0100h,length=0100h
/*內(nèi)部RAM B0*/
PAGE1:RAM_EX:origin=0d000h,length=2800h
/*外部擴(kuò)展RAM*/
}
SECTIONS /*SECTIONS命令規(guī)定了程序中塊的具體分配方法*/
{
.vectors:load=ROM0 /*規(guī)定矢量表的存放位置*/
.cinit:load=rom1 /*C初始化表的存放位置*/
?。畉ext: load=ROM2 /*系統(tǒng)程序的存放位置*/
?。産SS load=RAM_B0 /*未初始化數(shù)據(jù)的存放位置*/
.const load=RAM_B1 *已初始化數(shù)據(jù)的存放位置*/
}
?。?)TMS320F240鏈接時所需的中斷矢量表文件
TMS320F240的目標(biāo)文件在鏈接時要用到中斷矢量表。中斷矢量表用匯編語言編寫,和具體的DSP芯片有關(guān)。假設(shè)TMS320F240的中斷矢量表對應(yīng)的匯編程序為BOOT.ASM,匯編后的文件名為BOOT.OBJ。
下面是一個典型的矢量表文件。(假設(shè)程序名為BOOT.ASM。)
.port /*定義中斷函數(shù)的名字*/
.globl_c_int0 /*中斷0對應(yīng)的函數(shù)名*/
?。甮lobl_c_int1 /*中斷1對應(yīng)的函數(shù)名,以下語句的意義相同*/
?。甮lobl_c_int2 /*可以將中斷函數(shù)名看作中斷入口地址*/
?。甮lobl_c_int3 /*矢量表的存放不需程序員干預(yù)*/
?。甮lobl_c_int4
?。甮lobl_c_int5
?。甮lobl_c_int6
.globl_c_int7
?。甮lobl_c_int8
·sect“.vectors”/*用.sect命令自定義一個塊,用于存放中斷矢量表*/
RSVE CT B _c_int0 /*中斷0發(fā)生后,程序的跳轉(zhuǎn)目的地址*/
INT1 B _c_int1 /*中斷1發(fā)生后,則跳到c_int1()函數(shù)處*/
INT2 B _c_int2 /*意義同上,下同*/
INT3 B _c_int3
INT4 B _c_int4
INT5 B _c_int5
INT6 B _c_int6
用匯編器匯編該程序,命令形式:DSPABOOT.ASM-V2XX生成BOOT.OBJ文件供鏈接器使用。這樣,就可以按如下形式在C源程序中編寫中斷函數(shù):
voidc_inx() /*x為1~8中之一*/
?。?br /> 中斷程序的C語句系列;
?。?br /> 注意事項:c_int0()是系統(tǒng)入口函數(shù),用戶不能編寫。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式為什么選擇C語言作為開發(fā)語言?
- 什么是嵌入式開發(fā)?為什么用C語言作為開發(fā)語言?
- 嵌入式底層開發(fā)為什么選擇C語言
- 解析嵌入式軟件開發(fā)語言:嵌入式C編程
- 嵌入式DSP系統(tǒng)C語言硬件編程技術(shù)
- 嵌入式DSP系統(tǒng)C語言硬件編程技術(shù)總結(jié)
- 嵌入式C語言-文件操用
- 嵌入式外中斷c語言代碼
- 嵌入式DSP系統(tǒng)C語言硬件編程技術(shù)簡介
- 使用C語言編程嵌入式DSP系統(tǒng)的方法和相關(guān)介紹說明 15次下載
- 嵌入式Linux與物聯(lián)網(wǎng)軟件開發(fā)C語言內(nèi)核深度解析書籍的介紹
- 如何用C 語言開發(fā)DSP 嵌入式系統(tǒng)
- 如何用C語言開發(fā)DSP嵌入式系統(tǒng)
- 如何用C語言開發(fā)DS嵌入式系統(tǒng)
- 如何用C 語言開發(fā)DSP 嵌入式系統(tǒng)
- 聊一聊嵌入式C語言 568次閱讀
- 嵌入式開發(fā)常見的C語言技巧與方法分享 1153次閱讀
- 用C語言構(gòu)建高效的嵌入式程序 647次閱讀
- 嵌入式C語言高手煉成之內(nèi)存操作篇 525次閱讀
- 嵌入式C語言知識點總結(jié) 2733次閱讀
- 嵌入式系統(tǒng)的全面解析 3280次閱讀
- 嵌入式系統(tǒng)C語言編程中的錯誤處理資料總結(jié) 1946次閱讀
- 嵌入式開發(fā)到底是什么 5145次閱讀
- 米爾科技嵌入式實時操作系統(tǒng)介紹 2348次閱讀
- 詳細(xì)盤點工程師嵌入式開發(fā)必備工具讓工作事半功倍 5737次閱讀
- 關(guān)于嵌入式C語言指針的解析 1127次閱讀
- 嵌入式系統(tǒng)C語言編程實戰(zhàn)教程合集 9481次閱讀
- 嵌入式C實現(xiàn)延時程序的不同變量的區(qū)別 幾種Linux嵌入式開發(fā)環(huán)境的簡單介紹 1673次閱讀
- 對于C語言在嵌入式系統(tǒng)編程時的注意事項的詳細(xì)解析 6185次閱讀
- 嵌入式Linux開發(fā)之C語言學(xué)習(xí)秘訣 9990次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1489次下載 | 免費
- 2單片機(jī)典型實例介紹
- 18.19 MB | 91次下載 | 1 積分
- 3S7-200PLC編程實例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 9次下載 | 免費
- 6基于AT89C2051/4051單片機(jī)編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7基于單片機(jī)和 SG3525的程控開關(guān)電源設(shè)計
- 0.23 MB | 3次下載 | 免費
- 8基于單片機(jī)的紅外風(fēng)扇遙控
- 0.23 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30319次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關(guān)電源設(shè)計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論