




已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
新人培訓(xùn)階段學(xué)習(xí)資料上海核心信息技術(shù)有限公司Version 0.02 (2011.03)目錄課程介紹1課程大綱2第一階段Linux開(kāi)發(fā)基礎(chǔ)2第二階段嵌入式C語(yǔ)言編程強(qiáng)化3第三階段Linux用戶態(tài)開(kāi)發(fā)8第四階段Linux內(nèi)核態(tài)及驅(qū)動(dòng)開(kāi)發(fā)10第五階段軟件開(kāi)發(fā)流程1120課程介紹本課程旨在發(fā)現(xiàn)具備開(kāi)發(fā)Linux下驅(qū)動(dòng)程序的人才,新入社員將通過(guò)一個(gè)月的時(shí)間參照本教程熟悉Linux下設(shè)備驅(qū)動(dòng)開(kāi)發(fā)必須的知識(shí)。培訓(xùn)結(jié)束后符合要求的新人將進(jìn)入公司具體項(xiàng)目組熟悉具體項(xiàng)目的開(kāi)發(fā)方法。課程大綱本課程大綱內(nèi)列出的任務(wù)基本由員工自己動(dòng)手解決為主,通常每天上午指導(dǎo)人員將進(jìn)行昨日實(shí)驗(yàn)結(jié)果評(píng)價(jià)及當(dāng)日任務(wù)安排,對(duì)于工作任務(wù)不清楚的地方請(qǐng)及時(shí)向指導(dǎo)人員提出。下午主要為新員工個(gè)人實(shí)驗(yàn)時(shí)間。第一階段Linux開(kāi)發(fā)基礎(chǔ)2-3天通過(guò)本課程的學(xué)習(xí),使新員工能夠了解Linux操作系統(tǒng)的概念,熟練掌握Linux下的基本命令、常用工具的使用方面的知識(shí)。學(xué)習(xí)內(nèi)容: 公司安全保密教育,日?qǐng)?bào)格式說(shuō)明 Linux常用命令,文本編輯器Vi,簡(jiǎn)單Shell腳本編程 嵌入式Linux開(kāi)發(fā)環(huán)境基礎(chǔ):Gcc,Gdb,Make和MakefileGCC ARM編譯環(huán)境安裝(Sourcery G+ Lite Edition for ARM) 軟件版本管理器Svn 嵌入式軟件開(kāi)發(fā)環(huán)境搭建與使用x86 linux內(nèi)核編譯versatile arm linux內(nèi)核編譯QEMU運(yùn)行l(wèi)inux實(shí)驗(yàn):1. 開(kāi)發(fā)環(huán)境配置,安裝ubuntu虛擬機(jī),熟悉Linux使用2. 配置X86開(kāi)發(fā)環(huán)境,編譯x86 Linux內(nèi)核,在QEMU下運(yùn)行3. 配置ARM開(kāi)發(fā)環(huán)境,編譯arm Linux內(nèi)核,在QEMU下運(yùn)行4. 編寫(xiě)Hello World程序,在x86/arm Linux QEMU下運(yùn)行5. 編寫(xiě)一個(gè)腳本,統(tǒng)計(jì)一個(gè)目錄下面所有C代碼的行數(shù)。6. 這些格式的如何去解壓.tar/bz2/tar.bz2/tar.gz/tar.tar/.Z/.zip/.rar第二階段嵌入式C語(yǔ)言編程強(qiáng)化3-5天本課程的主要目標(biāo)是通過(guò)編寫(xiě)代碼的方式,加強(qiáng)對(duì)于C語(yǔ)言編程和數(shù)據(jù)結(jié)構(gòu)的掌握程度。回答如下16道國(guó)外經(jīng)典的面向嵌入式語(yǔ)言面試題1. 用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問(wèn)題)2. 寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。3. 預(yù)處理器標(biāo)識(shí)#error的目的是什么?4. 嵌入式系統(tǒng)中經(jīng)常要用到無(wú)限循環(huán),你怎么樣用C編寫(xiě)死循環(huán)呢?5. 用變量a給出下面的定義 a) 一個(gè)整型數(shù)(An integer) b) 一個(gè)指向整型數(shù)的指針(A pointer to an integer) c) 一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)(A pointer to a pointer to an integer) d) 一個(gè)有10個(gè)整型數(shù)的數(shù)組(An array of 10 integers) e) 一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的(An array of 10 pointers to integers) f) 一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針(A pointer to an array of 10 integers) g) 一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)(A pointer to a function that takes an integer as an argument and returns an integer) h) 一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)( An array of ten pointers to functions that take an integer argument and return an integer )6. 關(guān)鍵字static的作用是什么?7關(guān)鍵字const是什么含意? 8. 關(guān)鍵字volatile有什么含意 并給出三個(gè)不同的例子。9. 嵌入式系統(tǒng)總是要用戶對(duì)變量或寄存器進(jìn)行位操作。給定一個(gè)整型變量a,寫(xiě)兩段代碼,第一個(gè)設(shè)置a的bit 3,第二個(gè)清除a 的bit 3。在以上兩個(gè)操作中,要保持其它位不變。10. 嵌入式系統(tǒng)經(jīng)常具有要求程序員去訪問(wèn)某特定的內(nèi)存位置的特點(diǎn)。在某工程中,要求設(shè)置一絕對(duì)地址為0x67a9的整型變量的值為0xaa66。編譯器是一個(gè)純粹的ANSI編譯器。寫(xiě)代碼去完成這一任務(wù)。11. 中斷是嵌入式系統(tǒng)中重要的組成部分,這導(dǎo)致了很多編譯開(kāi)發(fā)商提供一種擴(kuò)展讓標(biāo)準(zhǔn)C支持中斷。具體所代表的事實(shí)是,產(chǎn)生了一個(gè)新的關(guān)鍵字 _interrupt。下面的代碼就使用了_interrupt關(guān)鍵字去定義了一個(gè)中斷服務(wù)子程序(ISR),請(qǐng)?jiān)u論一下這段代碼的。_interrupt double compute_area (double radius) double area = PI * radius * radius; printf( Area = %f, area); return area; 12 . 下面的代碼輸出是什么,為什么?void foo(void) unsigned int a = 6; int b = -20; (a+b 6) puts( 6) : puts(=3,(Y-X)的絕對(duì)值=3,保證兩次置位不會(huì)重合Output更改后的寄存器值R(16進(jìn)制輸出)Sample Input12345678,0,3Sample Output1234567cvoid main()int R,X,Y;scanf(%d,%d,%d,&R,&X,&Y);R&=(1X);R|=6(Y-3);R&=(1(Y-2);printf(the R value is %d,R); 排序編寫(xiě)一個(gè)排序程序。被排序的文件有8MB大小,一行一個(gè)隨機(jī)整數(shù)(ASCII格式)。要求對(duì)這些整數(shù)進(jìn)行排序,并計(jì)算平均值,打印出排序所需的時(shí)間。#include stdio.h#include stdlib.h#include math.h#include time.hvoid run(int* pData,int left,int right) int i,j;int middle,iTemp; i = left; j = right;middle = pDataleft; dowhile(pDataimiddle) & (imiddle) & (jleft) j-; if(i=j) iTemp = pDatai; pDatai = pDataj;pDataj = iTemp;i+;j-; while(i=j); if(lefti)run(pData,i,right); void QuickSort(int* pData,long Count) run(pData,0,Count-1); int main(int argc, char* argv)clock_t start,end; /time_t a,b;char fstr20; int m_data1024; long count=0; long sum=0; long avr;long i;FILE* m_file; if(NULL= argv0)exit(1);m_file=fopen(argv0 , r); if(m_file=NULL) printf(error); exit(1); while(NULL!=fgets(fstr,20,m_file) m_datacount=atoi(fstr); count+;start=clock(); /a=time(NULL); QuickSort(m_data,count); end=clock();printf( %6.3f secondsn,(double)(end-start)/18.2); /b=time(NULL); for(i=0;i1)p-next=Create_Node(n-1);/if the node has child ,then make the ps next link the next nodereturn p;/return the nodes addressvoid Delete_Node(struct Node * node)/free the all node tablesif(node-next!=NULL)Delete_Node(node-next); node-next=NULL; free(node);雙向:struct MuNodeint data;struct MuNode* pre;/ Pointer to point to previous nodestruct MuNode* next; / Pointer to point to next node;struct MuNode* Create_MuNode(int n,struct MuNode* pre)struct MuNode* p=(struct MuNode*)malloc(sizeof(Node);memset(p,NULL,sizeof(Node);p-pre=pre;if(n1)p-next=Create_MuNode(n-1,p);return p;void Delete_MuNode(struct MuNode * node)if(node-next!=NULL)Delete_MuNode(node-next); node-next=NULL; node-pre=NULL;free(node);循環(huán)鏈表struct Node int data;/數(shù)據(jù)域 struct Node * next;/指針域 ;struct Node* Create_CycleNode(int n, struct Node* head)/Create a Node, n means it has n child node;struct Node* p=(struct Node*)malloc(sizeof(Node);/Create a memory space for struct memset(p,NULL,sizeof(Node);/set the structs value NULL;if(n1)p-next=Create_Node(n-1);/if the node has child ,then make the ps next link the next nodeelsep-next=head;return p;/return the nodes addressvoid Delete_CycleNode(struct Node * node, struct Node * head)if(node-next!=head)Delete_Node(node-next); node-next=NULL; free(node); 隊(duì)列基本操作(入隊(duì),出隊(duì))循環(huán)隊(duì)列類(lèi)型定義#define QueueSize 100 /應(yīng)根據(jù)具體情況定義該值 typedef char DataType; /DataType的類(lèi)型依賴于具體的應(yīng)用 typedef struct int front; /頭指針,隊(duì)非空時(shí)指向隊(duì)頭元素 int rear; /尾指針,隊(duì)非空時(shí)指向隊(duì)尾元素的下一位置 int count;/計(jì)數(shù)器,記錄隊(duì)中元素總數(shù) DataType dataQueueSize; CirQueue;void InitQueue(CirQueue *Q) /初始化隊(duì)列Q-front=0;Q-count=0;Q-rear=0;int QueueEmpty(CirQueue *Q)return (Q-count=0)int QueueFull(CirQueue *Q)return (Q-count= QueueSize);void EnQueue(CirQueuq *Q,DataType x)if(!QueueFull(CirQueue *Q)Q-dataQ-rear= x;Q-rear=(Q-rear+1)%QueueSize;Q-count+;elseerror(The Queue is Full! now!n);DataType DeQueue(CirQueue *Q)DataType temp;if(QueueEmpty(Q)Error(Queue underflow)/隊(duì)空下溢temp=Q-dataQ-front;Q-count-; /隊(duì)列元素個(gè)數(shù)減1 Q-front=(Q-front+1)%QueueSize; /循環(huán)意義下的頭指針加1 return temp;DataType QueueFront(CirQueue *Q)if(!QueueEmpty)return QQ-front;elseerror(Queue is empty); ?;静僮鳎ㄈ霔?,出棧)#define DataType int #define MAXSIZE 1024 typedef struct DataType dataMAXSIZE; int top; SeqStack;SeqStack *Init_SeqStack()/棧初始化SeqStack *p= (SeqStack *)malloc(sizeof(SeqStack);memset(p,NULL,sizeof(SeqStack);return p;int Empty_SeqStack(SeqStack *s)/判棧空return (s-top=0);int Push_SeqStack(SeqStack *s,DataType x)/入棧if(s-topdatas-top=x;return 1elsereturn 0;int Pop_SeqStack(SeqStack *s,DataType *x)/出棧if(s-top0)*x=s-datas-top;s-top-;return 1;elsereturn 0;DataType Top_SeqStack(SeqStack *s)/取棧頂元素if(s-top0)return s-datas-top;elseerror(Stack is empty); 其他編寫(xiě)一個(gè)自己的完全C語(yǔ)言版本的memset函數(shù),并且評(píng)價(jià)這個(gè)實(shí)現(xiàn)的性能和可移植性。void* memset(void * source, int ch, unsigned n);)char *p=(char*) source; assert(NULL!=source);while(n-)*p+=(char)c;return source; 代碼風(fēng)格下面是一個(gè)16x16的黑白圖標(biāo): static unsigned short stopwatch【】 = 0x07c6, 0x1ff7, 0x383b, 0x600c, 0x600c, 0xc006, 0xc006, 0xdf06, 0xc106, 0xc106, 0x610c, 0x610c, 0x3838, 0x1ff0, 0x07c0, 0x0000, ; 如何修改聲明,可以使之在源代碼中形象地表現(xiàn)出圖形的模樣/C編程專(zhuān)家#define X )*2+1#define _ )*2#define s (0static unsigned short stopwatch=s _ _ _ _ _ X X X X X _ _ _ X X _,s _ _ _ X X X X X X X X X _ X X X,s _ _ X X X _ _ _ _ _ X X X _ X X,s _ X X _ _ _ _ _ _ _ _ X X X _ _,s _ X X _ _ _ _ _ _ _ _ X X X _ _,s X X _ _ _ _ _ _ _ _ _ _ _ X X _,s X X _ _ _ _ _ _ _ _ _ _ _ X X _,s X X _ X X X X X _ _ _ _ _ X X _,s X X _ _ _ _ _ X _ _ _ _ _ X X _,s X X _ _ _ _ _ X _ _ _ _ _ X X _,s _ X X _ _ _ _ X _ _ _ _ X X _ _,s _ X X _ _ _ _ X _ _ _ _ X X _ _,s _ _ X X X _ _ _ _ _ X X X _ _ _,s _ _ _ X X X X X X X X X _ _ _ _,s _ _ _ _ _ X X X X X _ _ _ _ _ _,s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _,;第三階段Linux用戶態(tài)開(kāi)發(fā)5天左右熟悉Linux用戶態(tài)開(kāi)發(fā)的基本概念,通過(guò)編寫(xiě)一些實(shí)驗(yàn)程序加深理解。用戶態(tài)編程學(xué)習(xí)內(nèi)容系統(tǒng)調(diào)用方式訪問(wèn)文件庫(kù)函數(shù)訪問(wèn)文件時(shí)間編程進(jìn)程原理進(jìn)程控制程序設(shè)計(jì)進(jìn)程間通訊管道信號(hào)共享內(nèi)存消息隊(duì)列信號(hào)量多線程程序設(shè)計(jì)socket編程(TCP, UDP)Linux用戶態(tài)編程實(shí)驗(yàn)內(nèi)容:編寫(xiě)應(yīng)用程序,創(chuàng)建一個(gè)可讀可寫(xiě)的文件。程序名:CreateFile#include #include #include #include #include void create_file(char *filename) if(creat(filename,0755)0) printf(create file %s failure!n,filename); exit(EXIT_FAILURE); else printf(create file %s success!n,filename); int main(int argc,char *argv) int i; if(argc2) perror(you havent input the filename,please try again!n); exit(EXIT_FAILURE); for(i=1;iargc;i+) create_file(argvi); exit(EXIT_SUCCESS); 執(zhí)行命令:gcc CreateFile o CreateFile./CreateFile使用庫(kù)函數(shù),實(shí)現(xiàn)文件拷貝的功能獲取本地時(shí)間,以字符串方式顯示編寫(xiě)一應(yīng)用程序,在程序中創(chuàng)建一子進(jìn)程,分別在父進(jìn)程和子進(jìn)程中打印進(jìn)程ID使用vfork創(chuàng)建一子進(jìn)程,分別在父進(jìn)程和子進(jìn)程中打印進(jìn)程ID,觀察父子進(jìn)程的運(yùn)行順序使用execl函數(shù)創(chuàng)建一個(gè)文件編寫(xiě)一應(yīng)用程序,在程序中創(chuàng)建一子進(jìn)程,父進(jìn)程需等待子進(jìn)程運(yùn)行結(jié)束后才能執(zhí)行在父進(jìn)程中創(chuàng)建一個(gè)無(wú)名管道,并創(chuàng)建子進(jìn)程來(lái)讀該管道,父進(jìn)程來(lái)寫(xiě)該管道啟動(dòng)A進(jìn)程,創(chuàng)建一有名管道,并向其寫(xiě)入一些數(shù)據(jù);啟動(dòng)B進(jìn)程,從A創(chuàng)建的有名管道中讀出數(shù)據(jù)在進(jìn)程中為SIGBUS注冊(cè)處理函數(shù),并向該進(jìn)程發(fā)送S
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字時(shí)代電影本體論研究的新趨勢(shì)
- 杭州物業(yè)應(yīng)急管理辦法
- 中職新生場(chǎng)域轉(zhuǎn)換研究:背景、認(rèn)識(shí)與學(xué)習(xí)期待的實(shí)證調(diào)查
- 情緒智力理論與實(shí)踐應(yīng)用綜述
- 奶牛飼養(yǎng)管理策略與實(shí)踐指南
- 數(shù)字化時(shí)代的企業(yè)管理模式與創(chuàng)新路徑研究
- 公務(wù)摩托使用管理辦法
- 心電圖動(dòng)態(tài)監(jiān)測(cè)在急性下壁心梗早期診斷中的價(jià)值研究
- 桶裝涂料庫(kù)存管理辦法
- 工業(yè)遺產(chǎn)保護(hù)視角下的悲劇理論研究
- ctcs-3級(jí)列控系統(tǒng)概述課件
- 2022年汕頭澄海區(qū)教師招聘考試真題
- 考研題土力學(xué)
- 雙向拉伸聚酯薄膜生產(chǎn)知識(shí)
- 綠山墻的安妮-練習(xí)答案(完整版)資料
- 2022年小學(xué)美術(shù)教師進(jìn)城(選調(diào))招聘考試模擬試題(共五套)
- 貴陽(yáng)小升初分班全真模擬測(cè)A卷
- GB/T 77-2007內(nèi)六角平端緊定螺釘
- 中華人民共和國(guó)安全生產(chǎn)法
- 九年一貫制學(xué)校教育教學(xué)管理制度匯編
- 鋼筋混凝土框架結(jié)構(gòu)設(shè)計(jì)講義
評(píng)論
0/150
提交評(píng)論