A. 嵌入式系統開發中的c語言編程和普通C語言編程有何區別
無區別,只不過編譯器不一樣罷了。因為不同的cpu構架有不同的指令集。而嵌入式基本使用RISC結構的cpu,需要使用pc上的cpu編譯出在能嵌入式cpu上運行的二進製程序。這叫交叉編譯。pc上的程序不可以直接在其他cpu上運行,需要重新編譯。
因為編譯器不一樣,執行的c語言標准就跟編譯器相關。
管理內存映射,設置中斷系統等在pc上也有,不是嵌入式的專利。
只是做嵌入式里的界面、網路、文件編程的話,跟pc上幾乎沒有差別,因為有操作系統罩著。如果開發驅動程序,就要求你對所使用的cpu和板子的結構很了解,也就是看得懂硬體手冊即可。
另外嵌入式環境同pc的差別 如cpu位數、硬體資源緊缺等是需要程序員考慮的。
B. C語言的嵌入式開發(高手來指導)
建議你好好研究下這個資料,AT89S51(應用)這個資料.上面有三十幾個實例,每個配有匯編程序和C程序,建議你每個都好好研究下.同時也可以用模擬軟體protues進行硬體模擬.很好的硬體模擬軟體哦!入門的時候是有點困難,但是進去了就會好的.學這個關鍵是要學會總結.常子程序的積累!其實也不難的.相信你會學好的.想要AT89S51(應用)資料找QQ:470716850
C. arm編程,c語言中嵌入匯編實現1+2+3+...+100
C語言中static關鍵字的常見用法及舉例
在嵌入式系統開發中,目前使用的主要編程語言是C和匯編,
C++已經有相應的編譯器,但是現在使用還是比較少的。在稍大
規模的嵌入式軟體中,例如含有OS,大部分的代碼都是用C編
寫的,主要是因為C語言的結構比較好,便於人的理解,而且有
大量的支持庫。盡管如此,很多地方還是要用到匯編語言,例如
開機時硬體系統的初始化,包括CPU狀態的設定,中斷的使能,
主頻的設定,以及RAM的控制參數及初始化,一些中斷處理方
面也可能涉及匯編。另外一個使用匯編的地方就是一些對性能非
常敏感的代碼塊,這是不能依靠C編譯器的生成代碼,而要手工
編寫匯編,達到優化的目的。而且,匯編語言是和CPU的指令集
緊密相連的,作為涉及底層的嵌入式系統開發,熟練對應匯編語
言的使用也是必須的。
單純的C或者匯編編程請參考相關的書籍或者手冊,這里主要討
論C和匯編的混合編程,包括相互之間的函數調用。下面分四種
情況來進行討論,暫不涉及C++。
1. 在C語言中內嵌匯編
在C中內嵌的匯編指令包含大部分的ARM和Thumb指令,不過其
使用與匯編文件中的指令有些不同,存在一些限制,主要有下面
幾個方面:
a. 不能直接向PC寄存器賦值,程序跳轉要使用B或者BL指令
b. 在使用物理寄存器時,不要使用過於復雜的C表達式,避免物理寄存器沖突
c.
R12和R13可能被編譯器用來存放中間編譯結果,計算表達式值時可能將R0到R3、R12及R14用於子程序調用,因此要避免直接使用這些物理寄存器
d. 一般不要直接指定物理寄存器,而讓編譯器進行分配
內嵌匯編使用的標記是 __asm或者asm關鍵字,用法如下:
__asm
{
instruction [; instruction]
…
[instruction]
}
asm(「instruction [; instruction]」);
下面通過一個例子來說明如何在C中內嵌匯編語言,
#include
void my_strcpy(const char *src, char *dest)
{
char ch;
__asm
{
loop:
ldrb ch, [src], #1
strb ch, [dest], #1
cmp ch, #0
bne loop
}
}
int main()
{
char *a = "forget it and move on!";
char b[64];
my_strcpy(a, b);
printf("original: %s", a);
printf("ed: %s", b);
return 0;
}
在這里C和匯編之間的值傳遞是用C的指針來實現的,因為指針
對應的是地址,所以匯編中也可以訪問。
2. 在匯編中使用C定義的全局變數
內嵌匯編不用單獨編輯匯編語言文件,比較簡潔,但是有諸多限
制,當匯編的代碼較多時一般放在單獨的匯編文件中。這時就需
要在匯編和C之間進行一些數據的傳遞,最簡便的辦法就是使用
全局變數。
/* cfile.c
* 定義全局變數,並作為主調程序
*/
#include
int gVar_1 = 12;
extern asmDouble(void);
int main()
{
printf("original value of gVar_1 is: %d", gVar_1);
asmDouble();
printf(" modified value of gVar_1 is: %d", gVar_1);
return 0;
}
對應的匯編語言文件
;called by main(in C),to double an integer, a global var defined in C
is used.
AREA asmfile, CODE, READONLY
EXPORT asmDouble
IMPORT gVar_1
asmDouble
ldr r0, =gVar_1
ldr r1, [r0]
mov r2, #2
mul r3, r1, r2
str r3, [r0]
mov pc, lr
END
3. 在C中調用匯編的函數
在C中調用匯編文件中的函數,要做的主要工作有兩個,一是在
C中聲明函數原型,並加extern關鍵字;二是在匯編中用
EXPORT導出函數名,並用該函數名作為匯編代碼段的標識,最
後用mov pc, lr返回。然後,就可以在C中使用該函數了。從
C的角度,並不知道該函數的實現是用C還是匯編。更深的原因
是因為C的函數名起到表明函數代碼起始地址的左右,這個和匯
編的label是一致的。
/* cfile.c
* in C,call an asm function, asm_strcpy
* Sep 9, 2004
*/
#include
extern void asm_strcpy(const char *src, char *dest);
int main()
{
const char *s = "seasons in the sun";
char d[32];
asm_strcpy(s, d);
printf("source: %s", s);
printf(" destination: %s",d);
return 0;
}
;asm function implementation
AREA asmfile, CODE, READONLY
EXPORT asm_strcpy
asm_strcpy
loop
ldrb r4, [r0], #1 ;address increment after read
cmp r4, #0
beq over
strb r4, [r1], #1
b loop
over
mov pc, lr
END
在這里,C和匯編之間的參數傳遞是通過ATPCS(ARM
Thumb Procere Call Standard)的規定來進行的。簡單的說就
是如果函數有不多於四個參數,對應的用R0-R3來進行傳遞,多
於4個時藉助棧,函數的返回值通過R0來返回。
4. 在匯編中調用C的函數
在匯編中調用C的函數,需要在匯編中IMPORT 對應的C函數名
,然後將C的代碼放在一個獨立的C文件中進行編譯,剩下的工
作由連接器來處理。
;the details of parameters transfer comes from ATPCS
;if there are more than 4 args, stack will be used
EXPORT asmfile
AREA asmfile, CODE, READONLY
IMPORT cFun
ENTRY
mov r0, #11
mov r1, #22
mov r2, #33
BL cFun
END
/*C file, called by asmfile */
int cFun(int a, int b, int c)
{
return a + b + c;
}
在匯編中調用C的函數,參數的傳遞也是通過ATPCS來實現
的。需要指出的是當函數的參數個數大於4時,要藉助stack,具
體見ATPCS規范
D. 在嵌入式實際開發中用匯編語言多一些還是用c或者c++等高級語言多一些
當然是匯編了,匯編編出來的軟體大小要比C小些,不過要學匯編必須學C打好基礎,你說的C++等等語言都是從C語言基礎上發展的,當然你學的語言越多就越有用,匯編是目前最實用的編程語言了
E. C語言和嵌入式C語言有什麼區別
嵌入式C語言和C語言是完全一樣的,寫代碼上完全沒有區別。
區別在於嵌入式的C語言是跑在嵌入式的開發板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執行程序也是不一樣的。
學習嵌入式,該學習什麼基本的知識呢?
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式軟體開發的人,現在絕大部分都是用C語言,你說不掌握它可以嗎?至於如何學習C語言,我想這些基礎的知識每個人都有自己的方法,關鍵要去學習,看書也好,網上找些視頻看也好。很多人會問,C語言要學到怎麼樣,我覺得這沒有標準的答案。我想至少你在明白了一些基礎的概念後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬體的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關系,多看看,結合以後的項目經驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如0.12 的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
至於上面說的知識如何學習呢?每個人都應該去找自己最好的方法,所謂的最好的方法就是最適合自己的方法。很多人看不進書,那就去看看視頻吧。視頻也應該要選擇,不是隨便看看,應該要有所選擇,有所挑選。我也是這樣一路走過來的,不過我這人比較懶,我看不進書,一看書我就想睡覺,所以這幾年我都是看視頻過來的,現在也算學有所成,但也不敢說是高手吧。
我在網上看到,有人把自己學習嵌入式的視頻總結出來,嵌入式系列實踐和視頻教程,大家可以看看網址 我仔細看了覺得很不錯,我本來也想整理下,可是奈何我自己的電腦硬碟空間才40G,沒有辦法,時間也是不夠,心有餘而力不足,我不是在幫他做廣告,雖然要花錢,我覺得算不錯,至少自己不用去整理和花大量的時間去找資源,當然如果網上有的下,你網速和硬碟都夠的話,我建議大家自己網上下也好。想想我自己該開始學的時候,那時視頻資源少之又少,我買書和買視頻至少花了幾千塊,但是我覺得那很值,至少我現在賺回來了很多知識。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。送給大家一句簡單而又樸素的話,堅持就是勝利,貴在堅持,也可以看看如何堅持嵌入式學習
F. 嵌入式c語言和c語言的異同
嵌入式編程用的最多的也是C語言,和普通的windows下的C編程不同的就是,比如應用層開發,嵌入式開發出來的應用程序最終不是要運行在PC上
的,而是目標板。所以嵌入式開發就一定會有交叉編譯這個環節(簡單一點理解就是,在PC下編程,然後交叉編譯一下,讓程序能運行在PC外的其他平台上,比
如ARM開發板什麼的)
稍微做一下類比:
普通編程開發=====CPU(比如奔騰)=====windows操作系統
嵌入式開發=====嵌入式處理器(比如ARM)=====嵌入式操作系統(比如嵌入式linux、wince、vxworks等)
PC上如果沒有windows操作系統,那它就是一個DOS機。
嵌入式開發中如果沒有嵌入式操作系統,那它就是通常所說的單片機開發,嵌入式開發最初就是從單片機開發走過來的。
現在所說的嵌入式開發,通常都是指有嵌入式操作系統的那種,產品功能復雜了,單片機開發無法實現,需要用到嵌入式操作系統,也能體現出嵌入式操作系
統的優勢。
當然現在所講嵌入式開發和單片機開發的區別不僅僅在是否有嵌入式操作系統上,嵌入式開發所使用的嵌入式處理器(比如ARM
/
MIPS等)在內核體系結構、指令系統、工作模式等方面與單片機都有很大不同。
嵌入式產品在航空、醫療、家電、消費電子、汽車電子、移動等眾多領域都可以看到,應用領域極為廣泛,所以現在嵌入式開發相當熱門,並且具備非常好的發展前景!!
G. C語言與嵌入式
一個電子電器設備的操作運行,需要大量的人工接線或操作,這樣就需要花費大量的時間和精力,在現實的意義上是行不通的,為了解決這個問題,就為這個電子電器設備加入一個友好的簡單的操作平台,我們就操作這個友好熟悉的平台,讓它處理復雜繁瑣的數據處理或將人們的所需要的功能翻譯成實際的操作。
而這種為電子電器設備加入這個操作平台的技術就是嵌入式。比如,一個空調,有風速多個等級,有換氣,有溫度調整,有定時,有擺風這么多功能,當然你可以准備數10個開關來控制,但是這樣即不方便,也花費時間,不切實際,但是如果為它架一個操作平台,直觀簡單,這樣你就可以按照遙控器的鍵盤和顯示指導進行方便的控制,這就是一個簡單的例子,當然這個屬於簡單的,像手機,媒體播放器,那才是復雜,特別是智能手機更是如此,在數據處理上是數以億計的。
H. 談談匯編語言,c和c++三種語言在嵌入式開發中的區別和特點
嵌入式方面,大部分驅動或者是內核開發
這三種語言,匯編,c++
越低級的語言,效率越高,越高級的語言,開發周期越短,就這樣
比如啟動代碼,非得用匯編寫,之後為c建立好堆棧,分配好內存,然後c引導就可以了
如果說c語言的結構體滿足不了一些功能,比如窗口的事件,以及一些操作,自然會用到c++
I. c語言和嵌入式c語言有什麼區別
嵌入式C語言和C語言是完全一樣的,寫代碼上完全沒有區別。下面由卓躍教育為您介紹它們兩者間的區別。
區別在於嵌入式的C語言是跑在嵌入式的開發板上的,CPU和我們電腦不一樣,所以編譯器也是不一樣的,生成的可執行程序也是不一樣的。
首先C語言,這個是毋庸置疑的,不管是做嵌入式軟體還是硬體開發的人員,對C語言的掌握這個是必需的,特別是對於以後致力於嵌入式
後,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。
其次,應該對操作系統有所了解,這對你對硬體和軟體的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統
驗,會有更好的理解的。
還有應該學習嵌入式系統,如linux或者wince下的編程,這些對以後做應用的編程很有幫助,當然,如果做手機的話,那可以學習MTK、塞
班、Android等操作系統,Android是以後發展的趨勢,現在很熱門,Android也是基於linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者ARM或者MIPS,很多人說我沒有單片機的經驗,直接學ARM可以嗎?我覺得那完全沒有問題的,當然如果你學
習過單片機,那最好不過了,以後學習ARM就更簡單了。
最後如果你把以上的知識都有所了解後,就該去閱讀閱讀一些優秀的代碼,比如結合arm晶元手冊學習去學習下UBOOT的源代碼,了解下最
小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會
很痛苦的,可以先看看linux代碼早期的版本,比如0.12的代碼等等,麻雀雖小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
最後,希望這篇文章對熱愛嵌入式,想致力於嵌入式開發的朋友有所幫助。
J. 嵌入式學習主要用的是c語言還是匯編語言啊
嵌入式主要學習的是嵌入式c/c++。我學的就是嵌入式,順便就給你答了。匯編語言主要是用於底層開發,如果你到時候做的是底層開發的話也要學習的