ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:43.79KB ,
资源ID:26902401      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26902401.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(培训体系培训资料.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

培训体系培训资料.docx

1、培训体系培训资料(培训体系)培训资料新人培训阶段学习资料上海核心信息技术XX公司Version0.02(2011.03)课程介绍1课程大纲2第壹阶段Linux开发基础2第二阶段嵌入式C语言编程强化3第三阶段Linux用户态开发8第四阶段Linux内核态及驱动开发10第五阶段软件开发流程11课程介绍本课程旨于发现具备开发Linux下驱动程序的人才,新入社员将通过壹个月的时间参照本教程熟悉Linux下设备驱动开发必须的知识。培训结束后符合要求的新人将进入公司具体项目组熟悉具体项目的开发方法。课程大纲本课程大纲内列出的任务基本由员工自己动手解决为主,通常每天上午指导人员将进行昨日实验结果评价及当日任

2、务安排,对于工作任务不清楚的地方请及时向指导人员提出。下午主要为新员工个人实验时间。第壹阶段Linux开发基础2-3天通过本课程的学习,使新员工能够了解Linux操作系统的概念,熟练掌握Linux下的基本命令、常用工具的使用方面的知识。学习内容:公司安全保密教育,日报格式说明Linux常用命令,文本编辑器Vi,简单Shell脚本编程嵌入式Linux开发环境基础:Gcc,Gdb,Make和MakefileGCCARM编译环境安装(SourceryG+LiteEditionforARM)软件版本管理器Svn嵌入式软件开发环境搭建和使用x86linux内核编译versatilearmlinux内核编

3、译QEMU运行linux实验:1. 开发环境配置,安装ubuntu虚拟机,熟悉Linux使用2. 配置X86开发环境,编译x86Linux内核,于QEMU下运行3. 配置ARM开发环境,编译armLinux内核,于QEMU下运行4. 编写HelloWorld程序,于x86/armLinuxQEMU下运行5. 编写壹个脚本,统计壹个目录下面所有C代码的行数。6. 这些格式的如何去解压.tar/bz2/tar.bz2/tar.gz/tar.tar/.Z/.zip/.rar第二阶段嵌入式C语言编程强化3-5天本课程的主要目标是通过编写代码的方式,加强对于C语言编程和数据结构的掌握程度。回答如下16道

4、国外经典的面向嵌入式语言面试题1.用预处理指令#define声明壹个常数,用以表明1年中有多少秒(忽略闰年问题)2.写壹个“标准”宏MIN,这个宏输入俩个参数且返回较小的壹个。3.预处理器标识#error的目的是什么?4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?5.用变量a给出下面的定义a)壹个整型数(Aninteger)b)壹个指向整型数的指针(Apointertoaninteger)c)壹个指向指针的的指针,它指向的指针是指向壹个整型数(Apointertoapointertoaninteger)d)壹个有10个整型数的数组(Anarrayof10integers)e)壹

5、个有10个指针的数组,该指针是指向壹个整型数的(Anarrayof10pointerstointegers)f)壹个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)壹个指向函数的指针,该函数有壹个整型参数且返回壹个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)h)壹个有10个指针的数组,该指针指向壹个函数,该函数有壹个整型参数且返回壹个整型数(Anarrayoftenpointerstofunctionsthattakeanintegerargume

6、ntandreturnaninteger)6.关键字static的作用是什么?7关键字const是什么含意?8.关键字volatile有什么含意且给出三个不同的例子。9.嵌入式系统总是要用户对变量或寄存器进行位操作。给定壹个整型变量a,写俩段代码,第壹个设置a的bit3,第二个清除a的bit3。于之上俩个操作中,要保持其它位不变。10.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。于某工程中,要求设置壹绝对地址为0x67a9的整型变量的值为0xaa66。编译器是壹个纯粹的ANSI编译器。写代码去完成这壹任务。11.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供壹种扩展

7、让标准C支持中断。具体所代表的事实是,产生了壹个新的关键字_interrupt。下面的代码就使用了_interrupt关键字去定义了壹个中断服务子程序(ISR),请评论壹下这段代码的。_interruptdoublecompute_area(doubleradius)doublearea=PI*radius*radius;printf(Area=%f,area);returnarea;12.下面的代码输出是什么,为什么?voidfoo(void)unsignedinta=6;intb=-20;(a+b6)puts(6):puts(=3,(Y-X)的绝对值=3,保证俩次置位不会重合Output更

8、改后的寄存器值R(16进制输出)SampleInput12345678,0,3SampleOutput1234567cvoidmain()intR,X,Y;scanf(%d,%d,%d,&R,&X,&Y);R&=(1X);R|=6(Y-3);R&=(1(Y-2);printf(theRvalueis%d,R);排序编写壹个排序程序。被排序的文件有8MB大小,壹行壹个随机整数(ASCII格式)。要求对这些整数进行排序,且计算平均值,打印出排序所需的时间。#includestdio.h#includestdlib.h#includemath.h#includetime.hvoidrun(int*p

9、Data,intleft,intright)inti,j;intmiddle,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);voidQuickSort(int*pData,longCount)run(pData,0,Count-1);intmain(intargc,char*argv)clock_ts

10、tart,end;/time_ta,b;charfstr20;intm_data1024;longcount=0;longsum=0;longavr;longi;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()

11、;printf(%6.3fsecondsn,(double)(end-start)/18.2);/b=time(NULL);for(i=0;i1)p-next=Create_Node(n-1);/ifthenodehaschild,thenmakethepsnextlinkthenextnodereturnp;/returnthenodesaddressvoidDelete_Node(structNode*node)/freetheallnodetablesif(node-next!=NULL)Delete_Node(node-next);node-next=NULL;free(node);双

12、向:structMuNodeintdata;structMuNode*pre;/PointertopointtopreviousnodestructMuNode*next;/Pointertopointtonextnode;structMuNode*Create_MuNode(intn,structMuNode*pre)structMuNode*p=(structMuNode*)malloc(sizeof(Node);memset(p,NULL,sizeof(Node);p-pre=pre;if(n1)p-next=Create_MuNode(n-1,p);returnp;voidDelete

13、_MuNode(structMuNode*node)if(node-next!=NULL)Delete_MuNode(node-next);node-next=NULL;node-pre=NULL;free(node);循环链表structNodeintdata;/数据域structNode*next;/指针域;structNode*Create_CycleNode(intn,structNode*head)/CreateaNode,nmeansithasnchildnode;structNode*p=(structNode*)malloc(sizeof(Node);/Createamemor

14、yspaceforstructmemset(p,NULL,sizeof(Node);/setthestructsvalueNULL;if(n1)p-next=Create_Node(n-1);/ifthenodehaschild,thenmakethepsnextlinkthenextnodeelsep-next=head;returnp;/returnthenodesaddressvoidDelete_CycleNode(structNode*node,structNode*head)if(node-next!=head)Delete_Node(node-next);node-next=NU

15、LL;free(node);队列基本操作(入队,出队)循环队列类型定义#defineQueueSize100/应根据具体情况定义该值typedefcharDataType;/DataType的类型依赖于具体的应用typedefstructintfront;/头指针,队非空时指向队头元素intrear;/尾指针,队非空时指向队尾元素的下壹位置intcount;/计数器,记录队中元素总数DataTypedataQueueSize;CirQueue;voidInitQueue(CirQueue*Q)/初始化队列Q-front=0;Q-count=0;Q-rear=0;intQueueEmpty(Ci

16、rQueue*Q)return(Q-count=0)intQueueFull(CirQueue*Q)return(Q-count=QueueSize);voidEnQueue(CirQueuq*Q,DataTypex)if(!QueueFull(CirQueue*Q)Q-dataQ-rear=x;Q-rear=(Q-rear+1)%QueueSize;Q-count+;elseerror(TheQueueisFull!now!n);DataTypeDeQueue(CirQueue*Q)DataTypetemp;if(QueueEmpty(Q)Error(Queueunderflow)/队空下溢

17、temp=Q-dataQ-front;Q-count-;/队列元素个数减1Q-front=(Q-front+1)%QueueSize;/循环意义下的头指针加1returntemp;DataTypeQueueFront(CirQueue*Q)if(!QueueEmpty)returnQQ-front;elseerror(Queueisempty);栈基本操作(入栈,出栈)#defineDataTypeint#defineMAXSIZE1024typedefstructDataTypedataMAXSIZE;inttop;SeqStack;SeqStack*Init_SeqStack()/栈初始化

18、SeqStack*p=(SeqStack*)malloc(sizeof(SeqStack);memset(p,NULL,sizeof(SeqStack);returnp;intEmpty_SeqStack(SeqStack*s)/判栈空return(s-top=0);intPush_SeqStack(SeqStack*s,DataTypex)/入栈if(s-topdatas-top=x;return1elsereturn0;intPop_SeqStack(SeqStack*s,DataType*x)/出栈if(s-top0)*x=s-datas-top;s-top-;return1;elser

19、eturn0;DataTypeTop_SeqStack(SeqStack*s)/取栈顶元素if(s-top0)returns-datas-top;elseerror(Stackisempty);其他编写壹个自己的完全C语言版本的memset函数,且且评价这个实现的性能和可移植性。void*memset(void*source,intch,unsignedn);)char*p=(char*)source;assert(NULL!=source);while(n-)*p+=(char)c;returnsource;代码风格下面是壹个16x16的黑白图标:staticunsignedshortsto

20、pwatch【】=0x07c6,0x1ff7,0x383b,0x600c,0x600c,0xc006,0xc006,0xdf06,0xc106,0xc106,0x610c,0x610c,0x3838,0x1ff0,0x07c0,0x0000,;如何修改声明,能够使之于源代码中形象地表现出图形的模样/C编程专家#defineX)*2+1#define_)*2#defines(0staticunsignedshortstopwatch=s_XXXXX_XX_,s_XXXXXXXXX_XXX,s_XXX_XXX_XX,s_XX_XXX_,s_XX_XXX_,sXX_XX_,sXX_XX_,sXX_X

21、XXXX_XX_,sXX_X_XX_,sXX_X_XX_,s_XX_X_XX_,s_XX_X_XX_,s_XXX_XXX_,s_XXXXXXXXX_,s_XXXXX_,s_,;第三阶段Linux用户态开发5天左右熟悉Linux用户态开发的基本概念,通过编写壹些实验程序加深理解。用户态编程学习内容系统调用方式访问文件库函数访问文件时间编程进程原理进程控制程序设计进程间通讯管道信号共享内存消息队列信号量多线程程序设计socket编程(TCP,UDP)Linux用户态编程实验内容:编写应用程序,创建壹个可读可写的文件。程序名:CreateFile#include#include#include#in

22、clude#includevoidcreate_file(char*filename)if(creat(filename,0755)0)printf(createfile%sfailure!n,filename);exit(EXIT_FAILURE);elseprintf(createfile%ssuccess!n,filename);intmain(intargc,char*argv)inti;if(argc2)perror(youhaventinputthefilename,pleasetryagain!n);exit(EXIT_FAILURE);for(i=1;iargc;i+)crea

23、te_file(argvi);exit(EXIT_SUCCESS);执行命令:gccCreateFileoCreateFile./CreateFile使用库函数,实现文件拷贝的功能获取本地时间,以字符串方式显示编写壹应用程序,于程序中创建壹子进程,分别于父进程和子进程中打印进程ID使用vfork创建壹子进程,分别于父进程和子进程中打印进程ID,观察父子进程的运行顺序使用execl函数创建壹个文件编写壹应用程序,于程序中创建壹子进程,父进程需等待子进程运行结束后才能执行于父进程中创建壹个无名管道,且创建子进程来读该管道,父进程来写该管道启动A进程,创建壹有名管道,且向其写入壹些数据;启动B进程,从A创建的有名管道中读出数据于进程中为SIGBUS注册处理函数,且向该进程发送SIGBUS信号启动A进程,创建壹共享内存,且向其写入壹些数据;启动B进程,从A创建的共享内存中读出数据创建壹消息队列,实现向队列中存放数据和读取数据编写应用程序,创建壹线程,且向该线程处理函数传递壹结构编写应用程序,创建壹线程,父进程需要等待该线程结束后才能继续执行编写应用程序,创建壹线程,使用pthread_cl

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1