- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验五(嵌入式实操作系统实验报告)
学号级:信科08-3 姓名:刘俊迪 专业: 电子信息科学与技术
实验五:uC/OS-II内核移植实验
实验目的:
了解uC/OS-II内核的基本原理和主要结构
掌握将uC/OS-II内核移植到ARM处理器上的基本方法
掌握uC/OS-II下基本多任务应用程序的编写
实验内容:
学习uC/OS-II再ARM处理器上的移植过程
编写简单的多任务应用程序,同时实现跑马灯和数码管显示的功能
实验原理:
(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 char
INT8S - signed char
INT16U - unsigned short
INT16S - signed short
INT32U - unsigned int
INT32S - signed int
2、ARM处理器相关宏定义
退出临界区
#define OS_ENTER_CRITICAL() ARMDisableInt()
进入临界区
#define OS_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、SPSR
4、堆栈初始化结束后,OSTaskStkInit返回新的栈顶指针,OSTaskCreate或 OSTaskCreateExt将指针保存在任务的OS_TCB中。
2、系统hook函数
任务创建钩子OSSTaskCreateHook
任务删除钩子OSTaskDelHook
任务切换钩子OSTaskSwHook
任务统计钩子OSTaskStatHook
时钟节拍处理钩子OSTimeTickHook
3、中断级任务切换函数
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现场恢复,这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更
您可能关注的文档
最近下载
- 3DMax中英文对照表2.doc
- 2024年四川省德阳市中考生物试题卷(含答案解析).docx
- 苏教版四下简便计算练习题.doc VIP
- 北京市第一零一中学2023-2024学年八年级下学期期中数学试题(原卷版).pdf VIP
- 2025年单招生活常识题目答案大全 .pdf VIP
- 湖北省武汉市2025届高三上学期元月调考数学试题(学生版+解析版).docx
- 卡萨帝 洗衣机 双子云裳洗干一体机 C8 HU12G1 使用说明.pdf
- 2023届高考英语新时政热点阅读 10 人工智能(含解析).docx
- 马尔测长仪使用说明ULM Manual_Chinese.pdf VIP
- OA系统运维项目方案.docx VIP
文档评论(0)