㈠ 學習嵌入式開發要學習哪些知識
嵌入式系統是計算機軟體和硬體的綜合體,我有全套嵌入式視頻課可以發給你自學。
①C,Java核心編程:c語言核心編程,Java核心編程;
②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
⑤大型項目實踐:每期安排各類型真實的項目,詳細可以找我要資料。
北大青鳥中博軟體學院嵌入式課堂實拍
學完可以從事:
ESE(嵌入式軟體工程師);
ADE(嵌入式應用開發工程師);
FWE(嵌入式底層開發工程師);
FEC(嵌入式固件開發工程師)
你也可以考察對比一下南京課工場、北大青鳥、中博軟體學院等開設有嵌入式開發專業的學校。記得找我要全套嵌入式開發視頻課,祝學有所成!望採納!
㈡ 如何編寫一個最簡單的嵌入式操作系統簡單任務調度
最簡單的任務調度
以現代觀點而言,一個標准個人電腦的OS應該提供以下的功能:
進程管理(Processing management)
內存管理(Memory management)
文件系統(File system)
網路通訊(Networking)
安全機制(Security)
用戶界面(User interface)
驅動程序(Device drivers)
但一個最簡易的嵌入式操作系統,所包含的可以少很多。最簡單的操作系統,通常都是圍繞著進程管理展開的。所以,現在可以嘗試下一個最簡單的「操作系統」,只能做簡單地進行人工任務調度。為了簡單起見,使用最簡單的AT89S52運行程序:內存小的數的清位元組數,外設只有幾個IO,結構簡單,很方便操作系統的編寫。
1.裸跑的任務和操作系統中的任務
相信大家都很熟悉,用單片機裸跑,程序一般都寫成如下一個大的while死循環:
void main (void)
{
while (1) /* repeat forever */
{
do_something();
}
}
或者又像:
void main (void)
{
while (1) /* repeat forever */
{
do_something1();
do_something2(); //Catch data input
do_something3();
.
.
.
}
}
這里每一個函數完成一個獨立的操作或者任務,這些函數(也可以叫任務)以一定的順序執行,一個接著一個。這里的任務切換,單純就是執行完一個,再執行另一個。不斷循環。
但是,一旦增加更多的任務,那麼執行的順序就變成了一個問題。在以上的例子中,一旦函數do_something1()運行了太長的時間,那麼主循環就需要很長的時間才可以執行到do_something2()。如果do_something2()是接收輸入數據的函數,數據就很有可能丟失。當然,我們也可以在循環中插入更多的do_something2()函數調用,或者把do_something1()拆分成幾個比較小的部分。但這就比較考驗編程者功力了,如果任務太多,編寫程序將成為一個相當復雜的問題。
這時,一個幫助你分配各個任務運行時間的操作系統就很有必要了。在操作系統中,任務一般形如:
void check_serial_io_task (void) _task_ 1
{
/* This task checks for serial I/O */
}
void process_serial_cmds_task (void) _task_ 2
{
/* This task processes serial commands */
}
void check_kbd_io_task (void) _task_ 3
{
/* This task checks for keyboard I/O */
}
任務之間的切換已經交給操作系統完成了,熟悉的main函數和while(1)一般已經隱去不見了。
2.如何做任務切換
還是說單片機裸跑,裸跑時,把C語言文件編譯成匯編,可以看到,是用CALL指令去調一個任務函數,執行完畢後,用RET退出。但是這樣的方法用在切換頻繁的操作系統中,就無疑不適合了,因為我們無法做到預知什麼時候退出,即調用RET。
任務切換,看起來很玄,實際上說白了,就是改變程序指針PC的值。前邊寫的_task_ 1,_task_ 2,編譯以後,都存儲在ROM中。把PC指向這段ROM,他就執行了,想切換另一個任務,就用PC指向那個任務。就這么簡單。這樣說,是不是就是PC=一個地址就可以了?不行,因為絕大多數單片機,是不允許給PC寄存器直接賦值的。那樣寫,編譯器會報錯的。一般操作系統,都用以下方法改變PC的值:
unsigned char Task_Stack1[3];
Task_Stack1[1] = (uint16) Task_1;
Task_Stack1[2] = (uint16) Task_1 >> 8;
SP = Task_Stack1+2;
}//編譯成RET
PC的值不能直接改變,但是可以變通,通過其他方式改變PC的值。一個函數執行完畢,總是要改變PC的。這是,PC是如何改變的呢?函數執行前,PC被壓入了堆棧中。函數結束,要調用的是RET指令,也就是PC出棧。壓在堆棧中的原始PC值,這時從堆棧中彈出,程序又回到了原來的位置。這里就是模仿這一過程:模擬一個堆棧的結構,把要執行的函數入口地址(C語言中的函數名)裝入其中,把SP指向這個自己創建的堆棧棧頂。一個RET指令,就將[SP]和[SP-1]彈到PC中了。就這樣,PC改變到了要執行的函數入口地址,開始執行目標函數。(AT89s52的PC為16位,壓到堆棧中是兩個位元組)
3.一個最簡單的人工調度系統
應用上面的思想,寫一個最簡單的3任務人工調度系統。代碼如下:
typedef unsigned char uint8;
typedef unsigned int uint16;
#include
sbit led0 = P0^0;
sbit led1 = P0^1;
sbit led2 = P0^2;
uint8 Cur_TaskID; //當前運行的任務號
uint8 Task_Stack0[10]; //0號任務的堆棧
uint8 Task_Stack1[10];
uint8 Task_Stack2[10];
uint8 Task_StackSP[3]; //3個堆棧的棧頂指針
//Task_StackSP[0] -> Task_Stack0
//Task_StackSP[1] -> Task_Stack1
//Task_StackSP[2] -> Task_Stack2
void Task_0(); //任務0
void Task_1(); //任務1
void Task_2(); //任務2
void Task_Scheling(uint8 Task_ID); //任務調度
void main (void)
{
Task_Stack0[1] = (uint16) Task_0; //按照小端模式,任務函數入口地址裝入任務堆棧
Task_Stack0[2] = (uint16) Task_0 >> 8;
Task_Stack1[1] = (uint16) Task_1;
Task_Stack1[2] = (uint16) Task_1 >> 8;
Task_Stack2[1] = (uint16) Task_2;
Task_Stack2[2] = (uint16) Task_2 >> 8;
Task_StackSP[0] = Task_Stack0;
Task_StackSP[0] += 2; //剛入棧兩個元素。這里取得棧頂地址,即Task_Stack0[2]
Task_StackSP[1] = Task_Stack1;
Task_StackSP[1] += 2;
Task_StackSP[2] = Task_Stack2;
Task_StackSP[2] += 2;
Cur_TaskID = 0;
SP = Task_StackSP[0]; //SP取得0號任務的棧頂地址
}//利用main的返回指令RET,使PC取得0號任務入口地址
//任務調度函數
void Task_Scheling(uint8 Task_ID)
{
Task_StackSP[Cur_TaskID] = SP;
Cur_TaskID = Task_ID;
SP = Task_StackSP[Cur_TaskID];
}
//0號任務函數
void Task_0()
{
while(1)
{
led0 = 0;
Task_Scheling(1);
}
}
//1號任務函數
void Task_1()
{
while(1)
{
led1 = 0;
Task_Scheling(2);
}
}
//2號任務函數
void Task_2()
{
while(1)
{
led2 = 0;
Task_Scheling(0);
}
}
代碼要做的,就是3個任務的順序執行。任務調度函數Task_Scheling的思想也即如前面所述。在Keil中可以運行代碼,可以看到,程序在3個任務中順序執行了。
㈢ 嵌入式開發都需要學習什麼
嵌入式系統是計算機軟體和硬體的綜合體,崗位包括:ESE(嵌入式軟體工程師);ADE(嵌入式應用開發工程師);FWE(嵌入式底層開發工程師);FEC(嵌入式固件開發工程師)。
課程內容主要包括:
①C,Java核心編程:c語言核心編程,Java核心編程;
②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
⑤大型項目實踐:每期安排各類型真實的項目,詳細可以找我要資料。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
㈣ 嵌入式開發如何入門
嵌入式開發主要有兩種,像STM32、飛思卡爾等系列單片機屬於無操作系統的,直接對寄存器或者利用庫函數操作的,這種學習來難度相對小一些,就業前景也不錯。
還有一些像ARM9,或者CortexA8、A9系列的可以運行Linux或者安卓操作系統的嵌入式軟體系統開發,由於需要學習的內容較多,學習時間較長,那麼學習起來就有一定的難度,工資也相對高一些。
課程內容主要包括:
①C,Java核心編程:c語言核心編程,Java核心編程;
②Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
③核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
④ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
⑤大型項目實踐:每期安排各類型真實的項目,詳細可以找我要資料。
互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。
祝你學有所成,望採納。
㈤ 如何學習嵌入式開發
嵌入式開發的學習其實並沒有那麼難,只要了解學習的體系,掌握正確的學習方法,學習起來並不難。來講一下嵌入式開發都要學些啥!
嵌入式開發的主要學習內容:
C,Java核心編程:c語言核心編程,Java核心編程;
Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
大型項目實踐:每期安排各類型真實的項目
互聯網行業目前還是最熱門的行業,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,建議實地考察對比一下。
祝你學有所成,望採納。
㈥ 嵌入式系統的設計流程是什麼
一、嵌入式系統開發流程
1、系統需求分析:根據需求,確定設計任務和設計目標,指定設計說明書。
2、體系結構設計:描述系統如何實現所述的功能需求,包括對硬體、軟體和執行裝置的功能劃分以及系統的軟體、硬體選型。
3、硬體/軟體協同設計:基於體系結構的設計結果,對系統的硬體、軟體進行詳細設計。一般情況下嵌入式系統設計的工作大部分都集中在軟體設計上,現代軟體工程經常採用的方法是面向對象技術、軟體組件技術和模塊化設計。
4、系統集成:把系統的硬體、軟體和執行裝置集成在一起進行調試,發現並改進設計過程中的不足之處。
5、系統測試:對設計好的系統進行測試,檢驗系統是否滿足實際需求。
二、嵌入式軟體開發
嵌入式軟體開發的一般流程為需求分析、軟體概要設計、軟體詳細設計、軟體實現和軟體測試。與一般的軟體開發區別主要在於軟體實現的編譯和調試兩部分即為交叉編譯與交叉調試。
㈦ 如何從0開始寫嵌入式程序
先學習C語言吧,有了C語言基礎 ,再購買一個開發板學習,一般有配套的視頻教程,跟著教程寫程序,下載到開發板上,一點點的學習就可以了,當然學習速度必然會很慢,做嵌入式需要有比較強的學習能力。
㈧ 自學嵌入式開發應該先要學些什麼
嵌入式開發的學習其實並沒有那麼難,只要了解學習的體系,掌握正確的學習方法,學習起來並不難。來講一下嵌入式開發都要學些啥!
嵌入式開發的主要學習內容:
C,Java核心編程:c語言核心編程,Java核心編程;
Linux核心操作與演算法:Linux系統使用,Linux-c編程核心技術,精品數據結構,Linux-c編程精髓;
核心操作與演算法:Linux系統編程,Linux網路編程核心技術,UI編程,Java核心編程,安卓核心技術;
ARM+Linux底層開發:數字電路,ARM編程核心,Linux系統開發,嵌入式Linux驅動開發;
大型項目實踐:每期安排各類型真實的項目
互聯網行業目前還是最熱門的行業,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。
想要系統學習,你可以考察對比一下開設有IT專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,建議實地考察對比一下。
祝你學有所成,望採納。
㈨ 嵌入式簡單程序編寫
下面是arm匯編代碼
1,
Start
LDR r0, =src ;
LDR r1, =dst ;
MOV r2, #26 ; //總共搬移多少個字
MOV sp, #0x400 ;
block
MOVS r3,r2, LSR #3 ;
BEQ words ;
STMFD sp!, {r4-r7} ;
oct
LDMIA r0!, {r4-r7} ;
STMIA r1!, {r4-r7} ;
SUBS r3, r3, #1 ;
BNE oct ;
LDMFD sp!, {r4-r7} ;
words
ANDS r2, r2, #7 ;
BEQ stop ;
word
LDR r3, [r0], #4 ;
STR r3, [r1], #4 ;
SUBS r2, r2, #1 ;
BNE word ;
stop
B stop ;
2,
MOV r0, #x
MOV r1, #n
MOVS r2, r1
MOVEQ r0, #1
MOV r1, r0
BEQ do_mul
SUB r2,r2,#1
pow1 BL do_mul
SUB r2,r2,#1
BNE pow1
do_mul MUL r0, r1,r0
㈩ 嵌入式系統如何開發的
嵌入式系統開發就是對於除了電腦之外的所有電子設備上操作系統的開發,開發對象有手機,掌上電腦,機電系統等。
嵌入式系統開發流程:
第一步:建立開發環境
操作系統一般使用Redhat Linux,選擇定製安裝或全部安裝,通過網路下載相應的GCC交叉編譯器進行安裝(比如,arm-linux-gcc、arm-uclibc-gcc),或者安裝產品廠家提供的相關交叉編譯器;
第二步:配置開發主機
配置MINICOM,一般的參數為波特率115200 Baud/s,數據位8位,停止位為1,9,無奇偶校驗,軟體硬體流控設為無。在Windows下的超級終端的配置也是這樣。MINICOM軟體的作用是作為調試嵌入式開發板的信息輸出的監視器和鍵盤輸入的工具。配置網路主要是配置NFS網路文件系統,需要關閉防火牆,簡化嵌入式網路調試環境設置過程。
第三步:建立引導裝載程序BOOTLOADER
從網路上下載一些公開源代碼的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據具體晶元進行移植修改。有些晶元沒有內置引導裝載程序,比如,三星的ARV17、ARM9系列晶元,這樣就需要編寫開發板上FLASH的燒寫程序,可以在網上下載相應的燒寫程序,也有Linux下的公開源代碼的J-FLASH程序。如果不能燒寫自己的開發板,就需要根據自己的具體電路進行源代碼修改。這是讓系統可以正常運行的第一步。如果用戶購買了廠家的模擬器比較容易燒寫FLASH,雖然無法了解其中的核心技術,但對於需要迅速開發自己的應用的人來說可以極大提高開發速度。
第四步:下載已經移植好的Linux操作系統
如MCLiunx、ARM-Linux、PPC-Linux等,如果有專門針對所使用的CPU移植好的Linux操作系統那是再好不過,下載後再添加特定硬體的驅動程序,然後進行調試修改,對於帶MMU的CPU可以使用模塊方式調試驅動,而對於MCLiunx這樣的系統只能編譯內核進行調試。
第五步:建立根文件系統
下載使用BUSYBOX軟體進行功能裁減,產生一個最基本的根文件系統,再根據自己的應用需要添加其他的程序。由於默認的啟動腳本一般都不會符合應用的需要,所以就要修改根文件系統中的啟動腳本,它的存放位置位於/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動掛裝文件系統的配置文件/etc/fstab,具體情況會隨系統不同而不同。根文件系統在嵌入式系統中一般設為只讀,需要使用mkcramfs genromfs等工具產生燒寫映像文件。
第六步:建立應用程序的FLASH磁碟分區
一般使用JFFS2或YAFFS文件系統,這需要在內核中提供這些文件系統的驅動,有的系統使用一個線性FLASH(NOR型)512KB~32MB,有的系統使用非線性FLASH(NAND型)8MB~512MB,有的兩個同時使用,需要根據應用規劃FLASH的分區方案。
第七步:開發應用程序
可以放入根文件系統中,也可以放入YAFFS、JFFS2文件系統中,有的應用不使用根文件系統,直接將應用程序和內核設計在一起,這有點類似於μC/OS-II的方式。
第八步:燒寫內核
根文件系統和應用程序,發布產品。
....................................................................................................................................................
................................................................
還有怎麼學習嵌入式呢,我剛才看到一篇很不錯的文章,是一個專科生介紹自己如何自學嵌入式,並找到嵌入式的工作,裡面介紹了他的學習方法和學習過程,希望對你有幫助。
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘做技術的,可是處處碰壁。
一次偶然的機會,我才聽到嵌入式這個行業。那天我去新華書店,在計算機分類那邊想找本書學習。後來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習嵌入式,然後給我介紹了一下嵌入式現在的火熱情況,告訴我學嵌入式多麼的有前景,給我了一份傳單,嵌入式培訓的廣告。聽了她的介紹,我心裡癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下嵌入式,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相對比較高。我就下決心想學嵌入式了。於是我去找嵌入式培訓的相關信息,說真的,我也很迷茫,我不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
後來,我在網路知道看到一篇讓我很鼓舞的文章,是一個嵌入式高手介紹沒有基礎的朋友怎麼自學入門學嵌入式,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會我再去培訓。
主意一定,我就去搜索嵌入式的視頻,雖然零星找到一些嵌入式的視頻,但是都不系統,我是想找一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教,不懂可以請教的。
後來我又找到一份很好的視頻,是在IT學習聯盟網站推出的一份視頻《零基礎嵌入式就業班》(喜歡《零基礎嵌入式就業班》的可以復制 sina.lt/qKh 粘貼瀏覽器地址欄按回車鍵即打開)。裡面的教程還不錯,很完整,可以讓我從基礎的開始學起。視頻比較便宜。
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光碟後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的C語言視頻教程學起,話說簡單,其實我還是很多不懂的,我只好請教他們,他們還是很熱心的,都幫我解決了。C語言我差不多學了一個禮拜,接下來我就學了linux的基本命令,我在他們提供linux虛擬機上都有做練習,敲linux的基本命令,寫簡單的C語言代碼,差不多也就三個禮拜。我每天都在不停的寫一些簡單的代碼,這樣一月後我基本掌握了C和linux的基本操作。
接下來我就去學習了人家的視頻的培訓教程,是整套的,和去參加培訓沒有多大的區別,這一看就是兩個月,學習了ARM的基本原理,學習嵌入式系統的概念,也掌握了嵌入式的環境的一些搭建,對linux也有更深層次的理解了,明白了嵌入式應用到底是怎麼做的,但是驅動我只是有一點點的了解,這個相對難一點,我想以後再慢慢啃。
這兩個月,除了吃飯睡覺,我幾乎都在學習。因為我知道幾乎沒有基礎,比別人差勁,我只能堅持努力著,我不能放棄,我必要要靠自己來養活自己,必須學好這門技術,然後我就把不懂的問題總結記下來,這樣慢慢積累了一段時間,我發現自己真的有點入門了。
最後的一個月,我就去看關於實踐部分的內容,了解嵌入式項目具體的開發流程,需要什麼樣的知識,我就開始准備這方面的知識,也就是學習這方面的視頻,同時他們建議我去找了找一些嵌入式面試的題目,為自己以後找工作做准備。我就到網上找了很多嵌入式的題目,把他們理解的記下來,這樣差不多准備了20天左右
我覺得自己差不多入門了,會做一些簡單的東西了。我就想去找工作看看,於是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
後來陸續面試了幾家公司,終於功夫不負有心人。我終於面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是嵌入式linux應用開發,做安防產品的應用的。我想我也比較幸運,經理很看重我的努力,就決定錄用我,開的工資是3500一個月,雖然我知道在上海3500隻能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
假如你喜歡嵌入式的話就努力學習吧。
。。。。。。。。。。。。。。。。。。。。。。。。。。。