首页 理论教育 嵌入式系统原理与应用-μC/OS-IIAPI介绍

嵌入式系统原理与应用-μC/OS-IIAPI介绍

时间:2023-11-23 理论教育 版权反馈
【摘要】:任何一个操作系统都会提供大量的API 供开发者使用,μC/OS-Ⅱ也不例外。由于μC/OS-Ⅱ面向的是实时嵌入式系统开发,并不要求大而全,所以内核提供的API 也就大多与多任务相关,主要有任务类、消息类、同步类、时间类、临界区与事件类。因此,μC/OS-Ⅱ不允许出现相同优先级的任务。它们都是涉及了特定的CPU。一个任务可以不限时地调用这些可以导致放弃CPU 使用权的API,但那样多任务性能会大大降低,因为此时仅仅依靠时钟机制在进行任务切换。

嵌入式系统原理与应用-μC/OS-IIAPI介绍

任何一个操作系统都会提供大量的API 供开发者使用,μC/OS-Ⅱ也不例外。 由于μC/OS-Ⅱ面向的是实时嵌入式系统开发,并不要求大而全,所以内核提供的API 也就大多与多任务相关,主要有任务类、消息类、同步类、时间类、临界区与事件类。

下面介绍几个比较重要的API 函数:

(1)OSTaskCreate 函数

这个函数应该至少在main 函数内调用一次,在OSInit 函数调用之后调用。 它的作用就是创建一个任务。 该函数有四个参数:任务的入口地址、任务的参数、任务堆栈的首地址和任务的优先级。 调用本函数后,系统会首先从TCB 空闲列表内申请一个空的TCB 指针;然后将会根据用户给出的参数初始化任务堆栈,并在内部的任务就绪表内标记该任务为就绪状态;最后返回,这样一个任务就创建成功了。

(2)OSTaskSuspend 函数

这个函数可以将指定的任务挂起。 如果挂起的是当前任务,还会引发系统执行任务切换先导函数OSShed 来进行一次任务切换。 这个函数只有一个指定任务的优先级的参数。 事实上,在系统内部,优先级除了表示一个任务执行的先后次序外,还起着区分每一个任务的作用;换句话说,优先级也就是任务的ID。 因此,μC/OS-Ⅱ不允许出现相同优先级的任务。

(3)OSTaskResume 函数

这个函数与上面的函数正好相反,它用于将指定的已经挂起的函数恢复为就绪状态。 如果恢复任务的优先级高于当前任务,还将引发一次任务切换。 其参数类似于OSTaskSuspend函数,用来指定任务的优先级。 需要特别说明是,本函数并不要求和OSTaskSuspend 函数成对使用。(www.xing528.com)

(4)OS_ENTER_CRITICAL 宏

通过分析OS_CPU. H 文件,便知道OS_ENTER_CRITICAL 和下面要涉及的OS_EXIT_CRITICAL 都是宏。 它们都是涉及了特定的CPU。 一般都被替换为一条或者几条嵌入式汇编代码。 由于系统希望向上层开发者隐藏内部实现,因此一般都宣称执行此条指令后系统进入临界区。 其实,它就是关闭中断而已。 这样,只要任务不主动放弃CPU 使用权,别的任务就没有占用CPU 的机会了。 相对这个任务而言,它就是独占了,进入临界区了。 这个宏应该尽量少用,因为它会破坏系统的一些服务,尤其是时间服务,并使系统对外界响应性能降低。

(5)OS_EXIT_CRITICAL 宏

该宏与上面介绍的宏配套使用,在退出临界区时使用,其实它就是重新开中断。 需要注意的是,它必须和上面的宏成对出现,否则会带来意想不到的后果。 最坏情况下,系统会崩溃。 推荐程序员尽量少使用这两个宏调用,因为它们的确会破坏系统的多任务性能。

(6)OSTimeDly 函数

这个函数完成的功能是先挂起当前任务,然后进行任务切换,在指定的时间到来之后,将当前任务恢复为就绪状态,但并不一定运行,如果恢复后是优先级最高就绪任务,则运行之。简而言之,就是可以使任务延时一定时间后再次执行它,或者说,暂时放弃CPU 的使用权。 一个任务可以不限时地调用这些可以导致放弃CPU 使用权的API,但那样多任务性能会大大降低,因为此时仅仅依靠时钟机制在进行任务切换。 一个好的任务应该在完成一些操作时主动放弃使用权。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈