第一篇:如何從51單片機(jī)轉(zhuǎn)到linux嵌入式開發(fā)
如何從51單片機(jī)轉(zhuǎn)到linux嵌入式開發(fā)
首先從stm32f407,買個(gè)開發(fā)板,學(xué)習(xí)液晶怎么驅(qū)動(dòng),點(diǎn)亮像素和填充矩形的函數(shù)(也就是液晶的最底層驅(qū)動(dòng)函數(shù))怎么寫,觸摸中斷處理函數(shù),觸摸校正及去抖濾波算法怎么寫,再學(xué)sd卡usb口sram、flash(也就是stm32的fsmc靜態(tài)存儲(chǔ)器擴(kuò)展接口)怎么初始化和讀寫數(shù)據(jù)。
這里要指出,單片機(jī)上的代碼一般都是做以下的工作,即外設(shè)初始化,端口初始化,端口置1置0,以及簡(jiǎn)單的在spi或串口上發(fā)送極少量的字節(jié)。而arm會(huì)涉及到傳送大量數(shù)據(jù)和文件。
硬件及底層驅(qū)動(dòng)代碼搞清楚以上這些就可以了。因?yàn)橘I的arm開發(fā)板,都帶有現(xiàn)成的驅(qū)動(dòng),不用你去寫,拿來直接用就行。arm更偏重于軟件,可以說你在arm開發(fā)板上做的90%工作都是軟件,這也是單片機(jī)轉(zhuǎn)到arm時(shí)讓很多人迷茫的原因,有些人去研究arm芯片的datasheet,stm32f407zgt6有144引腳,cortex-a8有幾百個(gè)引腳,datasheet上千頁,片上外設(shè)很多,外設(shè)寄存器幾百個(gè),單靠一個(gè)人的力量根本沒發(fā)看完,那是給專門做驅(qū)動(dòng)的人看的,開發(fā)板買來都是現(xiàn)成的,所以說只學(xué)習(xí)一下stm32上的液晶和sram讀寫這樣簡(jiǎn)單的就可以,cortex-a8上的就不用學(xué)了,直接拿來主義。
我們把主要精力放在軟件上。接下來開始,在stm32上學(xué)ucgui移植,調(diào)用其中函數(shù),做一個(gè)簡(jiǎn)單界面。再接下來學(xué)ucos ii,把這個(gè)最基本的操作系統(tǒng)搞透,需要花大量精力和時(shí)間,不要怕費(fèi)勁,他是一勞永逸的,之后在arm a8上用linux操作系統(tǒng),就會(huì)非常容易上手,否則直接學(xué)linux相當(dāng)難啃。移植ucos,添加任務(wù),運(yùn)行成功后,接下來學(xué)習(xí)文件系統(tǒng)移植,能讀U盤中的圖片,并顯示到液晶上。至此,stm32的學(xué)習(xí)結(jié)束,恭喜,你的基礎(chǔ)已經(jīng)很扎實(shí)了。
接下來就可以上arm-a8了。建議直接上最高端的,不用從2440,6410開始,因?yàn)槟阌衧tm32的基礎(chǔ),可以買個(gè)CortexA8 S5PV210開發(fā)板,先學(xué)習(xí)linux的pc端操作,尤其是命令行,pc端安裝red linux或Ubuntu,通過usb轉(zhuǎn)串口線連接開發(fā)板串口,通過超級(jí)終端,用命令行操作開發(fā)板,下載文件和代碼,接下來就是嵌入式linux應(yīng)用開發(fā),從qt移植開始,當(dāng)然開發(fā)板上的qt也是買來就移植好的,可以直接用qt creator做嵌入式linux的APP,在PC端寫代碼,用命令行通過串口下載到開發(fā)板運(yùn)行。至此你一從51到嵌入式linux華麗轉(zhuǎn)身!
個(gè)人經(jīng)驗(yàn),僅供參考,拋磚引玉,轉(zhuǎn)載請(qǐng)注明出處。
第二篇:嵌入式linu學(xué)習(xí)心得
嵌入式Linux學(xué)習(xí)心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄
cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級(jí)目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復(fù)制命令,例子cp 文件名 /home/dir/
mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個(gè)命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。
/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序
/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開頭)、字符設(shè)備(c開頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對(duì)應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應(yīng)用程序
/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號(hào)。每個(gè)進(jìn)程號(hào)目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號(hào)。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對(duì)于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。
/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內(nèi)核源碼
/var:存放是臨時(shí)變量
3、
第三篇:嵌入式開發(fā)工程師
任職要求:
1、大學(xué)本科及以上學(xué)歷,2年以上工作經(jīng)驗(yàn),計(jì)算機(jī)電子通訊類專業(yè)畢業(yè);
2、能夠熟練使用POWER PCB或PROTEL或ORCAD等電路設(shè)計(jì)軟件進(jìn)行PCB設(shè)計(jì);
3、熟悉電子元器件,能獨(dú)立設(shè)計(jì)數(shù)字及模擬電路,擁有單片機(jī)開發(fā)工作經(jīng)驗(yàn),懂得RF433無線及紅外遙控等相關(guān)知識(shí);
4、熟練使用C語言,有嵌入式開發(fā)工作開發(fā)及智能家居防盜報(bào)警產(chǎn)品經(jīng)驗(yàn)者優(yōu)先。
崗位職責(zé):
1、新產(chǎn)品項(xiàng)目設(shè)計(jì)開發(fā)工作;
2、為相關(guān)部門及項(xiàng)目提供技術(shù)支持;
3、產(chǎn)品售后返修分析,品質(zhì)不斷提升性能改進(jìn);
4、組織對(duì)新研發(fā)產(chǎn)品的制樣、驗(yàn)證、試產(chǎn)、量產(chǎn)等工作的確認(rèn)與審核。
第四篇:?jiǎn)纹瑱C(jī)開發(fā)經(jīng)驗(yàn)總結(jié)
單片機(jī)開發(fā)經(jīng)驗(yàn)總結(jié) 單片機(jī)開發(fā) 2010-07-20 00:54:19 閱讀77 評(píng)論0字號(hào):大中小 訂閱
1、與發(fā)光二極管串聯(lián)的電阻(排阻)的計(jì)算和選取,一般發(fā)光二極管的正常發(fā)光的電流是3~10mA,在發(fā)光二極管上產(chǎn)生的壓降是1.7
V(軌管)R=(5-1.7)/3~10(k)
2、單片機(jī)TTL電平高電平:+5V;低電平:0V。
RS232串口電平高電平:—12V ;低電平:+12V。可以通過MAX232電平轉(zhuǎn)換芯片,轉(zhuǎn)換之間的電平。
3、單片機(jī)上電IO口的寄存器為高電平,其余寄存器為低電平。
4、三極管的開關(guān)作用:在B、E間接正向電壓,E、C是導(dǎo)通的。
5、蜂鳴器:
1)有源蜂鳴器直接接上額定電壓就可以連續(xù)發(fā)聲。
2)無源蜂鳴器和電磁揚(yáng)聲器一樣,需要接在音頻輸出電路中才能發(fā)聲。
3)有源蜂鳴器帶振蕩源,無源的不帶。
4)有源蜂鳴器的理想信號(hào)是直流電。
5)無源蜂鳴器的理想信號(hào)為方波信號(hào)。
方波發(fā)聲函數(shù):void beep()
{fmq=0;
delay 500us();
fmq=1;
delay 500us();
}
6、計(jì)算單片機(jī)指令周期:
指令周期(us)=12 /晶振頻率(Mhz)
選用12M的晶振,一個(gè)指令周期為1us7、89C51的芯片最高支持24M的晶振
目前介紹單片機(jī)應(yīng)用的文章很多,但介紹單片機(jī)開發(fā)工具制作的文章卻較少。由于單片機(jī)是一門實(shí)踐性很強(qiáng)的課程,如果采用傳統(tǒng)的開發(fā)模式,則要購買價(jià)格昂貴的仿真器、編程器等開發(fā)工具來作實(shí)驗(yàn)。其實(shí)由于芯片功能的日益完善,我們可以利用芯片的在系統(tǒng)編程(ISP)功能制作出實(shí)用而低價(jià)的開發(fā)工具。本文旨在幫助DIY愛好者開發(fā)制作出適合自己的開發(fā)工具。
1當(dāng)前常用開發(fā)模式
目前,基本上有兩種開發(fā)模式可供選擇:用仿真器、用編程器。
①用仿真器。優(yōu)點(diǎn):方便,可以設(shè)置斷點(diǎn),可以觀察存儲(chǔ)器及寄存器的內(nèi)容。缺點(diǎn):價(jià)格昂貴,不同類型的單片機(jī)要購買不同的仿真器;仿真器終究不是單片機(jī),有時(shí)代碼在仿真器上能通過,但在單片機(jī)中不能正常工作,反而增加了調(diào)試的難度。
②用編程器。優(yōu)點(diǎn):價(jià)格相對(duì)便宜,通常一款編程器可編程多種器件。缺點(diǎn):操作相當(dāng)不便,每次要將芯片在目標(biāo)板與編程器之間轉(zhuǎn)移,并且還要在編譯操作界面與編程器操作界面之間切換,大部分時(shí)間在做簡(jiǎn)單的重復(fù)工作。
2新的開發(fā)模式介紹及芯片選擇
本文介紹的開發(fā)工具采用一種新的開發(fā)模式(類似于編程器開發(fā)模式)。由于利用了芯片的在系統(tǒng)編程功能,因此不需要移動(dòng)芯片。在軟件設(shè)計(jì)時(shí)設(shè)計(jì)成:一旦代碼文件被重新編過,即自動(dòng)下載到芯片,并自動(dòng)復(fù)位運(yùn)行,是真正的“所編即所得”。
目前很多單片機(jī)都支持在系統(tǒng)編程。8051系列單片機(jī)支持在系統(tǒng)編程的也很多,但大多數(shù)是支持通過PC機(jī)的串口對(duì)單片機(jī)進(jìn)行編程。這樣有四個(gè)不方便的地方:一是項(xiàng)目本身與PC機(jī)串行通信不方便;二是要增加1片MAX232電平轉(zhuǎn)換芯片;三是有的芯片要按特定的步驟進(jìn)入下載模式,編程過程需要手工干預(yù);四是有的芯片需要固件(定制的程序)的支持,如果不小心損壞了固件,則芯片的在系統(tǒng)編程功能也沒有了。
經(jīng)過比較,Atmel公司生產(chǎn)的AT89S8252是一種比較理想的芯片,適合制作開發(fā)工具。此芯片有如下特點(diǎn):
◆ 與8051兼容;
◆ 內(nèi)含8KB可擦寫1000次的程序存儲(chǔ)器,2KB可擦寫超過100 000次的數(shù)據(jù)存儲(chǔ)器及256字節(jié)8位寬內(nèi)部RAM;
◆ 可通過SPI接口在系統(tǒng)串行編程,與8051兼容
◆ 串行編程時(shí)有自動(dòng)擦寫周期,在調(diào)試大程序時(shí)可以分段下載,節(jié)約時(shí)間;
◆ 低電壓下載,無需12V編程電壓。
3AT89S8252串行編程
(1)AT89S8252串行編程模式
當(dāng)芯片的RST引腳置高電平時(shí),所有程序和數(shù)據(jù)存儲(chǔ)器可以通過SPI總線接口[SCK,MOSI(input),MISO(output)]編程。RST變高以后,在編程或擦除操作之前必須首先發(fā)送一條編程允許命令。在串行編程模式下,芯片會(huì)在字節(jié)編程之前自動(dòng)插入一個(gè)擦除周期。因此,除非芯片的代碼保護(hù)位被編程,編程之前不需要執(zhí)行全片擦除命令。SPI接口之SCK時(shí)鐘頻率須低于晶振頻率的1/40。
(2)AT89S8252串行編程步驟
①在XTAL1與XTAL2之間連接一個(gè)3~24MHz的晶振;在VCC與GND之前加上電源電壓,將RST置高,等待10ms。
②發(fā)送串行編程允許命令。
③發(fā)送寫/讀/擦除等命令及數(shù)據(jù),串行數(shù)據(jù)高位在前,低位在后,數(shù)據(jù)在時(shí)鐘的上升沿鎖定。④如果上一步是寫命令,至少等待2.5ms。
⑤需要時(shí)重復(fù)③、④兩步。
⑥將RST置低,芯片開始運(yùn)行。
(3)AT89S8252串行編程命令
AT89S8252串行編程命令如表1所列。
表
(4)AT89S8252串行編程時(shí)序圖
AT89S8252串行編程時(shí)序如圖1所示。
圖
14硬件設(shè)計(jì)
①通過計(jì)算機(jī)并口與單片機(jī)SPI口連接;
②為了保護(hù)計(jì)算機(jī)并口,需要增加1片74HC244作為隔離。
實(shí)用的原理圖如圖2所示。(已經(jīng)過實(shí)踐檢驗(yàn),可放心使用。)
圖
25用VB編程進(jìn)行并口控制
打印端口的基地址一般為0x278、0x378或0x3BC,可以從控制面板中查到。為了方便讀者,表2列出了常用打印端口引腳及寄存器位元的說明。
表
在Windows環(huán)境下最簡(jiǎn)單易學(xué)的語言恐怕非VB莫屬,所以我們的開發(fā)工具也選用VB作為編程語言。但由于Windows的保護(hù),VB無法直接讀寫打印端口,因此我們需要另外的程序模塊來實(shí)現(xiàn)打印端口的直接讀寫。在Internet網(wǎng)上可以找到許多此類模塊,并且相當(dāng)多的模塊可以免費(fèi)使用。經(jīng)過試用,筆者推薦使用Winio v2.0。該模塊支持Win9X/NT/2000/XP(http:// Yariv Kaplan),并且?guī)в性敿?xì)的幫助、例子程序及源碼。使用時(shí),將Winio.sys、Winio.dll、Winio.vxd
及Winio.bas四個(gè)文件拷貝到工作目錄下,在VB中直接添加Winio.bas模塊即可。本例中用到的函數(shù)有四個(gè),分別說明如下。
①Initialize():允許端口控制函數(shù)。在使用端口輸入輸出函數(shù)之前調(diào)用一次,成功返回“1”,失敗返回“0”。
②Shutdown():關(guān)閉端口控制函數(shù)。在退出程序時(shí)執(zhí)行一次,成功返回“1”,失敗返回“0”。③GetPortVal(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean:讀取端口函數(shù),PortAddr 為端口地址, Portval為端口值,bSize為要讀取的字節(jié)數(shù)。讀取成功時(shí)返回“1”,失敗時(shí)返回“0”。
④SetPortVal(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean:寫端口函數(shù)。PortAddr 為端口地址, Portval為要寫的值,bSize為要寫入的字節(jié)數(shù)。寫入成功返回“1”,失敗返回“0”。
四個(gè)函數(shù)在Winio.bas模塊中的聲明如下:
Declare Function InitializeWinIo Lib “WinIo.dll”()As Boolean
Declare Function ShutdownWinIo Lib “WinIo.dll”()As Boolean
Declare Function GetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByRef Portval As Long, ByVal bSize As Byte)As Boolean
Declare Function SetPortVal Lib “WinIo.dll”(ByVal PortAddr As Integer, ByVal Portval As Long, ByVal bSize As Byte)As Boolean
6Intel HEX 格式文件
由于一般編譯軟件產(chǎn)生的用于寫入芯片的文件都是Intel HEX格式的文件。Intel HEX文件屬于文本文件,可以用記事本查看。一個(gè)Intel HEX文件的一行稱為一個(gè)記錄,每個(gè)記錄都是由十六進(jìn)制字符組成的,兩個(gè)字符表示一個(gè)字節(jié)的值。Intel HEX文件通常由若干條記錄組成,每個(gè)記錄都具有如下的形式:
:LLAAAATTDD...DDCC
“:”——記錄的起始標(biāo)志;
LL——記錄長(zhǎng)度,表示該記錄中的數(shù)據(jù)字節(jié)數(shù);
AAAA——數(shù)據(jù)裝入的首地址(16位);
TT——記錄類型,00表示數(shù)據(jù)記錄,01表示文件結(jié)束;(注意:有的編譯軟件會(huì)產(chǎn)生大于01的記錄類型,本應(yīng)用中對(duì)大于01記錄類型的記錄忽略掉即可。)
DD——數(shù)據(jù)值(字節(jié));
CC——校驗(yàn)和。(將其本身與記錄中除起始標(biāo)志外的所有字節(jié)相加應(yīng)為0,不為0則有錯(cuò)。)
VB編程詳細(xì)說明見本刊網(wǎng)絡(luò)補(bǔ)充版(http://.cn)。(由于各子程序的流程都較簡(jiǎn)單,所以直接給出源碼,而未畫出流程圖。程序采用由底至頂?shù)脑O(shè)計(jì)方法。)
結(jié)語
雖然上述程序能實(shí)現(xiàn)各種基本的功能,但并不完善,并未考慮各種異常情況,讀者可根據(jù)實(shí)際情況進(jìn)行完善。編程功力較差的朋友可直接到筆者的網(wǎng)站(http: //)下載相對(duì)較完善的應(yīng)用程序。如果充分理解了上述程序,那么DIY一個(gè)AVR或PIC單片機(jī)的開發(fā)工具也非難事。在筆者的網(wǎng)站也有制作完成的“MCS51/AVR/PIC三合一下載器資料”供愛好者下載。
由于AT89S8252的價(jià)格還是較貴,所以現(xiàn)在市場(chǎng)上較難買,不過Atmel公司推出的替代
AT89C51/52的AT89S51/52也有在系統(tǒng)編程功能,且價(jià)格便宜。其在系統(tǒng)編程的實(shí)現(xiàn)方法與
AT89S8252類似,對(duì)本例部分程序稍作修改即可支持該器件。筆者制作的“MCS51/AVR/PIC三合一下載器”增加了對(duì)AT89S51/52的支持。
文章來源:http:///wz_17380.htmPowerd by laogu
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
再來幾點(diǎn):
先從最簡(jiǎn)單的AT89C5X(51,52,55等等)說起吧,做這個(gè)的時(shí)間最長(zhǎng),知道的可能多些,書本上的東西這里我不多說,主要談些實(shí)際應(yīng)用中的經(jīng)驗(yàn)與教訓(xùn)。書可以參看北航出的一本專門講AT89系列的,還不錯(cuò),建議大家購買。
AT89C51我認(rèn)為是一個(gè)非常標(biāo)準(zhǔn)的51單片機(jī)了,4個(gè)P口,1個(gè)串口,RAM只有標(biāo)準(zhǔn)的128Byte,F(xiàn)lash也只有4K,功能還算齊全,我就以它為基礎(chǔ),所以開發(fā)過程中遇到的問題吧。
第一個(gè)問題:復(fù)位源的問題
大家最常用的復(fù)位方式就是電阻加電容吧,AT89C51是高電平復(fù)位,這種方式不穩(wěn)定,在產(chǎn)品調(diào)試時(shí)可以使用,因?yàn)樵谡{(diào)試時(shí)我們一般使用了仿真器,而許多仿真器都會(huì)自己輸出復(fù)位信號(hào),而屏蔽掉目標(biāo)板產(chǎn)生的復(fù)位信號(hào),所以調(diào)試時(shí)復(fù)位信號(hào)是沒有問題的,我們公司使用的是長(zhǎng)沙菊陽的仿真器,用的是比較先進(jìn)的技術(shù),還算可以,仿真AT89系列的芯片一點(diǎn)問題沒有,還很穩(wěn)定的說。這里有一個(gè)非常重要的問題要說下,大家有時(shí)候會(huì)遇到這樣的一個(gè)問題:自己的程序在仿真時(shí)運(yùn)行一點(diǎn)問題也沒有,但燒錄后卻不行了。結(jié)合我的經(jīng)驗(yàn)有兩種原因。一是時(shí)序可能變了,這個(gè)大家都知道,我不多說,還有一個(gè)原因就是復(fù)位信號(hào)的問題。具體情況如下:
(1)復(fù)位電路有問題,不能正常產(chǎn)生復(fù)位信號(hào)。因?yàn)檎{(diào)試時(shí)仿真器可能給你提供了復(fù)位信號(hào),而脫離仿真器后就沒有了;
(2)看門狗的問題。有些51芯片帶有看門狗復(fù)位功能,如At89c55WD,當(dāng)程序開啟了看門狗后,有時(shí)候程序的初始化內(nèi)容太多了,往往會(huì)產(chǎn)生了復(fù)位信號(hào),特別是用C語言編程功能時(shí),有時(shí)候雖然你明明在程序開始時(shí)某個(gè)地方關(guān)閉了看門狗,但程序依然會(huì)復(fù)位,這是因?yàn)镃語言執(zhí)行效率比匯編低,看似幾行代碼,有時(shí)候要很長(zhǎng)時(shí)間的,所以在使用開門狗時(shí)一定要注意這個(gè)問題。而這個(gè)問題在使用仿真器時(shí)容易被忽視,因?yàn)榧词鼓愕某绦蚶锟撮T狗復(fù)位了,但是仿真器(菊陽仿真器可以開啟/屏蔽這個(gè)功能)往往會(huì)屏蔽了這個(gè)復(fù)位信號(hào),所以程序仍然會(huì)正常運(yùn)行的。當(dāng)你把程序燒好后再運(yùn)行時(shí),你卻為發(fā)現(xiàn)剛調(diào)試好的程序卻無法正常運(yùn)行了,那是因?yàn)槟愕某绦蛞恢痹诓煌?fù)位了,注意用示波器觀察RST腳可能看不到復(fù)位信號(hào)的,因?yàn)榭撮T狗復(fù)位并不影響RST腳的電平。再一種情況就是芯片內(nèi)部不帶看門狗,但是電路中有CPU監(jiān)控芯片的,它往往是可以提供復(fù)位信號(hào)的,而且是多種原因的復(fù)位信號(hào),如果你發(fā)現(xiàn)上述情況,就可以用示波器查看RST腳看是否有電平變化。
所以建議大家做51產(chǎn)品開發(fā)時(shí)盡量使用CPU監(jiān)控芯片,向X5045就是非常好用的,因?yàn)樗€帶有Eprom功能,這在很多場(chǎng)合使用的到的,也可以用MAX708等專用復(fù)位芯片了,既穩(wěn)定又方便。
第五篇:嵌入式Linux開發(fā)流程
嵌入式Linux開發(fā)流程
嵌入式 linux開發(fā),根據(jù)應(yīng)用需求的不同有不同的配置開發(fā)方法,但是一般都經(jīng)過以下過程:
建立開發(fā)環(huán)境。操作系統(tǒng)一般 REDHAT-LINUX,版本 7 到9 都可以,選擇定制安裝或全部安裝,通過網(wǎng)絡(luò)下載相應(yīng)的 GCC 交叉編譯器進(jìn)行安裝(比如 arm-linux-gcc、arm-uclibc-gcc),或者安裝產(chǎn)品廠家提供的交叉編譯器。
配置開發(fā)主機(jī)。配置 MINICOM,一般參數(shù)為115200,數(shù)據(jù)位 8位,停止位 1,無奇偶校驗(yàn),軟硬件控制流設(shè)為無。在 WINDOWS 下的超級(jí)終端的配置也是這樣。MINICOM軟件的作用是作為調(diào)試嵌入式開發(fā)板信息輸出的監(jiān)視器和鍵盤輸入的工具;配置網(wǎng)絡(luò),主要是配置 NFS 網(wǎng)絡(luò)文件系統(tǒng),需要關(guān)閉防火墻,簡(jiǎn)化嵌入式網(wǎng)絡(luò)調(diào)試環(huán)境設(shè)置過程。
建立引導(dǎo)裝載程序BOOTLOADER,從網(wǎng)絡(luò)上下載一些公開源代碼的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據(jù)自己具體芯片進(jìn)行移植修改。有些芯片沒有內(nèi)置引導(dǎo)裝載程序,比如三星的 ARM7、ARM9 系列芯片,這樣就需要編寫燒寫開發(fā)板上 flash 的燒寫程序,網(wǎng)絡(luò)上有免費(fèi)下載的 WINDOWS 下通過JTAG并口簡(jiǎn)易仿真器燒寫 ARM 外圍 flash 芯片的程序。也有 LINUX 下公開源代碼的J-FLASH 程序。如果不能燒寫自己的開發(fā)板,就需要根據(jù)自己的具體電路進(jìn)行源代碼修改。這是讓系統(tǒng)可以正常運(yùn)行的第一步。如果你購買了廠商提供的仿真器,當(dāng)然比較容易燒寫flash了,但是其中的核心技術(shù)是無法了解的。這對(duì)于需要迅速開發(fā)應(yīng)用的人來說可以極大地提高開發(fā)速度。
下載別人已經(jīng)移植好的 LINUX 操作系統(tǒng),如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有專門針對(duì)你所使用的CPU移植好的 LINUX 操作系統(tǒng)那是再好不過,下載后再添加自己的特定硬件的驅(qū)動(dòng)程序,進(jìn)行調(diào)試修改,對(duì)于帶 MMU的 CPU可以使用模塊方式調(diào)試驅(qū)動(dòng),對(duì)于 UCLINUX 這樣的系統(tǒng)好像只能編譯進(jìn)內(nèi)核進(jìn)行調(diào)試。
建立根文件系統(tǒng),從下載使用 BUSYBOX 軟件進(jìn)行功能裁減,產(chǎn)生一個(gè)最基本的根文件系統(tǒng),再根據(jù)自己的應(yīng)用需要添加其他的程序。默認(rèn)的啟動(dòng)腳本一般都不會(huì)符合應(yīng)用的需要,所以就要修改根文件系統(tǒng)中的啟動(dòng)腳本,它的存放位置位于 /etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自動(dòng)掛裝文件系統(tǒng)的配置文件/etc/fstab,具體情況會(huì)隨系統(tǒng)不同而不同。根文件系統(tǒng)在嵌入式系統(tǒng)中一般設(shè)為只讀,需要使用 mkcramfs、genromfs 等工具產(chǎn)生燒寫映象文件。
建立應(yīng)用程序的 flash 磁盤分區(qū),一般使用JFFS2 或 YAFFS 文件系統(tǒng),這需要在內(nèi)核中提供這些文件系統(tǒng)的驅(qū)動(dòng),有的系統(tǒng)使用一個(gè)線性 flash(NOR 型)512K-32M,有的系統(tǒng)使用非線性 flash(NAND型)8-512M,有的兩個(gè)同時(shí)使用,需要根據(jù)應(yīng)用規(guī)劃 flash的分區(qū)方案。
開發(fā)應(yīng)用程序,可以下載到根文件系統(tǒng)中,也可以放入 YAFFS、JFFS2 文件系統(tǒng)中,有的應(yīng)用程序不使用根文件系統(tǒng),而是直接將應(yīng)用程序和內(nèi)核設(shè)計(jì)在一起,這有點(diǎn)類似于UCOS-II 的方式。
燒寫內(nèi)核、根文件系統(tǒng)、應(yīng)用程序。
發(fā)布產(chǎn)品。