当前位置:首页 > 嵌入式 > 嵌入式软件
[导读] 任何一个操作系统都会提供大量的API供程序员使用,uC/OS-II也不例外。由于uC/OS-II面向的是嵌入式开发,并不要求大而全,所以内核提供的API也就大多和多任务息息相关。主要

 任何一个操作系统都会提供大量的API供程序员使用,uC/OS-II也不例外。由于uC/OS-II面向的是嵌入式开发,并不要求大而全,所以内核提供的API也就大多和多任务息息相关。主要的有以下几类:

1. 任务类

2. 同步和消息类

3. 时间类

4. 临界区

1. 任务类

1) 函数

OSTaskCreate函数

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

OSTaskSuspend函数

这个函数很简单,一看名字就该明白它的作用,它可以将指定的任务挂起。如果挂起的是当前任务的话,那么还会引发系统执行任务切换先导函数OSShed来进行一次任务切换。这个函数只有一个参数,那就是指定任务的优先级。那为什么是优先级呢?事实上在系统内部,优先级除了表示一个任务执行的先后次序外,还起着分别每一个任务的作用,换句话说,优先级也就是任务的ID。所以uC/OS-II不允许出现相同优先级的任务。

OSTaskResume函数

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

2)任务状态

睡眠态:

任务驻留在ROM或RAM中但是还没有交给uC/OS-II来管理。

就绪态:

任务一旦建立就立即进入就绪态,准备运行。任务的建立可以是多任务运行之前,也可以是多任务运行中。任务中也可以建立另一个任务,如果被建立的任务的优先级高于建立它的任务,它立刻进入运行态。

运行态:

多任务建立后,可以调用OSStart()开始运行多任务,该函数只能在启动时调用一次。CPU只有一个,任何时刻只有一个任务处于运行态(掌握CPU的使用权)。uC/OS-II是基于优先级调度的,所以要一个任务处于运行态,那么就需要所有优先级高于该任务的任务处于等待状态或者这些高优先级任务被删除了。

等待态:

一种情况是为了避免高优先级的任务称霸CPU,那么就需要周期性的把这个任务挂起让其他较低的优先级的任务有机会被执行。可以通过调用OSTimeDly()和OSTimeDlyHMSM()来将任务自身延迟一段时间。

另外一种情况是当运行着的任务需要等待某一个事件的发生的时候,那么此时它占着CPU什么也不干太浪费,趁着等待的时刻让其他低优先级的任务运行运行就非常不错了。那么这个高优先级的任务可以根据自己具体的需要调用以下函数是自己处于等待状态:OSFlagPend()、OSSemPend()、OSMutexPend()、OSMboxPend()或OSQPend()。总结一下,都是一些Pend函数。

中断服务态:

正在运行的任务被中断打断的状态。这里需要注意的是,当中断返回后不一定就返回到被打断的任务,因为在uC/OS-II中始终都是以任务的优先级来判定哪个任务该执行。

2. 同步和消息类

1)信号量

μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II才能支持信号量。

建立一个信号量, OSSemCreate(INT16U cnt )

等待一个信号量, OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err )

发送一个信号量, OSSemPost(OS_EVENT *pevent )

无等待地请求一个信号量, OSSemAccept(OS_EVENT *pevent )

查询一个信号量的当前状态, OSSemQuery()

邮箱

邮箱是μC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。为了在μC/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。

建立一个邮箱,OSMboxCreate()

等待一个邮箱中的消息,OSMboxPend()

发送一个消息到邮箱中,OSMboxPost()

无等待地从邮箱中得到一个消息, OSMboxAccept()

查询一个邮箱的状态, OSMboxQuery()

如果用户只需要二值信号量和邮箱,这样做可以节省代码空间。这时可以将OS_SEM_EN设置为0,只使用邮箱就可以了。

3)消息队列

消息队列实际上是邮箱的集合

建立一个消息队列 OS_EVENT *OSQCreate (void **start, INT16U size)

等待一个消息队列中的消息,OSQPend()

向消息队列发送一个消息(FIFO),OSQPost()

向消息队列发送一个消息(后进先出LIFO),OSQPostFront()

无等待地从一个消息队列中取得消息, OSQAccept()

查询一个消息队列的状态,OSQQuery()

3. 时间类

OSTimeDly函数

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

4. 中断类

OS_ENTER_CRITICAL宏

很多人都以为它是个函数,其实不然,仔细分析一下OS_CPU.H文件,它和下面马上要谈到的OS_EXIT_CRITICAL都是宏。他们都是涉及特定CPU的实现。一般都被替换为一条或者几条嵌入式汇编代码。由于系统希望向上层程序员隐藏内部实现,故而一般都宣称执行此条指令后系统进入临界区。其实,它就是关个中断而已。这样,只要任务不主动放弃CPU使用权,别的任务就没有占用CPU的机会了,相对这个任务而言,它就是独占了。所以说进入临界区了。这个宏能少用还是少用,因为它会破坏系统的一些服务,尤其是时间服务。并使系统对外界响应性能降低。[!--empirenews.page--]

OS_EXIT_CRITICAL宏

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2024年4月16日 /美通社/ -- 4月14日,为期四天的第89届中国国际医疗器械博览会(CMEF)盛大收官。澳鹏Appen很荣幸再次作为唯一的人工智能训练数据参展商参与此次"航母级"规模医疗...

关键字: APP 医疗器械 PEN 模型

北京2024年4月16日 /美通社/ -- 4月13日至14日,第二十届中国人力资源服务业高峰论坛和第十届亚太人力资源技术与服务博览会在深圳举办。会上同步发布"第十届亚太人力资源服务奖",众合云科凭借在跨地域用工合规和S...

关键字: 数字化 SAAS API

基于 NVIDIA Jetson 平台进行开发的 1 万多家公司现在可以利用全新的生成式 AI、API 和微服务来加快推进行业数字化

关键字: 机器人 生成式 AI API

爱立信发布全球首个为开发者与企业提供通信和网络API的商业化运营商合作 API平台将为运营商开辟网络投资变现新途径,并驱动移动基础设施投资 北京2023年9月22日 /美通社/ -- 近日,爱立信利用网络...

关键字: API 爱立信 网络 德国电信

北京2023年9月22日 /美通社/ -- 随着人工智能、云计算等技术的快速发展,算力需求爆发,服务器设计呈现多元异构特征,如何快速适配多种通用计算处理器、多种异构加速器和各类部件,实现服务器高效、稳定、可靠运行,对服务...

关键字: 三星 开源 英特尔 PEN

北京2023年9月21日 /美通社/ -- 近日,由开放数据中心委员会(ODCC)主办的2023“开放数据中心大会”在北京国际会议中心举行。今年是ODCC成立10周年,大会汇集了数据中心产业链上下游企业、科研机构、专家学...

关键字: 数据中心 TI PEN DC

北京2023年9月15日 /美通社/ -- 9月8日,2023年鲲鹏应用创新大赛陕西赛区决赛成功落幕。经过现场答辩、问题答疑等环节,软通动力"基于鲲鹏硬件的信创医共体解决方案" 最终荣获20...

关键字: 大赛 PEN 操作系统 华为

冠闵信息近年云收入保持双位数增长 北京2023年9月13日 /美通社/ -- 亚马逊云科技连续七年授予上海冠闵信息科技有限公司(以下简称:冠闵信息)托管服务提供商(MSP)认证,其借助亚马逊云科技在云能力、技术方案构建...

关键字: 亚马逊 数字化 SEARCH PEN

(全球TMT2023年9月5日讯)由全球云通信平台Infobip英富必赞助、全球领先IT市场研究和咨询公司IDC发布了题为《利用对话式商务的力量重塑用户体验》的最新市场研究,重点介绍了在亚太地区,人工智能驱动的对话式商...

关键字: 人工智能 PAAS 电子 API

(全球TMT2023年9月4日讯)8月31日,第二十五届中国国际软件博览会在天津梅江会展中心拉开帷幕。软通动力子公司鸿湖万联受邀参会,通过展示开源生态建设成果,为中国软件产业腾飞提供“加速度”。 鸿湖万联...

关键字: PEN HARMONY AI 软件
关闭
关闭