版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
附錄練習(xí)題及解答一、編程類:1.寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。#defineMIN(A,B)((A)<=(B)?(A):(B))這個(gè)測(cè)試是為下面的目的而設(shè)的:(1)標(biāo)識(shí)#define在宏中應(yīng)用的基本知識(shí)。這是很重要的,因?yàn)橹钡角度?inline)操作符變?yōu)闃?biāo)準(zhǔn)C的一部分,宏是方便產(chǎn)生嵌入代碼的唯一方法,對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),為了能達(dá)到要求的性能,嵌入代碼經(jīng)常是必須的方法。(2)三重條件操作符的知識(shí)。這個(gè)操作符存在C語(yǔ)言中的原因是它使得編譯器能產(chǎn)生比if-then-else更優(yōu)化的代碼。(3)懂得在宏中小心地把參數(shù)用括號(hào)括起來(lái).預(yù)處理器標(biāo)識(shí)#eiror的目的是什么?#error是C/C++語(yǔ)言預(yù)處理命令之一,當(dāng)預(yù)處理器預(yù)處理到#error命令時(shí),將停止編譯并輸出用戶自定義的錯(cuò)誤消息。其中如果是C語(yǔ)言編輯器則執(zhí)行#error命令,如果是C++命令則跳過(guò)該命令。用來(lái)主動(dòng)的檢測(cè)不合規(guī)范的情況并提示報(bào)錯(cuò)。terror停止編譯并顯示錯(cuò)誤信息例如,使用C編譯器:ttifndef_cplusplusterrorttendifttinclude<stdio.h>intmain(){printf("Hello,World!〃);return0;).內(nèi)核有很多do……while(O);有何作用?do……while(O)用于避免在C中宏定義被展開時(shí)導(dǎo)致出錯(cuò)的問(wèn)題。例如:ttdefineexch(x,y){inttmp;tmp=x;x=y;y=tmp;}if(x>y)Exch(x,y);elsedo_something();展開:if(x>y){在Linux機(jī)器上,CPU要么處于受信任的內(nèi)核模式,要么處于受限制的用戶模式。除了內(nèi)核本身處于內(nèi)核模式以外,所有的用戶進(jìn)程都運(yùn)行在用戶模式之中。內(nèi)核模式的代碼可以無(wú)限制地訪問(wèn)所有處理器指令集以及全部?jī)?nèi)存和10空間。如果用戶模式的進(jìn)程要享有此特權(quán),它必須通過(guò)系統(tǒng)調(diào)用向設(shè)備驅(qū)動(dòng)程序或其他內(nèi)核模式的代碼發(fā)出請(qǐng)求。另外,用戶模式的代碼允許發(fā)生缺頁(yè),而內(nèi)核模式的代碼則不允許。在2.4和更早的內(nèi)核中,僅僅用戶模式的進(jìn)程可以被上下文切換出局,由其他進(jìn)程搶占。除非發(fā)生以下兩種情況,否則內(nèi)核模式代碼可以一直獨(dú)占CPU:⑴它自愿放棄CPU;(2)發(fā)生中斷或異常。2.6內(nèi)核引入了內(nèi)核搶占,大多數(shù)內(nèi)核模式的代碼也可以被搶占。15.怎樣申請(qǐng)大塊內(nèi)核內(nèi)存?在Linux內(nèi)核環(huán)境下,申請(qǐng)大塊內(nèi)存的成功率隨著系統(tǒng)運(yùn)行時(shí)間的增加而減少,雖然可以通過(guò)vmalloc系列調(diào)用申請(qǐng)物理不連續(xù)但虛擬地址連續(xù)的內(nèi)存,但畢竟其使用效率不高且在32位系統(tǒng)上vmalloc的內(nèi)存地址空間有限。所以,一般的建議是在系統(tǒng)啟動(dòng)階段申請(qǐng)大塊內(nèi)存,但是其成功的概率也只是比較高而已,而不是100虬如果程序真的比較在意這個(gè)申請(qǐng)的成功與否,只能退用“啟動(dòng)內(nèi)存"(BootMemoi^y)。下面就是申請(qǐng)并導(dǎo)出啟動(dòng)內(nèi)存的一段示例代碼:void*xbootmeni=NULL;EXPORT_SYMBOL(x_bootmem);unsignedlongx_bootmeni_size=0;EXPORTSYMBOL(xbootmemsize);staticint_initx_bootmem_setup(char*str)(x_bootmem_size=memparse(str,&str);x_bootmem=alloc_bootmem(x_bootmem_size);printk(''Reserved%lubytesfrom%pforx\n〃,x_bootmem_size,x_bootmem);return1;)_setup('x-bootmem=〃,x_bootmem_setup);可見其應(yīng)用還是比較簡(jiǎn)單的,不過(guò)利弊總是共生的,它不可避免也有其自身的限制:內(nèi)存申請(qǐng)代碼只能連接進(jìn)內(nèi)核,不能在模塊中使用。被申請(qǐng)的內(nèi)存不會(huì)被頁(yè)分配器和slab分配器所使用和統(tǒng)計(jì),也就是說(shuō)它處于系統(tǒng)的可見內(nèi)存之外,即使在將來(lái)的某個(gè)地方你釋放了它。一般用戶只會(huì)申請(qǐng)一大塊內(nèi)存,如果需要在其上實(shí)現(xiàn)復(fù)雜的內(nèi)存管理則需耍自己實(shí)現(xiàn)。在不允許內(nèi)存分配失敗的場(chǎng)合,通過(guò)啟動(dòng)內(nèi)存預(yù)留內(nèi)存空間將是我們唯一的選擇。五、驅(qū)動(dòng)類:.驅(qū)動(dòng)中異步通知是基于信號(hào)實(shí)現(xiàn)的。.misc類型主設(shè)備號(hào)是10;input類型的主設(shè)備號(hào)是13o.輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動(dòng)層、輸入子系統(tǒng)核心層和輸入子系統(tǒng)事件處理層組成。.觸摸屏驅(qū)動(dòng)中兩個(gè)重要的中斷是按下,彈起中斷和AD轉(zhuǎn)換完畢之后產(chǎn)生的中斷。.簡(jiǎn)述字符設(shè)備與塊設(shè)備的區(qū)別:參考答案:(1)塊設(shè)備只能以塊為單位接受輸入和返回輸出,而字符設(shè)備則以字節(jié)為單位。大多數(shù)設(shè)備是字符設(shè)備,因?yàn)樗鼈儾恍枰彌_而且不以固定塊大小進(jìn)行操作。(2)塊設(shè)備對(duì)于10請(qǐng)求有對(duì)應(yīng)的緩沖區(qū),因此它們可以選擇以什么順序進(jìn)行響應(yīng),字符設(shè)備無(wú)需緩沖且被直接讀寫。對(duì)于存儲(chǔ)設(shè)備而言調(diào)整讀寫的順序作用巨大,因?yàn)樵谧x寫連續(xù)的扇區(qū)比分離的扇區(qū)更快。(3)字符設(shè)備只能被順序讀寫,而塊設(shè)備可以隨機(jī)訪問(wèn)。雖然塊設(shè)備可隨機(jī)訪問(wèn),但是對(duì)于磁盤這類機(jī)械設(shè)備而言,順序地組織塊設(shè)備的訪問(wèn)可以提高性能。注意,對(duì)SD卡、RAMDISK等塊設(shè)備而言,不存在機(jī)械上的原因,進(jìn)行這樣的調(diào)整沒(méi)有必要。(4)塊設(shè)備不同與字符設(shè)備的一個(gè)明顯特征就是:塊設(shè)備可以被掛載到文件系統(tǒng)上。Mount-tvfat/dev/hda6/mnt/hda.6將一個(gè)硬盤分區(qū)hda6掛載到文件系統(tǒng)/mnt/hda6節(jié)點(diǎn)上。.描述一個(gè)硬件中斷信號(hào)發(fā)生,到為其注冊(cè)的中斷服務(wù)例程開始執(zhí)行,之間所經(jīng)過(guò)的內(nèi)核處理過(guò)程。并進(jìn)一步分析,制約linux中斷響應(yīng)時(shí)間的因素存在于哪些方面。參考答案:當(dāng)一個(gè)硬件中斷產(chǎn)生時(shí),CPU從相應(yīng)的硬件中獲取中斷號(hào),然后再根據(jù)中斷號(hào)再中斷向量表中查找相應(yīng)的中斷服務(wù)程序入口,在調(diào)用中斷服務(wù)程序之前開辟現(xiàn)場(chǎng)區(qū),并將現(xiàn)場(chǎng)區(qū)組織成“棧”結(jié)構(gòu),保持現(xiàn)場(chǎng),進(jìn)入中斷服務(wù)程序進(jìn)行處理,在退出時(shí)恢復(fù)所保存的現(xiàn)場(chǎng)。影響中斷響應(yīng)時(shí)間的因素有:(1)中斷屏蔽如果該中斷被屏蔽操作,則需要進(jìn)行等待影響響應(yīng)時(shí)間。(2)錯(cuò)誤使用了快速中斷模式快速中斷由于優(yōu)先級(jí)比較高而且需要在關(guān)中斷的條件執(zhí)行,后來(lái)的中斷會(huì)因此而等待或者被搶占影響響應(yīng)時(shí)間。(3)其他先前處理過(guò)的中斷對(duì)于中斷共享,內(nèi)核在處理中斷的時(shí)候會(huì)依次執(zhí)行注冊(cè)在該IRQ上的中斷處理程序。.在大家相關(guān)于串口的工作中,可能會(huì)遇到這樣的問(wèn)題:串口在發(fā)送數(shù)據(jù)時(shí),不是連續(xù)且迅速地發(fā)送,而是以一個(gè)固定的節(jié)拍(10秒),且每次只發(fā)送等長(zhǎng)度的一段數(shù)據(jù),請(qǐng)列舉可能造成這一問(wèn)題的所有原因;參考答案:可能情況有:(1)串口屬于低速設(shè)備,優(yōu)先級(jí)比較低,如果有其他高優(yōu)先級(jí)搶占串口數(shù)據(jù)得不到及時(shí)處理。(2)在多線程編程中如果一個(gè)現(xiàn)成占用了絕大部分CPU資源,沒(méi)有及時(shí)釋放CPU資源。.設(shè)計(jì)并實(shí)現(xiàn)一個(gè)軟件watchdog設(shè)備,以監(jiān)視系統(tǒng)運(yùn)行情況。說(shuō)明:watchdog設(shè)備用于監(jiān)測(cè)系統(tǒng)運(yùn)行狀態(tài),正常運(yùn)行的系統(tǒng)定期寫watchdog以使其不會(huì)超時(shí),一旦超時(shí),意味系統(tǒng)已掛起;watchdog應(yīng)該重啟系統(tǒng).現(xiàn)在的軟件watchdog不重啟系統(tǒng),只用于監(jiān)視應(yīng)用程序的運(yùn)行.參考答案:可以使用守護(hù)進(jìn)程不斷檢測(cè)應(yīng)用程序,發(fā)現(xiàn)應(yīng)用程序退出即重啟應(yīng)用程序。自動(dòng)腳本如下:while[1]dopgrep“程序名”test$?-eq1&&echo”程序名isdown,restartit!”&&執(zhí)行“程序名”sleep5done.簡(jiǎn)述12c的基本操作方法:參考答案:I2C主機(jī)基本操作方法:設(shè)置12c管腳連接;設(shè)置12c時(shí)鐘速率(I2SCLH.I2SCLL);設(shè)置為主機(jī),并發(fā)送起始信號(hào)(I2C0NSET的I2EN、STA位為1,AA位為0);發(fā)送從機(jī)地址(I2DAT),控制I2C0NSET發(fā)送;判斷總線狀態(tài)(I2STAT),進(jìn)行數(shù)據(jù)傳輸控制;發(fā)送結(jié)束信號(hào)(I2C0NSET)oI2C從機(jī)基本操作方法:設(shè)置12c管腳連接;設(shè)置自身的從機(jī)地址(I2ADR);使能12c(I2C0NSET的I2EN、AA位為1);判斷SI位或等待12c中斷,等待主機(jī)操作;判斷總線狀態(tài)I2STAT,進(jìn)行數(shù)據(jù)傳輸控制。.簡(jiǎn)述insmod和modprobe用法區(qū)別。參考答案:insmdo加載需要寫明路徑并輸入驅(qū)動(dòng)全名,包括后綴。如insmodXXX.koo在加載時(shí)有先后順序要求,及加載的模塊中使用的外部符號(hào)必須在內(nèi)核中已經(jīng)存在,否則加載不成功。相對(duì)應(yīng)的卸載是rmmodXXXmodprobe加載時(shí)不需要輸入路徑,也不需要輸入后綴。如modprobeXXX。在加載時(shí)modprobe會(huì)按照/lib/modules/version/下的moudles.dep文件描述進(jìn)行依賴關(guān)系判斷,并將本模塊需要依賴的其他模塊檢測(cè),如果被依賴模塊不存在內(nèi)核中,即先加載依賴模塊C最終調(diào)用insmod加載本模塊自身。與之相對(duì)應(yīng)的模塊卸載是modprobe-rXXXo.為什么要使用copy_from_user和copy_to_user。參考答案:當(dāng)用一個(gè)指針指向用戶空間時(shí);必須確保指向的用戶空間是合法的。對(duì)未驗(yàn)證用戶空間指針的訪問(wèn),可能導(dǎo)致oops、系統(tǒng)崩潰或者安全問(wèn)題。使用copy_from_user和copy_to_user函數(shù)可安全的與用戶空間交換數(shù)據(jù)。.中斷上下文和進(jìn)程上下文的本質(zhì)區(qū)別是什么?為什么中斷中不能有睡眠?參考答案:進(jìn)程中有一個(gè)堆棧指針current指向進(jìn)程task_struct,而中斷上下文不屬于某個(gè)進(jìn)程.current指針游離不再有意義,所以不能進(jìn)行任何形式的進(jìn)程切換.也即不能使得調(diào)度起介入.所以睡眠是不允許的。所以中斷中是不能有睡眠的。.簡(jiǎn)述自旋鎖和信號(hào)量選用的3項(xiàng)原則。參考答案:(1)判斷進(jìn)程切換時(shí)間Tsw,和等待獲取自旋鎖(由臨界區(qū)執(zhí)行時(shí)間決定)Tcs。如果若Tcs比較小,應(yīng)使用自旋鎖,若Tcs很大,應(yīng)使用信號(hào)量。(2)信號(hào)量所保護(hù)的臨界區(qū)可包含可能引起阻塞的代碼,而自旋鎖則絕對(duì)要避免用來(lái)保護(hù)包含這樣代碼的臨界區(qū)。因?yàn)樽枞馕吨M(jìn)行進(jìn)程的切換,如果進(jìn)程被切換出去后,另一個(gè)進(jìn)程企圖獲取本自旋鎖,死鎖就會(huì)發(fā)生(3)信號(hào)量存在于進(jìn)程上下文,因此,如果被保護(hù)的共享資源需要在中斷或軟中斷情況下使用,則在信號(hào)量和自旋鎖之間只能選擇自旋鎖。當(dāng)然,如果一定要使用信號(hào)量,則只能通過(guò)down_讓ylockO方式進(jìn)行,不能獲取就立即返回以避免阻塞。.簡(jiǎn)述Platform總線的優(yōu)點(diǎn)。參考答案:(1)使得設(shè)備被掛接在一個(gè)總線上,因此,符合Linux2.6的設(shè)備模型。其結(jié)果是,配套的sysfs節(jié)點(diǎn)、設(shè)備電源管理都成為可能;platform機(jī)制將設(shè)備本身的資源注冊(cè)進(jìn)內(nèi)核,由內(nèi)核統(tǒng)一管理,在驅(qū)動(dòng)程序中使用這些資源時(shí)通過(guò)platformdevice提供的標(biāo)準(zhǔn)接口進(jìn)行申請(qǐng)并使用。(3)隔離BSP和驅(qū)動(dòng)。在BSP中定義platform設(shè)備和設(shè)備使用的資源、設(shè)備的具體配置信息,而在驅(qū)動(dòng)中,只需要通過(guò)通用的API去獲取資源和數(shù)據(jù),做到了板相關(guān)代碼和驅(qū)動(dòng)代碼的分離,使得驅(qū)動(dòng)具有更好的可擴(kuò)展性和跨平臺(tái)性。.簡(jiǎn)述PWM基本操作方法。參考答案:(1)連接PWM功能管腳輸出,即設(shè)置PINSELO、PINSEL1;(2)設(shè)置PWM定時(shí)器的時(shí)鐘分頻值(PWMPR),得到所要的定時(shí)器時(shí)鐘;(3)設(shè)置比較匹配控制(PWMMCR),并設(shè)置相應(yīng)比較值(PWMMRx);(4)設(shè)置PWM輸出方式并允許PWM輸出(PWMPCR)及鎖存使能控制(PWMLER);(5)設(shè)置PWMTCR,啟動(dòng)定時(shí)器,使能PWM;運(yùn)行過(guò)程中要更改比較值時(shí),更改之后要設(shè)置鎖存使能。使用雙邊沿PWM輸出時(shí),建議使用PWM2、PWM4、PWM6;使用單邊PWM輸出時(shí),在PWM周期開始時(shí)為高電平,匹配后為低電平,使用PWMMR0作為PWM周期控制,PWMMRx作為占空比控制。.簡(jiǎn)述下分成上半部分和下半部分的原因,為何要分?如何實(shí)現(xiàn)?參考答案:上半部分執(zhí)行與硬件相關(guān)的處理要求快,而有些驅(qū)動(dòng)在中斷處理程序中又需要完成大量工作,這構(gòu)成矛盾,所以Linux有所謂的bottomhalf機(jī)制,中斷處理程序中所有不要求立即完成的,在開中斷的環(huán)境下,由底半程序隨后完成.Linux的底半處理實(shí)際上是建立在內(nèi)核的軟中斷機(jī)制上的.Linux的底半機(jī)制主要有Tasklet和workqueue以及softirq(2.4內(nèi)核則有BH,Taskqueue,softirq,tasklet沒(méi)有workqueue),其實(shí)底半可以理解成一種工作的延遲。所以實(shí)際使用時(shí)跟timer機(jī)制基本上一個(gè)意思。.內(nèi)核函數(shù)mmap的實(shí)現(xiàn)原理,機(jī)制J?參考答案:mmap函數(shù)實(shí)現(xiàn)把一個(gè)文件映射到一個(gè)內(nèi)存區(qū)域,從而我們可以像讀寫內(nèi)存一樣讀寫文件,他比單純調(diào)用read/write也要快上許多。在某些時(shí)候我們可以把內(nèi)存的內(nèi)容拷貝到一個(gè)文件中實(shí)現(xiàn)內(nèi)存?zhèn)浞?,?dāng)然,也可以把文件的內(nèi)容映射到內(nèi)存來(lái)恢復(fù)某些服務(wù)。另外,nrniap實(shí)現(xiàn)共享內(nèi)存也是其主要應(yīng)用之一,mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過(guò)映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。.Cache的工作方式劃分?參考答案:分為write-none,write-all,write-through(寫通cache,執(zhí)行寫操作時(shí)同時(shí)寫入主存與cache),write-back(寫回cache,執(zhí)行寫操作時(shí)不寫入主存,除非需要替換)。.驅(qū)動(dòng)里面為什么要有并發(fā)、互斥的控制?如何實(shí)現(xiàn)?參考答案:在驅(qū)動(dòng)程式中,當(dāng)多個(gè)線程同時(shí)訪問(wèn)相同的資源時(shí)(驅(qū)動(dòng)程式中的全局變量是一種典型的共享資源),可能會(huì)引發(fā)〃競(jìng)態(tài)〃,因此必須對(duì)共享資源進(jìn)行并發(fā)控制。Linux內(nèi)核中解決并發(fā)控制的最常用方法是自旋鎖和信號(hào)量(絕大多數(shù)時(shí)候作為互斥鎖使用)。而互斥是指任何時(shí)刻只允許一個(gè)進(jìn)程使用某一共享資源,其他進(jìn)程等待。實(shí)現(xiàn)是利用臨界區(qū)。.spinlock自旋鎖是如何實(shí)現(xiàn)的?參考答案:最多只能被一個(gè)可執(zhí)行單元持有,不會(huì)引起調(diào)用者睡眠,它會(huì)一直忙循環(huán),如果對(duì)應(yīng)的資源不釋放鎖。實(shí)現(xiàn)過(guò)程是:spinlockinit(x):初始化自旋鎖xspin_lock(lock):獲取自旋鎖spin_trylock(lock):也是獲取自旋鎖,但不忙等待。spinunlock(lock):釋放自旋鎖。.簡(jiǎn)述自旋鎖原理和使用注意事項(xiàng)。參考答案:顧名思義,自旋鎖就是原地打轉(zhuǎn),一直忙等待。是一種對(duì)臨界資源進(jìn)行互斥手訪問(wèn)的典型手段。(1)是一個(gè)變量。在獲得一個(gè)自旋鎖時(shí)CPU運(yùn)行的代碼需要先執(zhí)行一個(gè)原子操作。(2)為忙等待。只有在占用鎖的時(shí)間極短的情況下使用自旋鎖才合理。因?yàn)槊Φ却前装自诶速M(fèi)CPU資源。(3)可能導(dǎo)致死鎖。一個(gè)已經(jīng)擁有某個(gè)自旋鎖的CPU想第二次獲得這個(gè)自旋鎖必將引起死鎖。所以不能聯(lián)系在沒(méi)有釋放的情況下獲取同一個(gè)自旋鎖。(4)進(jìn)程獲得自旋鎖后再阻塞,也有可能死鎖。不能用于有阻塞的情況。引起阻塞的函數(shù)有copyfromuser>copytouser和kmalloc等。.分別介紹Linux中消息隊(duì)列、等待隊(duì)列、工作隊(duì)列、請(qǐng)求隊(duì)列、發(fā)送隊(duì)列和接收隊(duì)列分別用在什么場(chǎng)合?參考答案:(I)消息隊(duì)列是進(jìn)程之間的概念,屬于IPC中的內(nèi)容。(2)等待隊(duì)列是夠用于實(shí)現(xiàn)內(nèi)核中的異步事件通知機(jī)制,也可以用來(lái)同步對(duì)系統(tǒng)資源的訪問(wèn)。是工作隊(duì)列、異步、完成量等實(shí)現(xiàn)的基礎(chǔ)。(3)工作隊(duì)列是中斷中下半部的一種實(shí)現(xiàn)方式,是在系統(tǒng)空閑的失控進(jìn)行調(diào)度處理。(4)請(qǐng)求隊(duì)列是塊設(shè)備中的概念,塊設(shè)備驅(qū)動(dòng)就是處理請(qǐng)求隊(duì)列。(5)發(fā)送隊(duì)列和接收隊(duì)列是網(wǎng)絡(luò)設(shè)備中的概念,數(shù)據(jù)存放在發(fā)送隊(duì)列中等待發(fā)送,接收到的數(shù)據(jù)存放在接收隊(duì)列中等待讀取。六、網(wǎng)絡(luò)類:1.is。的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優(yōu)缺點(diǎn)?參考答案:應(yīng)用層表示層會(huì)話層運(yùn)輸層網(wǎng)絡(luò)層物理鏈路層物理層tcp/udp屬于運(yùn)輸層TCP服務(wù)提供了數(shù)據(jù)流傳輸、可靠性、有效流控制、全雙工操作和多路復(fù)用技術(shù)等。與TCP不同,UDP并不提供對(duì)IP協(xié)議的可靠機(jī)制、流控制以及錯(cuò)誤恢復(fù)功能等。由于UDP比較簡(jiǎn)單,UDP頭包含很少的字節(jié),比TCP負(fù)載消耗少。tcp:提供穩(wěn)定的傳輸服務(wù),有流量控制,缺點(diǎn)是包頭大,冗余性不好udp:不提供穩(wěn)定的服務(wù),包頭小,開銷小。七、嵌入式系統(tǒng)類:.嵌入式設(shè)備,為加快啟動(dòng)速度,可以做哪些方面的優(yōu)化?參考答案:有以下優(yōu)化措施(1)優(yōu)化u-boot,減少u-boot運(yùn)行時(shí)間;(2)減少keiTiel的體積,將不是在啟動(dòng)階段必須加載的內(nèi)容驅(qū)動(dòng)模塊化,留在文件系統(tǒng)后面加載。減少kernel運(yùn)行時(shí)間;(3)優(yōu)化或者關(guān)閉調(diào)試串口的輸出;(4)驅(qū)動(dòng)程序放到文件系統(tǒng)后面加載,加載必要的內(nèi)容驅(qū)動(dòng)模塊;(5)仔細(xì)優(yōu)化kernel和各種驅(qū)動(dòng)程序,將每個(gè)部分的延時(shí)操作調(diào)試到最快;應(yīng)用程序環(huán)境的優(yōu)化,減少應(yīng)用程序啟動(dòng)時(shí)間。.什么是BusyBox?參考答案:BusyBox是標(biāo)準(zhǔn)Linux工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox包含了一些簡(jiǎn)單的工具,例如cat和echo,還包含了一些更大、更復(fù)雜的工具,例如grep、find、mount以及telneto有些人將BusyBox稱為L(zhǎng)inux工具里的瑞士軍刀.簡(jiǎn)單的說(shuō)BusyBox就好像是個(gè)大工具箱,它集成壓縮了Linux的許多工具和命令。.淺談bootloader,kelnel,filesystem三者之間的關(guān)系。參考答案:bootloader啟動(dòng)加載器,相當(dāng)于pc的bios,完成硬件啟動(dòng)過(guò)程中設(shè)備檢測(cè)。bootloader啟動(dòng)完成后,將為Kernel提供運(yùn)行環(huán)境,kernel用和管理和分配資源,kernel啟動(dòng)完成后就可以為filesystem等應(yīng)用程序提供運(yùn)行環(huán)境。inttmp;tmp=x;x=y;y=tmp;};〃此處多了個(gè)分號(hào),使用時(shí)會(huì)出錯(cuò)。elsedo_something();ttdefineexch(x,y)do{inttmp;tmp=x;x=y;y=tmp;}while(0)〃最后沒(méi)有分號(hào)所以宏定義中涉及到函數(shù)的處理,最好使用do…while(O)封裝。.談?wù)刅olatile與Register修飾符的作用?volatile是純程序與在硬件上運(yùn)行的程序的最大區(qū)別,在linux系統(tǒng)中編譯時(shí)必須進(jìn)行優(yōu)化的,加上volatile關(guān)鍵詞的變量是讓編譯器不對(duì)其優(yōu)化。register是建議編譯器使用寄存器來(lái)優(yōu)化對(duì)變量的存取。.關(guān)鍵字volatile有什么含意并給出三個(gè)不同的例子。一個(gè)定義為volatile的變量是說(shuō)這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說(shuō)就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個(gè)例子:(1)并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量(Non-automaticvariables)(3)多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量回答不出這個(gè)問(wèn)題的人是不會(huì)被雇傭的。我認(rèn)為這是區(qū)分C程序員和嵌入式系統(tǒng)程序員的最基本的問(wèn)題。嵌入式系統(tǒng)程序員經(jīng)常同硬件、中斷、RTOS等等打交道,所用這些都要求volatile變量。不懂得volatile內(nèi)容將會(huì)帶來(lái)災(zāi)難。.一個(gè)參數(shù)既可以是const還可以是volatile嗎?解釋為什么。答案:是的。一個(gè)例子是只讀的狀態(tài)寄存器。它是volatile因?yàn)樗赡鼙灰庀氩坏降馗淖?。它是const因?yàn)槌绦虿粦?yīng)該試圖去修改它。.一個(gè)指針可以是volatile嗎可以,因?yàn)橹羔樅推胀ㄗ兞恳粯?,有時(shí)也有變化程序的不可控性。常見例:子中斷服務(wù)子程序修改一個(gè)指向一個(gè)buffer的指針時(shí),必須用volatile來(lái)修飾這個(gè)指針。說(shuō)明:指針是一種普通的變量,從訪問(wèn)上沒(méi)有什么不同于其他變量的特性。其保存的數(shù)值是個(gè)整型數(shù)據(jù),和整型變量不同的是,這個(gè)整型數(shù)據(jù)指向的是一段內(nèi)存地址。.下面的函數(shù)有什么錯(cuò)誤:intsquare(volatileint*ptr)(return*ptr**ptr;)答案:這段代碼的有個(gè)惡作劇。這段代碼的目的是用來(lái)返指針*ptr指向值的平方,但是,由于*ptr指向一個(gè)volatile型參數(shù),編譯器將產(chǎn)生類似下面的代碼:intsquare(volatileint*ptr)inta,b;a=*ptr;b=*ptr;returna*b;)由于*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結(jié)果,這段代碼可能返不是你所期望的平方值!正確的代碼如下:longsquare(volatileint*ptr)(inta;a=*ptr;returna*a;).關(guān)鍵字static的作用是什么?在C語(yǔ)言中,關(guān)鍵字static有三個(gè)明顯的作用:(1)在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。(2)在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)。它是一個(gè)本地的全局變量。(3)在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。大多數(shù)應(yīng)試者能正確回答第一部分,一部分能正確回答第二部分,同是很少的人能懂得第三部分。這是一個(gè)應(yīng)試者的嚴(yán)重的缺點(diǎn),因?yàn)樗@然不懂得本地化數(shù)據(jù)和代碼范圍的好處和重要性。.C語(yǔ)言的關(guān)鍵字static和C++的關(guān)鍵字static有什么區(qū)別?在C中static用來(lái)修飾局部靜態(tài)變量和外部靜態(tài)變量、函數(shù)。而C++中除了上述功能外,還用來(lái)定義類的成員變量和函數(shù)。即靜態(tài)成員和靜態(tài)成員函數(shù)。注意:編程時(shí)static的記憶性,和全局性的特點(diǎn)可以讓在不同時(shí)期調(diào)用的函數(shù)進(jìn)行通信,傳遞信息,而C++的靜態(tài)成員則可以在多個(gè)對(duì)象實(shí)例間進(jìn)行通信,傳遞信息。.C中的malloc和C++中的new有什么區(qū)別?malloc和new有以下不同:new、delete是操作符,可以重載,只能在C++中使用。malloc>free是函數(shù),可以覆蓋,C、C++中都可以使用。new可以調(diào)用對(duì)象的構(gòu)造函數(shù),對(duì)應(yīng)的delete調(diào)用相應(yīng)的析構(gòu)函數(shù)。malloc僅僅分配內(nèi)存,free僅僅回收內(nèi)存,并不執(zhí)行構(gòu)造和析構(gòu)函數(shù)new^delete返回的是某種數(shù)據(jù)類型指針,malloc>free返回的是void指針。注意:malloc申請(qǐng)的內(nèi)存空間要用free釋放,而new申請(qǐng)的內(nèi)存空間要用delete釋放,不要混用。因?yàn)閮烧邔?shí)現(xiàn)的機(jī)理不同。.關(guān)鍵字const是什么含意及作用?const意味著“只讀二(1)關(guān)鍵字const告訴了用戶這個(gè)參數(shù)的應(yīng)用目的。(2)通過(guò)給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼。(3)合理地使用關(guān)鍵字const可以使編譯器很自然地保護(hù)那些不希望被改變的參數(shù),防止其被無(wú)意的代碼修改。.下面的聲明都是什么意思?constinta;intconsta;constint*a;int*consta;intconst*aconst;答案:前兩個(gè)的作用是一樣,a是一個(gè)常整型數(shù)。第三個(gè)意味著a是一個(gè)指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個(gè)意思a是一個(gè)指向整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個(gè)意味著a是一個(gè)指向常整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是不可修改的,同時(shí)指針也是不可修改的)。.Typedef在C語(yǔ)言中頻繁用以聲明一個(gè)已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子:#definedPSstructs*typedefstructs*tPS;以上兩種情況的意圖都是要定義dPS和tPS作為一個(gè)指向結(jié)構(gòu)s指針。哪種方法更好呢?(如果有的話)為什么?答案:typedef更好。例如:dPSpl,p2;tPSp3,p4;第一個(gè)擴(kuò)展為structs*pl,p2;上面的代碼定義pl為一個(gè)指向結(jié)構(gòu)的指,p2為一個(gè)實(shí)際的結(jié)構(gòu)。第二個(gè)例子正確地定義了p3和p4兩個(gè)指針。.變量的聲明和定義有什么區(qū)別?為變量分配地址和存儲(chǔ)空間的稱為定義,不分配地址的稱為聲明。一個(gè)變量可以在多個(gè)地方聲明,但是只在一個(gè)地方定義。加入extern修飾的是變量的聲明,說(shuō)明此變量將在文件以外或在文件后面部分定義。說(shuō)明:很多時(shí)候一個(gè)變量,只是聲明不分配內(nèi)存空間,直到具體使用時(shí)才初始化,分配內(nèi)存空間,如外部變量。.寫出bool、int、float、指針變量與“零值”比較的if語(yǔ)句。bool型數(shù)據(jù):if(flag){A;}else{B;}int型數(shù)據(jù):if(0!=flag){A;}else{B;}指針型數(shù):if(NULL==flag){A;}else{B;}float型數(shù)據(jù):if((flag>=NORM)&&(flag<=NORM)){A;}else{B;}注意:應(yīng)特別注意在int、指針型變量和“零值”比較的時(shí)候,把“零值”放在左邊,這樣當(dāng)把—誤寫成時(shí),編譯器可以報(bào)錯(cuò),否則這種邏輯錯(cuò)誤不容易發(fā)現(xiàn),并且可能導(dǎo)致很嚴(yán)重的后果。.sizeof和strlen有什么區(qū)別?sizeof和strlen有以下區(qū)別:sizeof是一個(gè)操作符,strlen是庫(kù)函數(shù)。sizeof的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而strlen只能以結(jié)尾為、(T的字符串作參數(shù)。編譯器在編譯時(shí)就計(jì)算出了sizeof的結(jié)果。而strlen函數(shù)必須在運(yùn)行時(shí)才能計(jì)算出來(lái)。并且sizeof計(jì)算的是數(shù)據(jù)類型占內(nèi)存的大小,而strlen計(jì)算的是字符串實(shí)際的長(zhǎng)度。數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。注意:有些是操作符看起來(lái)像是函數(shù),而有些函數(shù)名看起來(lái)又像操作符,這類容易混淆的名稱一定要加以區(qū)分,否則遇到數(shù)組名這類特殊數(shù)據(jù)類型作參數(shù)時(shí)就很容易出錯(cuò)。最容易混淆為函數(shù)的操作符就是sizeofo.簡(jiǎn)述C、C++程序編譯的內(nèi)存分配情況。C、C++中內(nèi)存分配方式可以分為三種:(1)從靜態(tài)存儲(chǔ)區(qū)域分配:內(nèi)存在程序編譯時(shí)就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。速度快、不容易出錯(cuò),因?yàn)橛邢到y(tǒng)會(huì)善后。例如全局變量,static變量等。(2)在棧上分配:在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。(3)從堆上分配:即動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意大小的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活。如果在堆上分配了空間,就有責(zé)任回收它,否則運(yùn)行的程序會(huì)出現(xiàn)內(nèi)存泄漏,另外頻繁地分配和釋放不同大小的堆空間將會(huì)產(chǎn)生堆內(nèi)碎塊。一個(gè)C、C++程序編譯時(shí)內(nèi)存分為5大存儲(chǔ)區(qū):堆區(qū)、棧區(qū)、全局區(qū)、文字常量區(qū)、程序代碼區(qū)。.簡(jiǎn)述strcpy>sprintf與memcpy的區(qū)別。三者主要有以下不同之處:(1)操作對(duì)象不同,strcpy的兩個(gè)操作對(duì)象均為字符串,sprintf的操作源對(duì)象可以是多種數(shù)據(jù)類型,目的操作對(duì)象是字符串,memcpy的兩個(gè)對(duì)象就是兩個(gè)任意可操作的內(nèi)存地址,并不限于何種數(shù)據(jù)類型。(2)執(zhí)行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。(3)實(shí)現(xiàn)功能不同,strcpy主要實(shí)現(xiàn)字符串變量間的拷貝,sprintf主要實(shí)現(xiàn)其他數(shù)據(jù)類型格式到字符串的轉(zhuǎn)化,memcpy主要是內(nèi)存塊間的拷貝。說(shuō)明:strcpy、sprintf與memcpy都可以實(shí)現(xiàn)拷貝的功能,但是針對(duì)的對(duì)象不同,根據(jù)實(shí)際需求,來(lái)選擇合適的函數(shù)實(shí)現(xiàn)拷貝功能。二、ARM類:ARM啟動(dòng)代碼包括哪些?參考答案:ARM啟動(dòng)代碼直接面對(duì)處理器內(nèi)核和硬件控制器進(jìn)行編程,一般使用匯編語(yǔ)言。啟動(dòng)代碼一般包括:中斷向量表初始化存儲(chǔ)器系統(tǒng)初始化堆棧初始化有特殊要求的端口、設(shè)備初始化用戶程序執(zhí)行環(huán)境改變處理器模式呼叫主應(yīng)用程序簡(jiǎn)述ARM處理器對(duì)異常中斷的響應(yīng)過(guò)程。參考答案:ARM處理器對(duì)異常中斷的響應(yīng)過(guò)程如下所述:保存處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位;設(shè)置當(dāng)前程序狀態(tài)寄存器CPSR中的相應(yīng)位;將寄存器lr_mode設(shè)置成返回地址;將程序計(jì)數(shù)器值PC,設(shè)置成該異常中斷的中斷向量地址,跳轉(zhuǎn)到相應(yīng)異常中斷處執(zhí)行。ARM指令與Thumb指令的區(qū)別是什么?參考答案:在ARM體系結(jié)構(gòu)中,ARM指令集中的指令是32位的指令,其執(zhí)行效率很高。對(duì)于存儲(chǔ)系統(tǒng)數(shù)據(jù)總線為16位的應(yīng)用系統(tǒng),ARM體系提供了Thumb指令集。Thumb指令集是對(duì)ARM指令集的一個(gè)子集重新編碼得到的,指令長(zhǎng)度為16位。通常在處理器執(zhí)行ARM程序時(shí),稱處理器處于ARM狀態(tài);當(dāng)處理器執(zhí)行Thumb程序時(shí),稱處理器處于Thumb狀態(tài)。Thumb指令集并沒(méi)有改變ARM體系地層的程序設(shè)計(jì)模型,只是在該模型上加上了一些限制條件。Thumb指令集中的數(shù)據(jù)處理指令的操作數(shù)仍然為32位,指令尋址地址也是32位的。ARM程序和Thumb程序混合使用的場(chǎng)合有哪些?參考答案:通常,Thumb程序比ARM程序更加緊湊,而且對(duì)于內(nèi)存為8位或16位的系統(tǒng),使用Thumb程序效率更高。但是,在下面一些場(chǎng)合下,程序必須運(yùn)行在ARM狀態(tài),這時(shí)就需要混合使用ARM和Thumb程序。強(qiáng)調(diào)速度的場(chǎng)合,應(yīng)該使用ARM程序;有些功能只能由ARM程序完成。如:使用或者禁止異常中斷;當(dāng)處理器進(jìn)入異常中斷處理程序時(shí),程序狀態(tài)切換到ARM狀態(tài),即在異常中斷處理程序入口的一些指令是ARM指令,然后根據(jù)需要程序可以切換到Thumb狀態(tài),在異常中斷程序返回前,程序再切換到ARM狀態(tài)。ARM處理器總是從ARM狀態(tài)開始執(zhí)行。因而,如果要在調(diào)試器中運(yùn)行Thumb程序,必須為該Thumb程序添加一個(gè)ARM程序頭,然后再切換到Thumb狀態(tài),執(zhí)行Thumb程序。三、操作系統(tǒng)類:.死鎖的4個(gè)必要條件。答案:互斥、請(qǐng)求保持、不可剝奪、環(huán)路。.死鎖的處理。答案:鴕鳥策略、預(yù)防策略、避免策略、檢測(cè)與解除死鎖。.IRQ和FIQ有什么區(qū)別,在CPU里面是是怎么做的?參考答案:IRQ和FIQ是ARM處理器的兩種編程模式。IRQ是指中斷模式,F(xiàn)IR是指快速中斷模式。對(duì)于FIQ必須盡快處理你的事情并離開這個(gè)模式。IRQ可以被FIQ所中斷,但I(xiàn)RQ不能中斷FIQo為了使F1Q更快,所以這種模式有更多的影子寄存器。F1Q不能調(diào)用SWI(軟件中斷)。FIQ還必須禁用中斷。如果一個(gè)FIQ例程必須重新啟用中斷,則它太慢了,并應(yīng)該是IRQ而不是FIQo四、Linux類:SpinLock相對(duì)于信號(hào)量的特點(diǎn);在UP/MP/SMP這些不同環(huán)境下,SpinLock的不同實(shí)現(xiàn)方法。spin」ock()在UP和SMP的不同:UP下:#definespin_lock(x)do{}while(O)#definespin_unlock(x)do{(void)(lock);}while(0)可見,spin」ock(x)和spin_unlock(x)在UP環(huán)境下什么都不做。SMP下:voidspin_lock(spinlock_t*plock)的執(zhí)行過(guò)程如下:如果plock->lock=l,說(shuō)明已被鎖住,則CPU就不能去使用它所保護(hù)的資料結(jié)構(gòu);如果plock->lock=l,說(shuō)明已被鎖住,則可以從spin」ock()傳回,接下去使用它所保護(hù)的資料。自旋鎖主要是針對(duì)SMP或單CPU但是內(nèi)核可搶占的情況,對(duì)應(yīng)單CPU且內(nèi)核不支持搶占的系統(tǒng)中自旋鎖退化為空操作。spink_lock各個(gè)變種的區(qū)別:(1)有些情況下需要在訪問(wèn)共享資源時(shí)必須中斷失效,而訪問(wèn)完后必須中斷使能,這樣的情形使用spinlockirq和spinunlockirq最好;(2)spin_lock_irqsave保存訪問(wèn)共享資源前的中斷標(biāo)志,然后失效中斷;spin_unlock_irqrestore將恢復(fù)訪問(wèn)共享資源前的中斷標(biāo)志而不是直接使能中斷;(3)如果被保護(hù)的共享資源只在進(jìn)程上下文訪問(wèn)和軟中斷上下文訪問(wèn),那么當(dāng)在進(jìn)程上下文訪問(wèn)共享資源時(shí),可能被軟中斷打斷,從而可能進(jìn)入軟中斷上下文來(lái)對(duì)被保護(hù)的共享資源訪問(wèn),因此對(duì)于這種情況,對(duì)共享資源的訪問(wèn)必須使用spin_lock_bh和spinunlockbh來(lái)保護(hù)。當(dāng)然使用spinlockirq和spinunlockirq以及spin_lock_irqsave和spin_unlock_irqrestore也可以,它們失效了本地硬中斷,失效硬中斷隱式地也失效了軟中斷。但是使用spin_lock_bh和spin_unlock_bh是最恰當(dāng)?shù)模绕渌麅蓚€(gè)快。如果被保護(hù)的共享資源只在進(jìn)程上下文和tasklet或timer上下文訪問(wèn),那么應(yīng)該使用與上面情況相同的獲得和釋放鎖的宏,因?yàn)閠asklet和timer是用軟中斷實(shí)現(xiàn)的。(4)對(duì)tasklet和timer和互斥操作如果被保護(hù)的共享資源只在一個(gè)tasklet或timer上下文訪問(wèn),那么不需要任何自旋鎖保護(hù),因?yàn)橥粋€(gè)tasklet或timer只能在一個(gè)CPU上運(yùn)行,即使是在SMP環(huán)境下也是如此;如果被保護(hù)的共享資源只在兩個(gè)或多個(gè)tasklet或timer上下文訪問(wèn),那么對(duì)共享資源的訪問(wèn)僅需要用spin_lock和spin_unlock來(lái)保護(hù),不必使用_bh版本,因?yàn)楫?dāng)tasklet或timer運(yùn)行時(shí),不可能有其他tasklet或timer在當(dāng)前CPU上運(yùn)行。spin」ock用于阻止在不同CPU上的執(zhí)行單元對(duì)共享資源的同時(shí)訪問(wèn)以及不同進(jìn)程上下文互相搶占導(dǎo)致的對(duì)共享資源的非同步訪問(wèn),而中斷失效和軟中斷失效卻是為了阻止在同一CPU上軟中斷或中斷對(duì)共享資源的非同步訪問(wèn).在Linux系統(tǒng)中,以文件方式訪問(wèn)設(shè)備。.Linux內(nèi)核引導(dǎo)時(shí),從文件/etc/fstab中讀取要加載的文件系統(tǒng)。.Linux文件系統(tǒng)中每個(gè)文件用i節(jié)點(diǎn)來(lái)標(biāo)識(shí)。.內(nèi)核分為進(jìn)程管理系統(tǒng)、內(nèi)存管理系統(tǒng)、10管理系統(tǒng)和文件管理系統(tǒng)等四個(gè)子系統(tǒng)。.Linux文件系統(tǒng)分為磁盤文件系統(tǒng)、網(wǎng)絡(luò)文件系統(tǒng)和特殊文件系統(tǒng)三大類。.在Linux系統(tǒng)中所有內(nèi)容都被
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州城市職業(yè)學(xué)院《數(shù)字圖像處理及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽(yáng)職業(yè)技術(shù)學(xué)院《中學(xué)英語(yǔ)教學(xué)研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025廣東省安全員《B證》考試題庫(kù)
- 2025年重慶市安全員-A證考試題庫(kù)附答案
- 廣州珠江職業(yè)技術(shù)學(xué)院《惡意代碼調(diào)查技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年江西省安全員B證(項(xiàng)目經(jīng)理)考試題庫(kù)
- 廣州應(yīng)用科技學(xué)院《手機(jī)多媒體開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025青海建筑安全員A證考試題庫(kù)
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《多媒體信息處理與傳輸》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州鐵路職業(yè)技術(shù)學(xué)院《動(dòng)畫設(shè)計(jì)原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年中小學(xué)春節(jié)安全教育主題班會(huì)課件
- 醫(yī)院消防安全知識(shí)培訓(xùn)課件
- 國(guó)家衛(wèi)生部《綜合醫(yī)院分級(jí)管理標(biāo)準(zhǔn)》
- 《微觀經(jīng)濟(jì)學(xué)》課程思政教學(xué)案例(一等獎(jiǎng))
- 硝酸及液體硝酸銨生產(chǎn)行業(yè)風(fēng)險(xiǎn)分級(jí)管控體系實(shí)施指南
- 瑤醫(yī)目診圖-望面診病圖解-目診
- 染色體標(biāo)本的制作及組型觀察
- 導(dǎo)游實(shí)務(wù)課件
- 投標(biāo)報(bào)價(jià)得分計(jì)算表
- 藝術(shù)類核心期刊目錄
- 馬場(chǎng)的常見疾病及防治措施
評(píng)論
0/150
提交評(píng)論