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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(嵌入式操作系统考试准备.docx)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

嵌入式操作系统考试准备.docx

1、考试内容 任务基本形式 osTaskSwHook osTCBHighRdy osIntCtxSw; linux 中断分为上下部,上下半部处理机制 Linux 模块加载,卸载 任务间通信。缓冲区、邮箱 signal,kill1.用户任务代码一般结构: 无限循环结构void mytask(void *pdata)for (;) 可以被中断的用户代码;OS_ENTER_CRITICAL();/进入临界段(关中断)不可以被中断的用户代码;OS_EXIT_CRITICAL(); /退出临界段(开中断)可以被中断的用户代码; 2. OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL

2、()是 uC/OS-II 定义的两个宏。分别封装了关中断代码和开中断代码 3. 用户应用程序一般结构:void Mytask1(void *pdata) /定义用户任务 1for(;) void Mytask2(void *pdata) /定义用户任务 2for(;) void main()OSInit(); /初始化 uc/os.OSTaskCreate(Mytask1,堆栈栈顶指针 .); /创建用户任务 1OSTaskCreate(Mytask2,堆栈栈顶指针 ); /创建用户任务 2OSStart(); /启动 uc/os4. 定义任务堆栈的栈区:只要定义一个 OS_STK 类型的数组

3、即可。如:#define TASK_STK_SIZE 512 /定义堆栈长度(512)OS_STK TaskStkTASK_STK_SIZE /定义数组作为任务堆栈5. OSTaskCreate 函数参数结构:INT8U OSTaskCreate(void (*task)(void * pd), /指向任务的指针void * pdata, /传递给任务的参数OS_STK *ptos, /任务堆栈栈顶指针INT8U prio /任务优先级别);6. 优先级置位算法:7. 对任务就绪表的 3 种操作:登记、注销、查找最高优先级登记:当某个任务处于就绪态时,系统就将该任务登记在任务就绪表中,即在就绪

4、表中将该任务的对应位置 1.a) OSRdyGrp | =OSMapTblprio3;b) OSRdyTblprio3 |=OSMapTblprio注销:当某个任务需要脱离就绪状态时,系统在就绪表中将该任务的对应位置 0if(OSRdyTblprio 3查找: y=OSUnMapTblOSRdyGrp; /获得优先级别的高三位x=OSUnMapTblOSRdyGrpx; /获得低三位prio=(y3)+x; /获得就绪任务的优先级别OSUnMapTbl使 uc/os 为提高查找速度定义的一个数组,共有 256 个元素 8. 习惯在调用函数 OSStart()之前创建一个任务,并赋予它最高优先级

5、别,从而使它成为起始任务;在起始任务中,再创建其他各任务void main(void)OSInit();OSTaskCreate ( TaskStart, .); /创建起始任务 TaskStartOSStart();/开始多任务调度/*起始任务*/void TaskStart( void * pdata). /在这个位置安装并启动 uc/os 的时钟OStatInit();. /在这个位置创建其他任务for(;)起始任务的代码9.创建信号量OS_EVENT *OSSemCreate(INT16U cnt /信号量计数器初始值);返回值为已创建的信号量的指针请求信号量void OSSemPen

6、d(OS_EVENT *pevent,/信号量的指针INT16U timeout, /等待时限,如果参数设置为 0,表明任务的等待时间为无限长INT8U *err /错误信息);释放信号量INT8U OSSemPost(OS_EVENT *pevent,/信号量的指针);10.创建信号量集11.创建内存分区/定义全局变量OS_MEM *CommTxBuffer; /定义内存分区指针INT8U CommTxPart5064; /定义分区和内存块INT8U err;/在主函数的适当位置建立内存分区void main(void)OSInit();CommTxBuffer = OSMemCreate(

7、CommTxPart, /内存分区的首地址50, /分区内存块的数目64, /每个内存块的长度OSStart()12.请求内存块/定义全局变量OS_MEM *CommTxBuffer; /定义内存分区指针INT8U CommTxPart5064; /定义分区和内存块INT8U err;INT8U *BlkPtr; /定义内存块指针/在主函数的适当位置建立内存分区void main(void)同前/在任务 MyTask 的合适位置请求内存块void MyTask(void*)pdata).for(;)BlkPtr = OSMemGet (CommTxBuffer, /内存分区的指针核心数据和资源

8、的初始化;注册以及注消,释放;底层设备操作函数;19.驱动嵌入内核int init_module(void)int result;result = register_chrdev(0, “test“, if (result 0) printk(KERN_INFO “test: cant get major number “);return result;if (test_major = 0) test_major = result; / dynamic return 0;20.释放设备void cleanup_module(void)unregister_chrdev(test_major,

9、“test“);在用 rmmod 卸载模块时, cleanup_module 函数被调用,它释放字符设备 test 在系统字符设备表中占有的表项。21.设备编译,加载过后编写测试文件:main() int testdev;int i;char buf10;testdev = open(“/dev/test“,O_RDWR);if ( testdev = -1 ) printf(“Cannt open file “);exit(0);close(testdev);22.中断注册要使用一个中断,必须先向系统登记。 int request_irq(unsigned int irq , void(*handle)(int,void *,struct pt_regs *), unsigned int long flags,const char *device); irq: 是要申请的中断。 handle:中断处理函数指针。 flags:SA_INTERRUPT 请求一个快速中断,0 正常中断。 device:设备名。如果登记成功,返回 0,这时在 /proc/interrupts 文件中可以看你请求的中断

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报