1、 嵌入式系統的主要組成部分
1)硬體裝置;2)嵌入式作業系統;3)應用軟體;2、一條語句實現「判斷乙個數x為2的 n 次冪」
if(x&(x-1)==0)3、linux系統的裝置分類
1)字元裝置;2)塊裝置;3)網路裝置;4、c語言運算子優先順序
同一優先順序的運算子,運算次序由結合方向所決定。5、strcpy(s1,s2)字串處理函式優先順序
運算子名稱或含義
使用形式
結合方向
說明陣列下標
陣列名[常量表示式]
左到右圓括號
(表示式)/函式名(形參表)
成員選擇(物件)
物件.成員名
成員選擇(指標)
物件指標->成員名
負號運算子
-表示式
右到左單目運算子
(型別)
強制型別轉換
(資料型別)表示式
自增運算子
++變數名/變數名++
單目運算子
自減運算子
--變數名/變數名--
單目運算子
取值運算子
*指標變數
單目運算子
取位址運算子
&變數名
單目運算子
邏輯非運算子
!表示式
單目運算子
按位取反運算子
~表示式
單目運算子
sizeof
長度運算子
sizeof(表示式)
除表示式/表示式
左到右雙目運算子
乘表示式*表示式
雙目運算子
餘數(取模)
整型表示式/整型表示式
雙目運算子
加表示式+表示式
左到右雙目運算子
減表示式-表示式
雙目運算子
左移變數《表示式
左到右雙目運算子
右移變數》表示式
雙目運算子
大於表示式》表示式
左到右雙目運算子
大於等於
表示式》=表示式
雙目運算子
小於表示式《表示式
雙目運算子
小於等於
表示式<=表示式
雙目運算子
等於表示式==表示式
左到右雙目運算子
不等於表示式!= 表示式
雙目運算子
按位與表示式&表示式
左到右雙目運算子
按位異或
表示式^表示式
左到右雙目運算子
按位或表示式|表示式
左到右雙目運算子
邏輯與表示式&&表示式
左到右雙目運算子
邏輯或表示式||表示式
左到右雙目運算子
條件運算子
表示式1? 表示式2: 表示式3
右到左三目運算子
賦值運算子
變數=表示式
右到左除後賦值
變數/=表示式
乘後賦值
變數*=表示式
取模後賦值
變數%=表示式
加後賦值
變數+=表示式
減後賦值
變數-=表示式
左移後賦值
變數<<=表示式
右移後賦值
變數》=表示式
按位與後賦值
變數&=表示式
按位異或後賦值
變數^=表示式
按位或後賦值
變數|=表示式
逗號運算子
表示式,表示式,…
左到右從左向右順序運算
void getmemory( char *p )6、sizeof與strlenvoid 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 )
1)、sizeofshort (array[5])[2][3];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;
cout結果為:60 12 6 2
7、linux核心中的鍊錶與普通的鍊錶有什麼區別
核心鍊錶是乙個雙向鍊錶,但是與普通的雙向鍊錶又有所區別。核心鍊錶中的鍊錶元素不與特定型別相關,具有通用性。8、arm指令集中的除法運算kernel list展示的是核心鍊錶的結構,normallist展示的是普通鍊錶的結構。head是煉表頭,p1,p2,p3是鍊錶節點。從圖中可以看出普通鍊錶的p1的next指標是指向的結構體p2的位址,p2的pre指標指向p1結構體的位址。而核心鍊錶的p1的next指向的是p2結構體中包含pre和next部分的位址,的p2的pre指向的是p1結構體中包含pre和next部分的位址。依此類推,這就是區別。核心結構元素不與特定型別結構相關,任何結構體都可通過核心的新增成為鍊錶中的節點。
在嵌入式軟體程式設計中,為了節省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指當串列埠輸出緩衝區滿,或剩下的空間小於將要寫入的位元...