首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC21XX移植UCOS-II小结

LPC21XX移植UCOS-II小结

1.在uC/OS-II的帮助手册内,作者特地强调绝对不能在OSInit()或者OSStart()内
    调用Timer初始化程序,那会破坏系统的可移植性同时带来性能上的损失。
    所以,一个折中的办法就是:
    在优先级最高的程序内调用,这样可以保证当OSStart()调用系统内部函数
    OSStartHighRdy()开始多任务后,首先执行的就是Timer初始化程序。或者
    专门开一个优先级最高的任务,只做一件事情,那就是执行 Timer初始化,
    之后通过调用OSTaskSuspend()将自己挂起来,永远不再执行。不过这样会
    浪费一个TCB空间。对于那些RAM吃紧的系统来说,还是不用为好。
    2.(三) 一些重要的uC/OS-II API介绍
    任何一个操作系统都会提供大量的API供程序员使用,uC/OS-II也不例外。由于uC/OS-II面向
    的是嵌入式开发,并不要求大而全,所以内核提供的API也就大多和多任务息息相关。
    主要的有以下几类:
    1)任务类
    2)消息类
    3)同步类
    4)时间类
    5)临界区与事件类
    我个人认为对于初级程序员而言,任务类和时间类是必须要首先掌握的两种类型的API.
    下面我就来介绍比较重要的:
    1)OSTaskCreate函数
    这个函数应该至少再main函数内调用一次,在OSInit函数调用之后调用。作用就是创建
    一个任务。目前有四个参数,分别是任务的入口地址,任务的参数, 任务堆栈的首地址和
    任务的优先级。调用本函数后,系统会首先从TCB空闲列表内申请一个空的TCB指针,然后
    将会根据用户给出参数初始化任务堆栈,并在内部的任务就绪表内标记该任务为就绪状态。
    最后返回,这样一个任务就创建成功了。
    2)OSTaskSuspend函数
    这个函数很简单,一看名字就该明白它的作用,它可以将指定的任务挂起。如果挂起的是
    当前任务的话,那么还会引发系统执行任务切换先导函数OSShed来进行一次任务切换。
    这个函数只有一个参数,那就是指定任务的优先级。那为什么是优先级呢?事实上在系统
    内部,优先级除了表示一个任务执行的先后次序外,还起着分别每一个任务的作用,换句话
    说,优先级也就是任务的ID.所以uC/OS-II不允许出现相同优先级的任务。
    3)OSTaskResume函数
    这个函数和上面的函数正好相反,它用于将指定的已经挂起的函数恢复成就绪状态。如果
    恢复任务的优先级高于当前任务,那么还为引发一次任务切换。其参数类似 OSTaskSuspend
    函数,为指定任务的优先级。需要特别说明是,本函数并不要求和OSTaskSuspend函数成对使
    用。
返回列表