欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    实验五(嵌入式实时操作系统实验报告).doc

    • 资源ID:79335293       资源大小:547KB        全文页数:5页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    实验五(嵌入式实时操作系统实验报告).doc

    中国矿业大学计算机学院数据库原理实验报告学号:08083572班级:信科08-3 姓名:刘俊迪 专业: 电子信息科学与技术 实验五:uC/OS-II内核移植实验 1. 实验目的:n 了解uC/OS-II内核的基本原理和主要结构n 掌握将uC/OS-II内核移植到ARM处理器上的基本方法n 掌握uC/OS-II下基本多任务应用程序的编写2. 实验内容:学习uC/OS-II再ARM处理器上的移植过程编写简单的多任务应用程序,同时实现跑马灯和数码管显示的功能3. 实验原理:(1)uC/OS-II的移植1、汇编语言、C语言代码需要移植2、移植工作集中在多任务切换的实现上3、在ARM处理器上的移植,需要完成的工作包括:修改三个和体系结构相关的文件,代码量大约是500行。这三个文件是OS_CPU_C.c、OS_CPU_C.H以及OS_CPU_A.S(2)OS_CPU.H的移植1、数据类型定义 INT8U -> unsigned charINT8S -> signed char INT16U -> unsigned shortINT16S -> signed shortINT32U -> unsigned intINT32S -> signed int2、ARM处理器相关宏定义 退出临界区#defineOS_ENTER_CRITICAL()ARMDisableInt()进入临界区 #defineOS_EXIT_CRITICAL()ARMEnableInt()3、堆栈增长方向 堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。#define OS_STK_GROWTH 1(3)OS_CPU.c的移植1、任务堆栈初始化 1、由OSTaskCreate或OSTaskCreateExt调用2、用来初始化任务的堆栈并返回新的堆栈指针stk。初始状态的堆栈模拟发生一次中断后的堆栈结构。3、在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、 r1、r0、CPSR、SPSR4、堆栈初始化结束后,OSTaskStkInit返回新的栈顶指针,OSTaskCreate或 OSTaskCreateExt将指针保存在任务的OS_TCB中。2、系统hook函数 任务创建钩子OSSTaskCreateHook任务删除钩子OSTaskDelHook任务切换钩子OSTaskSwHook任务统计钩子OSTaskStatHook时钟节拍处理钩子OSTimeTickHook3、中断级任务切换函数 1、该函数由OSIntExit()和OSExIntExit()调用2、在时钟中断ISR(中断服务例程)中发现有高优先级任务等待的时钟信号到来,则需要在中断退出后并不返回被中断任务,而是直接调度就绪的高优先级任务执行。3、该函数通过设置一个全局变量need_to_swap_context标志以表示在中断服务程序中进行任务切换,然后在OSTickISR()中判断该变量以进行正确的动作。(4)OS_CPU_A.S的移植 1、时钟节拍中断服务函数 1、时钟节拍是特定的周期性中断2、时钟节拍率越快,系统的额外开销就越大。越慢则系统响应速度越慢3、本系统使用定时器0作为时钟节拍源,产生间隔10mS的时钟节拍4、OSTickISR()就是时钟节拍中断服务函数,也就是定时器0的中断处理函数2、退出临界区和进入临界区函数 ARMDisableInt/ARMEnableInt 1、直接操作CPSR的I、F位2、 ARMDisableInt将CPSR的I、F位设置为1,关闭所有中断3、 ARMEnableInt将CPSR的I、F位设置为0,打开中断3、任务级上下文切换函数OS_TASK_SW 1、该函数当任务因为被阻塞而主动请求cpu调度时被执行,由于此时的任务切换都是在非异常模式下进行的,因此区别于中断级别的任务切换。2、它先将当前任务的cpu现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的cpu现场,使之继续执行。这样就完成了一次任务切换。4、OSStartHighRd 1、该函数是在OSStart函数中调用2、负责从最高优先级任务的TCB中获得该任务的堆栈指针sp,并依次将cpu现场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占cpu3、该函数仅在多任务启动时被执行一次,用来启动之前创建的第一个,也就是最高优先级的任务执行(5)多任务应用程序的编写 C语言入口函数 1、调用函数ARMTargetInit初始化ARM处理器;2、调用OSInit进行操作系统初始化;3、调用OSTaskCreate函数两个任务:TaskLED和TaskSEG;4、调用ARMTargetStart函数启动时钟节拍中断;5、调用OSStart启动系统任务调度。(6)OS_CPU.H的改写typedef unsigned char BOOLEAN;typedef unsigned char INT8U; typedef signed char INT8S; typedef unsigned int INT16U; typedef signed int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef float FP32; typedef double FP64; typedef unsigned int OS_STK; #define BYTE INT8S #define UBYTE INT8U #define WORD INT16S #define UWORD INT16U#define LONG INT32S#define ULONG INT32U(7)OS_CPU_C.C的改写void *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt) unsigned int *stk; opt = opt; /* 'opt' is not used, prevent warning */ stk = (unsigned int *)ptos; /* Load stack pointer */ /* build a context for the new task */ *-stk = (unsigned int) task; /* pc */ *-stk = (unsigned int) task; /* lr */ *-stk = 0; /* r12 */ *-stk = 0; /* r11 */ *-stk = 0; /* r10 */ *-stk = 0; /* r9 */ *-stk = 0; /* r8 */ *-stk = 0; /* r7 */ *-stk = 0; /* r6 */ *-stk = 0; /* r5 */ *-stk = 0; /* r4 */ *-stk = 0; /* r3 */ *-stk = 0; /* r2 */ *-stk = 0; /* r1 */ *-stk = (unsigned int) pdata; /* r0 */ *-stk = (SVC32MODE|0x0);/* cpsr IRQ, FIQ disable*/ *-stk = (SVC32MODE|0x0);/* spsr IRQ, FIQ disable */ return (void *)stk);实验步骤1、补全os_cpu.h和OS_CPU_C.c两个文件中的缺少的部分代码。2、使用创建好的模板工程Eg1,打开Eg1.c文件,按下面的要求补全TaskLED函数和TaskSEG函数。3、在TaskLED函数中每隔200个时钟节拍使所有的跑马灯闪烁一次(一亮一灭)。4、在TaskSEG函数中每隔100个时钟节拍切换一次数码管显示(循环从1到F显示)5、编译工程Eg1,如果出错,进行修改后再编译。6、将Eg1下载并运行,看结果,正确的结果将每隔1秒切换一次数码管显示,每隔2秒使所有的跑马灯闪烁一次。4. 实验结果6.实验体会:本次试验主要学习了C/OS-II的移植,书本主要介绍了其在51单片机上的移植.结合C/OS-II的移植需要满足的要求:    (1)处理器的C编译器可以产生可重入代码;    (2)可以使用C调用进入和退出临界区代码;    (3)处理器必须支持硬件中断,并且需要一个定时中断源;    (4)处理器需要能够容纳一定数据的硬件堆栈;    (5)处理器需要有能够在CPU寄存器与内核和堆栈交换数据的指令。做出相应的修改,编写相应的代码,调试成功即可。成绩:优 良 中 差 教师

    注意事项

    本文(实验五(嵌入式实时操作系统实验报告).doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开