嵌入式軟體開發 必須掌握的知識點(二)

2021-06-01 02:36:48 字數 3946 閱讀 3526

1、 嵌入式系統的主要組成部分

1)硬體裝置;2)嵌入式作業系統;3)應用軟體;

2、一條語句實現「判斷乙個數x為2的 n 次冪」

if(x&(x-1)==0)

3、linux系統的裝置分類

1)字元裝置;2)塊裝置;3)網路裝置;

4、c語言運算子優先順序

同一優先順序的運算子,運算次序由結合方向所決定。

優先順序

運算子名稱或含義

使用形式

結合方向

說明陣列下標

陣列名[常量表示式]

左到右圓括號

(表示式)/函式名(形參表)

成員選擇(物件)

物件.成員名

成員選擇(指標)

物件指標->成員名

負號運算子

-表示式

右到左單目運算子

(型別)

強制型別轉換

(資料型別)表示式

自增運算子

++變數名/變數名++

單目運算子

自減運算子

--變數名/變數名--

單目運算子

取值運算子

*指標變數

單目運算子

取位址運算子

&變數名

單目運算子

邏輯非運算子

!表示式

單目運算子

按位取反運算子

~表示式

單目運算子

sizeof

長度運算子

sizeof(表示式)

除表示式/表示式

左到右雙目運算子

乘表示式*表示式

雙目運算子

餘數(取模)

整型表示式/整型表示式

雙目運算子

加表示式+表示式

左到右雙目運算子

減表示式-表示式

雙目運算子

左移變數《表示式

左到右雙目運算子

右移變數》表示式

雙目運算子

大於表示式》表示式

左到右雙目運算子

大於等於

表示式》=表示式

雙目運算子

小於表示式《表示式

雙目運算子

小於等於

表示式<=表示式

雙目運算子

等於表示式==表示式

左到右雙目運算子

不等於表示式!= 表示式

雙目運算子

按位與表示式&表示式

左到右雙目運算子

按位異或

表示式^表示式

左到右雙目運算子

按位或表示式|表示式

左到右雙目運算子

邏輯與表示式&&表示式

左到右雙目運算子

邏輯或表示式||表示式

左到右雙目運算子

條件運算子

表示式1? 表示式2: 表示式3

右到左三目運算子

賦值運算子

變數=表示式

右到左除後賦值

變數/=表示式

乘後賦值

變數*=表示式

取模後賦值

變數%=表示式

加後賦值

變數+=表示式

減後賦值

變數-=表示式

左移後賦值

變數<<=表示式

右移後賦值

變數》=表示式

按位與後賦值

變數&=表示式

按位異或後賦值

變數^=表示式

按位或後賦值

變數|=表示式

逗號運算子

表示式,表示式,…

左到右從左向右順序運算

5、strcpy(s1,s2)字串處理函式

void getmemory( char *p )

void test( void )

getmemory( char *p )函式的形參為字串指標,在函式內部修改形參並不能真正的改變傳入形參的值,執行完

char *str = null;

getmemory( str );

後的str仍然為null;

void getmemory( char **p, int num )

void test( void )

傳入getmemory的引數為字串指標的指標,但是在getmemory中執行申請記憶體及賦值語句

*p = (char *) malloc( num );

後未判斷記憶體是否申請成功,應加上:

if ( *p == null )

6、sizeof與strlen

1)、sizeof

sizeof(...)是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。

它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。

由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容沒有關係。

具體而言,當引數分別如下時,sizeof返回的值表示的含義如下:

陣列——編譯時分配的陣列空間大小;

指標——儲存該指標所用的空間大小(儲存該指標的位址的長度,是長整型,應該為4);

型別——該型別所佔的空間大小;

物件——物件的實際占用空間大小;

函式——函式的返回型別所佔的空間大小。函式的返回型別不能是void。

**************

2)、strlen

strlen(...)是函式,要在執行時才能計算。引數必須是字元型指標(char*)。當陣列名作為引數傳入時,實際上陣列就退化成指標了。

它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第乙個位址開始遍歷,直到遇到結束符null。返回的長度大小不包括null。

char str[20]="0123456789";

int a=strlen(str); //a=10;

int b=sizeof(str); //而b=20;

short (array[5])[2][3];

cout結果為:60  12  6  2

7、linux核心中的鍊錶與普通的鍊錶有什麼區別

核心鍊錶是乙個雙向鍊錶,但是與普通的雙向鍊錶又有所區別。核心鍊錶中的鍊錶元素不與特定型別相關,具有通用性。

kernel list展示的是核心鍊錶的結構,normallist展示的是普通鍊錶的結構。head是煉表頭,p1,p2,p3是鍊錶節點。從圖中可以看出普通鍊錶的p1的next指標是指向的結構體p2的位址,p2的pre指標指向p1結構體的位址。而核心鍊錶的p1的next指向的是p2結構體中包含pre和next部分的位址,的p2的pre指向的是p1結構體中包含pre和next部分的位址。依此類推,這就是區別。核心結構元素不與特定型別結構相關,任何結構體都可通過核心的新增成為鍊錶中的節點。

8、arm指令集中的除法運算

在嵌入式軟體程式設計中,為了節省cpu執行時間,應盡可能避免使用除法。對環形緩衝區的處理可以不用除法。如果不能避免除法運算,那麼應盡可能使用除法程式同時產生商n/d和餘數n%d的好處。對於重複對一除數d的除法.預先計算好s=(2k一1)/d,用乘以s的2k位乘法來代替除以d的k位無符號整數除法,可大大減少由於直接使用除法操作引入的指令週期數

嵌入式軟體開發 必須掌握的知識點(三)

1 arm處理器中的浮點運算 浮點運算是指浮點數參與的運算,這種運算通常伴隨著因為無法精確表示而進行的近似或捨入。乙個浮點數a由兩個數m和e來表示 a m b e。在任意乙個這樣的系統中,我們選擇乙個基數b 記數系統的基 和精度p 即使用多少位來儲存 m 即尾數 是形如 d.ddd.ddd的p位數 ...

嵌入式軟體開發需要學習的知識點

本來對於嵌入式開發的要求就比較高,學員選擇嵌入式軟體開發應該也是深思熟慮的結果,那麼在這裡如果你在掌握了嵌入式軟體開發的知識點的話,你就真的事半功倍了,下面一起來了解下嵌入式軟體開發需要學習的知識點吧。嵌入式開發的門檻相對較高,對程式設計師的要求一般都是對底層感興趣,學習能力 動手能力要強,對問題能...

嵌入式Linux開發知識點

1.阻塞和非阻塞的區別 阻塞的定義 對於read,block指當串列埠輸入緩衝區沒有資料的時候,read函式將會阻塞在這裡,移植到串列埠輸入緩衝區中有資料可讀取,read讀到了需要的位元組數之後,返回值為讀到的位元組數 對於write,block指當串列埠輸出緩衝區滿,或剩下的空間小於將要寫入的位元...