色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>博文分享 | 嵌入式常見筆試題收集

博文分享 | 嵌入式常見筆試題收集

2021-01-26 | pdf | 139.17KB | 次下載 | 2積分

資料介紹

一、系統(tǒng)相關(guān)

波特率

1)定義:

波特率表示每秒鐘傳送的碼元符號的個數(shù),是衡量數(shù)據(jù)傳送速率的指標(biāo),它用單位時間內(nèi)載波調(diào)制狀態(tài)改變的次數(shù)來表示。

信息傳輸通道中,攜帶數(shù)據(jù)信息的信號單元叫碼元,每秒鐘通過信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡稱波特率。波特率是傳輸通道頻寬的指標(biāo)。

2)計算:

波特率115200 = 115200 (位/秒)

以最普通的串口(起始位+8位數(shù)據(jù)+停止位)為例:

除以10,得到的是每秒字節(jié)數(shù):
波特率115200 = 115200 (位/秒) = 11520 (字節(jié)/秒)

再除以 1024,就是每秒 KB 數(shù):
波特率115200 = 115200 (位/秒) = 11.25 (KB/秒)

如果有一位奇偶校驗位,就應(yīng)該除以 11,得到的是每秒字節(jié)數(shù)。

最后:

波特率115200 = 115200 (位/秒) = 10.27 (KB/秒)

備注:

二進(jìn)制環(huán)境下,波特率 = 比特率。

哈佛結(jié)構(gòu)

哈佛結(jié)構(gòu)是一種將程序指令存儲和數(shù)據(jù)存儲分開的存儲器結(jié)構(gòu),它的主要特點是將程序和數(shù)據(jù)存儲在不同的存儲空間中,即程序存儲器和數(shù)據(jù)存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問,目的是為了減輕程序運行時的訪存瓶頸。

程序指令儲存和數(shù)據(jù)儲存分開,數(shù)據(jù)和指令的儲存可以同時進(jìn)行,可以使指令和數(shù)據(jù)有不同的數(shù)據(jù)寬度,如Microchip公司PIC16芯片的程序指令是14位寬度,而數(shù)據(jù)是8位寬度。

其中,51單片機(jī)stm32都為哈佛結(jié)構(gòu)。

馮諾依曼結(jié)構(gòu)

馮·諾依曼結(jié)構(gòu),又稱為普林斯頓體系結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結(jié)構(gòu)。取指令和取操作數(shù)都在同一總線上,通過分時復(fù)用的方式進(jìn)行;缺點是在高速運行時,不能達(dá)到同時取指令和取操作數(shù),從而形成了傳輸過程的瓶頸。由于程序指令存儲地址和數(shù)據(jù)存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同。

其中,msp430ARM7、freescale等單片機(jī)為馮諾依曼結(jié)構(gòu)。

改進(jìn)型哈佛結(jié)構(gòu)

改進(jìn)型哈佛結(jié)構(gòu)雖然也使用兩個不同的存儲器:程序存儲器和數(shù)據(jù)存儲器,但它把兩個存儲器的地址總線合并了,數(shù)據(jù)總線也進(jìn)行了合并,即原來的哈佛結(jié)構(gòu)需要4條不同的總線,改進(jìn)后需要兩條總線。

ARM處理器的工作模式

一個程序運行在不同的模式下面的時候,能夠運行的ARM處理器的指令是不一樣的,能夠訪問的ARM處理器的寄存器都是不一樣的。這些模式為:

特權(quán)模式

除用戶模式外,其它模式均為特權(quán)模式(Privileged ModesARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。

異常模式

特權(quán)模式中除系統(tǒng)(system)模式之外的其他5種模式又統(tǒng)稱為異常模式。它們除了可以通過在特權(quán)下的程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。比如硬件產(chǎn)生中斷信號進(jìn)入中斷異常模式,讀取沒有權(quán)限數(shù)據(jù)進(jìn)入中止異常模式,執(zhí)行未定義指令時進(jìn)入未定義指令中止異常模式。其中管理模式也稱為超級用戶模式,是為操作系統(tǒng)提供軟中斷的特有模式,正是由于有了軟中斷,用戶程序才可以通過系統(tǒng)調(diào)用切換到管理模式。

硬件權(quán)限級別:系統(tǒng)模式 > 異常模式 > 用戶模式

對于Linux而言,一般的應(yīng)用程序運行在User模式,而Linux內(nèi)核運行在SVC模式,即Supervisor模式

(1)用戶模式:

用戶模式是用戶程序的工作模式,它運行在操作系統(tǒng)的用戶態(tài),它沒有權(quán)限去操作其它硬件資源,只能執(zhí)行處理自己的數(shù)據(jù),也不能切換到其它模式下,要想訪問硬件資源或切換到其它模式只能通過軟中斷或產(chǎn)生異常。

(2)系統(tǒng)模式:

系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。用戶模式和系統(tǒng)模式共用一套寄存器,操作系統(tǒng)在該模式下可以方便的訪問用戶模式的寄存器,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個模式訪問一些受控的資源。

說明:用戶模式與系統(tǒng)模式兩者使用相同的寄存器,都沒有SPSR(Saved Program Statement Register,已保存程序狀態(tài)寄存器),但系統(tǒng)模式比用戶模式有更高的權(quán)限,可以訪問所有系統(tǒng)資源。

(3)一般中斷模式:

一般中斷模式也叫普通中斷模式,用于處理一般的中斷請求,通常在硬件產(chǎn)生中斷信號之后自動進(jìn)入該模式,該模式為特權(quán)模式,可以自由訪問系統(tǒng)硬件資源。

(4)快速中斷模式:

快速中斷模式是相對一般中斷模式而言的,它是用來處理對時間要求比較緊急的中斷請求,主要用于高速數(shù)據(jù)傳輸及通道處理中。

(5)管理模式(Supervisor,SVC):

管理模式是CPU上電后默認(rèn)模式,因此在該模式下主要用來做系統(tǒng)的初始化,軟中斷處理也在該模式下。當(dāng)用戶模式下的用戶程序請求使用硬件資源時,通過軟件中斷進(jìn)入該模式。

說明:系統(tǒng)復(fù)位或開機(jī)、軟中斷時進(jìn)入到SVC模式下。

(6)終止模式:

中止模式用于支持虛擬內(nèi)存或存儲器保護(hù),當(dāng)用戶程序訪問非法地址,沒有權(quán)限讀取的內(nèi)存地址時,會進(jìn)入該模式,linux下編程時經(jīng)常出現(xiàn)的segment fault通常都是在該模式下拋出返回的。

(7)未定義模式:

未定義模式用于支持硬件協(xié)處理器的軟件仿真,CPU在指令的譯碼階段不能識別該指令操作時,會進(jìn)入未定義模式。

流水線機(jī)制

傳統(tǒng)的單片機(jī)(如8051)中,處理器只有完成一條指令的讀取和執(zhí)行后,才會開始下一條指令的處理,所以PC(程序計數(shù)器)總是指向正在執(zhí)行的指令。而ARM體系架構(gòu)中則引入了流水線的概念。

到ARM7為止的ARM處理器使用了簡單的三級流水線。三級流水線使用三個工位,將指令的處理分為三個階段,分別為取指、譯碼和執(zhí)行。取指:從存儲器中裝載;譯碼:識別將要被執(zhí)行的指令;執(zhí)行:處理指令并將結(jié)果寫回寄存器。

Cortex-A9架構(gòu)基于先進(jìn)的推測型八級流水線

同步通信和異步通信

(1)同步通信要求接收端時鐘頻率和發(fā)送端時鐘頻率一致,發(fā)送端發(fā)送連續(xù)的比特流;異步通信時不要求接收端時鐘和發(fā)送端時鐘同步,發(fā)送端發(fā)送完一個字節(jié)后,可經(jīng)過任意長的時間間隔再發(fā)送下一個字節(jié)。
(2)同步通信效率高;異步通信效率較低。
(3)同步通信較復(fù)雜,雙方時鐘的允許誤差較??;異步通信簡單,雙方時鐘可允許一定誤差。
(4)同步通信可用于點對多點;異步通信只適用于點對點。同步是阻塞模式,異步是非阻塞模式。

異步通信:異步通信中的接收方并不知道數(shù)據(jù)什么時候會到達(dá),收發(fā)雙方可以有各自自己的時鐘。發(fā)送方發(fā)送的時間間隔可以不均,接收方是在數(shù)據(jù)的起始位和停止位的幫助下實現(xiàn)信息同步的。這種傳輸通常是很小的分組,比如一個字符為一組,為這個組配備起始位和結(jié)束位。所以這種傳輸方式的效率是比較低的,畢竟額外加入了很多的輔助位作為負(fù)載,常用在低速的傳輸中。典型通信為串口通信。

同步通信:同步通信中雙方使用頻率一致的時鐘,它的分組相比異步則大得多,稱為一個數(shù)據(jù)幀,通過獨特的bit串作為啟停標(biāo)識。發(fā)送方要以固定的節(jié)奏去發(fā)送數(shù)據(jù),而接收方要時刻做好接收數(shù)據(jù)的準(zhǔn)備,識別到前導(dǎo)碼后馬上要開始接收數(shù)據(jù)了。同步這種方式中因為分組很大,很長一段數(shù)據(jù)才會有額外的輔助位負(fù)載,所以效率更高,更加適合對速度要求高的傳輸,當(dāng)然這種通信對時序的要求也更高。典型通信為:SPI和IIC。

軟實時和硬實時

硬實時與軟實時之間最關(guān)鍵的差別在于,軟實時只能提供統(tǒng)計意義上的實時。例如,有的應(yīng)用要求系統(tǒng)在95%的情況下都會確保在規(guī)定的時間內(nèi)完成某個動作,而不一定要求100%。在許多情況下,這樣的“軟性”正確率已經(jīng)可以達(dá)到用戶期望的水平。比如,用戶在操作DVD播放機(jī)時,只要98%的情況都能正常播放,用戶可能就滿意了;而發(fā)射衛(wèi)星、控制核反應(yīng)堆的應(yīng)用系統(tǒng),這些系統(tǒng)的實時性必須達(dá)到100%,是絕對不允許出現(xiàn)意外。

ARM體系的CPU兩種工作狀態(tài)

ARM狀態(tài):arm處理器工作于32位指令的狀態(tài),所有指令均為32位。

THumb狀態(tài):arm執(zhí)行16位指令的狀態(tài),即16位狀態(tài)。

THumb指令集是arm指令集的一個子集,是針對代碼密度問題而提出的,它具有16位的代碼寬度。與等價的32位代碼相比較,THumb指令集在保留32位代碼優(yōu)勢的同時,大大的節(jié)省了系統(tǒng)的存儲空間。

另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令。

Linux文件權(quán)限

權(quán)限數(shù)字對應(yīng)權(quán)限組說明:

總共分為4部分

【文件或文件夾】【owner權(quán)限】【group權(quán)限】【others權(quán)限】

【文件是-,文件夾是d】【r/w/x相加】【r/w/x相加】【r/w/x相加】

如 chmod 777 xxx.xxx 就是說xxx文件的權(quán)限為可讀可寫可執(zhí)行且對所有用戶有效。

ls -l a 查看a文件的權(quán)限

二、軟件相關(guān)

各種變量類型所占內(nèi)存

大端小端問題

所謂的大端模式,就是高位字節(jié)排放在內(nèi)存的低地址端,低位字節(jié)排放在內(nèi)存的高地址端。(ARM)

所謂的小端模式,就是低位字節(jié)排放在內(nèi)存的低地址端,高位字節(jié)排放在內(nèi)存的高地址端。(x86平臺、c51)

小端模式 :強制轉(zhuǎn)換數(shù)據(jù)不需要調(diào)整字節(jié)內(nèi)容,1、2、4字節(jié)的存儲方式一樣。
大端模式 :符號位的判定固定為第一個字節(jié),容易判斷正負(fù)。

判斷大小端:

#include 
#include 
 
typedef union{
	short a; //定義一個short變量,因為它所占字節(jié)數(shù)為2,便于與長度為2的char數(shù)組內(nèi)存對齊 
	char b[2];//定義一個char數(shù)組,因為char變量所占字節(jié)數(shù)為1,char[2]就是長度為2了 
}test;


int main(int argc, char *argv[]) {
    test ut;
 
	ut.a = 0x1234; 
	
	printf("ut.b[0]:%02x/r/n",ut.b[0]);//若打印0x12即為小端,打印出0x34則為大端 
	printf("ut.b[1]:%02x/r/n",ut.b[1]);
	printf("ut:%d/r/n",sizeof(ut));
	return 0;    
}

大小端轉(zhuǎn)換實例:

//16位
 
#define BSWAP_16(x) /
(uint_16)((((uint_16)(x) & 0x00ff) <<8) | /
 
(((uint_16)(x) & 0xff00) >> 8) /
 
)

volatile關(guān)鍵詞

volatile是一個類型修飾符(type specifier),就像我們熟悉的const一樣,它是被設(shè)計用來修飾被不同線程訪問和修改的變量;volatile的作用是作為指令關(guān)鍵字,確保本條指令不會因編譯器的優(yōu)化而省略,且要求每次直接讀值。

簡單地說就是防止編譯器對代碼進(jìn)行優(yōu)化。

例如,在多線程,或者是存在中斷的場景下:

buff[0]=0x01;
buff[0]=0x02;
buff[0]=0x03;
buff[0]=0x04;

編譯器可能會將上面4行代碼優(yōu)化為1行 buff[0]=0x04;

但是,可能我們想要的結(jié)果就是需要連續(xù)運行著四段代碼,因為有可能在另外的線程或中斷訪問buff[0]時,我們需要得到一個實時的結(jié)果,可能是0x01,也可能是0x03,但如果不加volatile關(guān)鍵詞,可能得到的值永遠(yuǎn)都是0x04。

do{}while(0)的技巧用法

(1)在后面要加分號,使調(diào)用如同函數(shù)

在定義宏后,使用do{}while(0)如果不加分號會直接報錯

(2)避免括號等使用因素對實際運行造成影響

例如,定義一個宏:

#define foo(x) bar(x); baz(x)

然后你可能這樣調(diào)用:

foo(wolf);

這將被宏擴(kuò)展為:

bar(wolf); baz(wolf);

這的確是我們期望的正確輸出。下面看看如果我們這樣調(diào)用:

if (!feral)
    foo(wolf);

那么擴(kuò)展后可能就不是你所期望的結(jié)果。上面語句將擴(kuò)展為:

if (!feral)
    bar(wolf);
baz(wolf);

顯而易見,這是錯誤的。如果使用do while寫法即可避免這個問題:

if (!feral)
    do { bar(wolf); baz(wolf); } while (0);

等價于:

if (!feral) {
    bar(wolf);
    baz(wolf);
}

(3)避免空宏引起的warning

內(nèi)核中由于不同架構(gòu)的限制,很多時候會用到空宏,在編譯的時候,空宏會給出warning,為了避免這樣的warning,就可以使用do{}while(0)來定義空宏:

#define EMPTYMICRO do{}while(0)

(4)避免使用goto對程序流進(jìn)行統(tǒng)一的控制

有些函數(shù)中,在函數(shù)return之前我們經(jīng)常會進(jìn)行一些收尾的工作,比如free掉一塊函數(shù)開始malloc的內(nèi)存,goto一直都是一個比較簡便的方法:

int foo()
{
    somestruct* ptr = malloc(...);
 
    dosomething...;
    if(error)
    {
        goto END;
    }
 
    dosomething...;
    if(error)
    {
        goto END;
    }
    dosomething...;
 
END:
    free(ptr);
    return 0;
 
}

由于goto不符合軟件工程的結(jié)構(gòu)化,而且有可能使得代碼難懂,所以很多人都不倡導(dǎo)使用,那這個時候就可以用do{}while(0)來進(jìn)行統(tǒng)一的管理:

int foo()
{
 
    somestruct* ptr = malloc(...);
 
    do{
        dosomething...;
        if(error)
        {
            break;
        }
 
        dosomething...;
        if(error)
        {
            break;
        }
        dosomething...;
    }while(0);
 
    free(ptr);
    return 0;
 
}

這里將函數(shù)主體使用do()while(0)包含起來,使用break來代替goto,后續(xù)的處理工作在while之后,就能夠達(dá)到同樣的效果。

(5)定義一個單獨的函數(shù)塊來實現(xiàn)復(fù)雜的操作:

當(dāng)你的功能很復(fù)雜,變量很多你又不愿意增加一個函數(shù)的時候,使用do{}while(0);,將你的代碼寫在里面,里面可以定義變量而不用考慮變量名會同函數(shù)之前或者之后的重復(fù)。

版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/sinat_30146065/article/details/105428988



下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機(jī)窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 日本不卡三卡四卡| 九九99国产香蕉视频| 亚洲精品乱码久久久久久中文字幕| 另类欧美尿交| 国产亚洲AV精品无码麻豆| bbw美女与zooxx| 一本道无码字幕在线看| 天美传媒果冻传媒入口视频| 久久在精品线影院| 国产蜜臀AV在线一区视频| jzz大全18| 诱人的秘书BD在线观看| 消息称老熟妇乱视频一区二区| 琪琪午夜福利免费院| 快播理伦片| 黄页网址大全免费观看| 国产国产乱老熟视频网站| old胖老太fat bbw青年| 2021精品高清卡1卡2卡3麻豆| 亚洲AV久久婷婷蜜臀无码不卡| 欧美一区二区在线观看| 久青草影院| 精品亚洲欧美中文字幕在线看| 国产成a人片在线观看视频99| www.青青草| 99久久婷婷国产麻豆精品电影| 一本道手机无码在线看| 亚洲国产剧情中文视频在线| 同房交换4p好爽| 深夜释放自己污在线看| 日韩精品 中文字幕 有码| 女教师の诱惑| 嗯别插太快好深再深点| 免费国产综合视频在线看| 久久伊人电影| 久久久久毛片免费观看| 久草在线一免费新视频| 狠狠婷婷综合久久久久久| 国内精品不卡一区二区三区| 国产亚洲国际精品福利| 国产亚洲精品久久久久久久软件 |