《嵌入式系统应用与学习心得体会.docx》由会员分享,可在线阅读,更多相关《嵌入式系统应用与学习心得体会.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统应用与学习心得体会 C/OS嵌入式实时操作系统的应用和学习心得 C/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很简单实现准时而且无误执行,使实时应用程序的设计和扩展变得简单,使应用程序的设计过程大为减化。它是一个完整的、可移植、可固化、可裁剪的抢占式实时多任务内核。C/OS-II绝大部分的代码是用ANSII的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器运用。至今,从8位到64位,C/OS-II已在超过40种不同架构上的微处
2、理器上运行。C/OS-II已经在世界范围内得到广泛应用,包括许多领域, 如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业限制上。事实上,C/OS-II已经通过了特别严格的测试,并且得到了美国航空管 理局的认证,可以用在飞行器上。这说明C/OS-II是稳定牢靠的,可用于与人性命攸关的平安紧要系统。除此以外,C/OS-II 的显明特点就是源码公开,便于移植和维护。 我们在学习C/OS嵌入式实时操作系统时用的教科书是任哲编著的 嵌入式实时操作系统C/OS-原理及应用,这本书介绍了嵌入式实时操作系统C/OS-内核的任务管理和调度、系统时钟和节拍服务、时间管理、中断、任务的通信和同步、内存的简
3、洁管理原理,同时给出了实例。最终,还介绍了C/OS-的移植方法。 在多任务系统中,内核负责管理各个任务,或者说为每个任务安排CPU时间,并且负责任务之间的通讯。内核供应的基本服务是任务切换。之所以运用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。C/OS-有一个精致的内核调度算法,实时内核精小,执行效率高,算法奇妙,代码空间
4、很少,具有如下特点:只支持基于优先级的抢占式调度算法,不支持时间片轮循;64个优先级,只能创建64个任务,用户只能创建56个任务;每个任务优先级都不相同;不支持优先级逆转;READY队列通过内存映射表实现快速查询;效率特别高;支持时钟节拍;支持信号量,消息队列,事务限制块,事务标记组,消息邮箱任务通讯机制;支持中断嵌套,中断嵌套层数可达255层,中断运用当前任务的堆栈保存上下文;每个任务有自己的堆栈,堆栈大小用户自己设定;支持动态修改任务优先级;任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态安排,释放内存;任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态
5、内存安排;任务的总个数(OS_MAX_TASKS)由用户确定;0优先级最高,63优先级最低;有一个优先级最低的空闲任务,在没有用户任务运行的时候运行。 任务的调度核心主要是在任务就绪表中查找具有最高优先级别的就绪任务及实现任务切换,即将找到的的最高优先级别的任务的“任务号”- “当前任务的任务号OSPrioCur”;从OSTCBPrioTbl取出最高优先级别任务的任务限制块首地址- “当前任务的任务限制块指针OSTCBCur” ,最终调用OS_TASK_SW()完成现场切换(即将CPU的寄存器信息保存到当前正运行任务的私栈中,然后从待运行的高优先级别的任务私栈中弹出原先保存寄存器信息到CPU)
6、。 时钟节拍服务放到一个时钟节拍任务中完成,通过采纳啥希散列表机制来管理延时任务,每次时钟节拍服务只须要处理极少数的延时任务,从而大大削减了时钟节拍服务花费的时间,提高了系统的实时性。 另外,在COS系列RTOS中,时钟节拍服务除了会跟踪延时的任务,还会跟踪那些指定了超时时限的等待任务。也就是说,当指定的超时时限结束时,即使任务等待的事务没有发生,时钟节拍服务也会使该任务复原运行。 uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。 uC/OS
7、-II要求用户在定时中断的服务程序中,调用系统供应的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。 uC/OS-II 中最多可以支持64 个任务,分别对应优先级063,其中0 为最高优先级。63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,全部用户可以运用的任务数有56个。还供应了任务管理的各种函数调用,包括创建任务,删除任务,变更任务的优先级,任务挂起和复原等。 系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。 想运用在MCU上运用C/
8、OS-II则必需满意以下几个条件:处理器C 编译器支持可重入代码的生成;用C 语言可以打开和关闭中断; 处理器支持中断,并能产生定时中断(中断频率通常设置在10100 Hz 之间); 处理器支持足够的RAM 空间,以满意多任务环境下设置任务堆栈的要求;处理器有相应的指令,能将堆栈指针和其它CPU 寄存器读出和存储到堆栈或内存中。C/OS-II代码中大部分是用C语言写的,但涉及到数据类型的重定义、堆栈结构的设计、任务切换时状态的保存和复原等问题的大部分代码由于与处理器有关,是用汇编语言实现的。移植所要做的工作,就是在不同的处理器上用汇编语言来改写与处理器有关的代码及其他与处理器特性相关的部分。
9、在C/OS-II移植过程中涉及以上问题的代码都包含在文件OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM中。因此移植的主要工作也在源代码的基础上围围着这三个文件的改写绽开。 总之,学习C/OS嵌入式实时操作系统首先得先了解整个系统的结构,工作时的流程,比如任务1运行时假如有外部中断会发生什么(调用中断服务程序,把相应的任务加如就绪列,内核进行调度,就绪队列中的最高优先级的任务.)等,再对代码进行详细的探讨会比较简单。 我们需熟知C/OS嵌入式实时操作系统中的函数及其应用,例如引起任务调度的系统函数有OSStart() uCOS/II启动 ;OSTaskSuspend()挂起任务
10、 ;OSTaskResume()复原任务 ;OSTimeDly()/OSTimeDlyHMSM()等待一个事务的发生等。只有在熟悉系统运行的方式及可以引发其运行的函数的状况下我们才能较好的去运用它,用它来实现移植,从而达到我们的目的。 学习实时操作系统,任哲编著的 嵌入式实时操作系统C/OS-原理及应用这本书相对来说比较适合初学者,它篇幅适中,通俗易懂,若能结合北京航空航天高校ucosii操作系统讲义就更加好了。 正所谓读书百遍,其义自现,通过对北航和任哲的资料不断反复地学习和阅读,我心中终于有些眉目了,我是先用别人的程序进行移植调试后才加入自己的代码,虽然起先都是试验-下载-失败,但随着我的
11、不断努力,最终也是能够胜利的,所以说学习这种技术,须要的是耐性,因为它须要我们一步一步渐渐加深理解,调试程序,有时一个符号打错了都会造成试验的失败,我们就要耐性细致的在代码的海洋里找寻着这一根小针并把它去除改正。 嵌入式系统应用与学习心得体会 嵌入式学习心得体会 嵌入式系统学习心得 嵌入式系统学习心得 嵌入式心得体会 嵌入式心得体会 嵌入式心得体会 学习嵌入式系统心得 嵌入式系统设计与应用 嵌入式学习心得 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第8页 共8页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页