文档详情

嵌入式系统应用与学习心得体会

博****1
实名认证
店铺
DOC
16KB
约7页
文档ID:407806878
嵌入式系统应用与学习心得体会_第1页
1/7

嵌入式系统应用与学习心得体会 - μC/OS嵌入式实时操作系统的应用和学习心得 μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能它可以使各个任务独立工作,互不干预,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化它是一个完好的、可移植、可固化、可裁剪的抢占式实时多任务内核μC/OS-II绝大局部的代码是用ANSII的C语言编写的,包含一小局部汇编代码,使之可供不同架构的微处理器使用至今,从8位到64位,μC/OS-II已在超过40种不同架构上的微处理器上运行μC/OS-II已经在世界范围内得到广泛应用,包括很多领域, 如、路由器、集线器、不连续电、飞行器、医疗设备及工业控制上实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管 理局的认证,可以用在飞行器上这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的平安紧要系统除此以外,μC/OS-II 的鲜明特点就是码公开,便于移植和维护 我们在学习μC/OS嵌入式实时操作系统时用的教科书是任哲编著的 《嵌入式实时操作系统μC/OS-Ⅱ原理及应用》,这本书介绍了嵌入式实时操作系统μC/OS-Ⅱ内核的任务管理和调度、系统时钟和节拍效劳、时间管理、中断、任务的通信和同步、内存的简单管理原理,同时给出了实例。

最后,还介绍了μC/OS-Ⅱ的移植方法 在多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯内核提供的根本效劳是任务切换之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成假设干个任务,由实时内核来管理它们内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据构造增加了RAM的用量但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的内核本身对CPU的占用时间一般在2到5个百分点之间μC/OS-Ⅱ有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少,具有如下特点:只支持基于优先级的抢占式调度算法,不支持时间片轮循;64个优先级,只能创立64个任务,用户只能创立56个任务;每个任务优先级都不一样;不支持优先级逆转;READY队列通过内存映射表实现快速查询;效率非常高;支持时钟节拍;支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制;支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文;每个任务有自己的堆栈,堆栈大小用户自己设定;支持动态修改任务优先级;任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存;任务堆栈为用户静态或者动态创立,在任务创立外完成,任务创立本身不进展动态内存分配;任务的总个数〔OS_MAX_TASKS〕由用户决定;0优先级最高,63优先级最低;有一个优先级最低的空闲任务,在没有用户任务运行的时候运行。

任务的调度核心主要是在任务就绪表中查找具有最高优先级别的就绪任务及实现任务切换,即将找到的的最高优先级别的任务的“任务号”---> “当前任务的任务号OSPrioCur”;从OSTCBPrioTbl[]取出最高优先级别任务的任务控制块首地址---> “当前任务的任务控制块指针OSTCBCur” ,最后调用OS_TASK_SW〔〕完成现场切换〔即将CPU的存放器信息保存到当前正运行任务的私栈中,然后从待运行的高优先级别的任务私栈中弹出原先保存存放器信息到CPU〕 时钟节拍效劳放到一个时钟节拍任务中完成,通过采用啥希散列表机制来管理延时任务,每次时钟节拍效劳只需要处理极少数的延时任务,从而大大减少了时钟节拍效劳花费的时间,进步了系统的实时性 另外,在μC/OS系列RTOS中,时钟节拍效劳除了会跟踪延时的任务,还会跟踪那些指定了超时时限的等待任务也就是说,当指定的超时时限完毕时,即使任务等待的事件没有发生,时钟节拍效劳也会使该任务恢复运行 uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。

uC/OS-II要求用户在定时中断的效劳程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数 uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级63为最低级,系统保存了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个还提供了任务管理的各种函数调用,包括创立任务,删除任务,改变任务的优先级,任务挂起和恢复等 系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率 想使用在MCU上使用μC/OS-II那么必须满足以下几个条件:①处理器C 编译器支持可重入代码的生成;②用C 语言可以翻开和关闭中断;③ 处理器支持中断,并能产生定时中断(中断频率通常设置在10~100 Hz 之间);④ 处理器支持足够的RAM 空间,以满足多任务环境下设置任务堆栈的要求;⑤处理器有相应的指令,能将堆栈指针和其它CPU 存放器读出和存储到堆栈或内存中μC/OS-II代码中大局部是用C语言写的,但涉及到数据类型的重定义、堆栈构造的设计、任务切换时状态的保存和恢复等问题的大局部代码由于与处理器有关,是用汇编语言实现的。

移植所要做的工作,就是在不同的处理器上用汇编语言来改写与处理器有关的代码及其他与处理器特性相关的局部 在μC/OS-II移植过程中涉及以上问题的代码都包含在文件OS_CPU.H、OS_CPU_C.C、OS_CPU_A. ASM中因此移植的主要工作也在代码的根底上围绕着这三个文件的改写展开 总之,学习μC/OS嵌入式实时操作系统首先得先理解整个系统的构造,工作时的流程,比方任务1运行时假如有外部中断会发生什么(调用中断效劳程序,把相应的任务加如就绪列,内核进展调度,就绪队列中的最高优先级的任务...)等,再对代码进展详细的研究会比拟容易 学习实时操作系统,任哲编著的 《嵌入式实时操作系统μC/OS-Ⅱ原理及应用》这本书相对来说比拟合适初学者,它篇幅适中,通俗易懂,假设能结合北京航空航天大学《ucosii操作系统讲义》就更加好了 正所谓读书百遍,其义自现,通过对《北航》和《任哲》的资料不断反复地学习和阅读,我心中总算有些眉目了,我是先用别人的程序进展移植调试后才参加自己的代码,虽然开场都是实验---下载--失败,但随着我的不断努力,最终也是可以成功的,所以说学习这种技术,需要的是耐心,因为它需要我们一步一步渐渐加深理解,调试程序,有时一个符号打错了都会造成实验的失败,我们就要耐心仔细的在代码的海洋里寻找着这一根小针并把它去除改正。

第 页 共 页。

下载提示
相似文档
正为您匹配相似的精品文档