UCOS-II操作系统第11章
更新时间:2023-05-25 23:41:01 阅读量: 实用文档 文档下载
UCOS-II操作系统
开发板精品网
第11章
参考手册
本章提供了μC/OS-每一个用户可以调用的内核函数都按字母顺序加C/OS-Ⅱ的用户指南。
以说明,包括:
函数的功能描述 函数原型
函数名称及源代码 函数使用到的常量 函数参数 函数返回值
特殊说明和注意点
UCOS-II操作系统
264-μC/OS-II:实时操作系统内核
UCOS-II操作系统
参考手册-265
OSInit( )
所属文件
OS_CORE.C
Void OSInit(void);
调用者
开关量
启动代码 无
OSinit()初始化μC/OS-Ⅱ,对这个函数的调用必须在调用OSStart()函数之前,而OSStart()函数真正开始运行多任务。
参数
无
返回值
无
注意/警告
必须先于OSStart()函数的调用
范例:范例:
void main (void) { . .
OSInit(); /* 初始化 uC/OS-II */ . .
OSStart(); /*启动多任务内核 */ }
UCOS-II操作系统
266-μC/OS-II:实时操作系统内核
OSIntEnter( )
所属文件
OS_CORE.C
Void OSIntEnter(void);
调用者
开关量
中断 无
OSIntEnter()通知μC/OS-Ⅱ一个中断处理函数正在执行,这有助于μC/OS-Ⅱ掌握中断嵌套的情况。OSIntEnter()函数通常和OSIntExit()函数联合使用。
参数
无
返回值
无
注意/警告
在任务级不能调用该函数。
如果系统使用的处理器能够执行自动的独立执行读取-修改-写入的操作,那么就可以直接递增中断嵌套层数(OSIntNesting),这样可以避免调用函数所带来的额外的开销。
范例一:范例一:
(Intel 80x86的实模式, 在大模式下编译,,real mode,large model) 在大模式下编译,
ISRx PROC FAR
PUSHA ; 保存中断现场 PUSH ES PUSH DS ;
MOV AX, DGROUP ; 读入数据段 MOV DS, AX ;
CALL FAR PTR _OSIntEnter ; 通知内核进入中断 . .
POP DS ; 恢复中断现场
UCOS-II操作系统
参考手册-267
POP ES POPA
IRET ; 中断返回 ISRx ENDP
范例二:范例二:
(Intel 80x86的实模式, 在大模式下编译,在大模式下编译,, real mode , large model)
ISRx PROC FAR
PUSHA ; 保存中断现场 PUSH ES PUSH DS ;
MOV AX, DGROUP ; 读入数据段 MOV DS, AX ;
INC BYTE PTR _OSIntNesting ; 通知内核进入中断 . . .
POP DS ; 恢复中断现场 POP ES POPA
IRET ; 中断返回 ISRx ENDP
UCOS-II操作系统
268-μC/OS-II:实时操作系统内核
OSIntExit( )
所属文件
OS_CORE.C
Void OSIntExit(void);
调用者
开关量
中断 无
OSIntExit()通知μC/OS-Ⅱ一个中断服务已执行完毕,这有助于μC/OS-Ⅱ掌握中断嵌套的情况。通常OSIntExit()和OSIntEnter()联合使用。当最后一层嵌套的中断执行完毕后,如果有更高优先级的任务准备就绪,μC/OS-高优先级的任务而不是被中断了的任务。
参数
无
返回值
无
注意/警告
在任务级不能调用该函数。并且即使没有调用的方法,也必须调用OSIntExit()函数。
在这种情况下,OSIntEnter()而是使用直接递增中断返回到更OSIntNestingⅡ会调用任务调度函数,
UCOS-II操作系统
参考手册-269
范例:范例:
(Intel 80x86 的实模式, 在大模式下编译,在大模式下编译, real mode , large model)
ISRx PROC FAR
PUSHA ; 保存中断现场 PUSH ES PUSH DS . .
CALL FAR PTR _OSIntExit ; 通知内核进入中断 POP DS ; 恢复中断现场 POP ES POPA
IRET ; 中断返回 ISRx ENDP
UCOS-II操作系统
270-μC/OS-II:实时操作系统内核
OSMboxAccept( )
Void *OSMboxAccept(OS_EVENT *pevent);
所属文件 调用者 开关量
OS_MBOX_EN 任务或中断
OSMboxAccept()函数查看指定的消息邮箱是否有需要的消息。不同于OSMboxPend()函数,OS_MBOX.C
如果没有需要的消息,递到用户任务并且从消息邮箱中清除。通常中断调用该函数,因为中断不允许挂起等待消息。
参数
pevent 是指向需要查看的消息邮箱的指针。OSMboxCreate()函数)
返回值
如果消息已经到达,返回指向该消息的指针;如果消息邮箱没有消息,返回空指针。
注意/警告
必须先建立消息邮箱,然后使用。
OSMboxAccept()函数并不挂起任务。如果消息已经到达,该消息被传 当建立消息邮箱时,该指针返回到用户程序。(参考。
UCOS-II操作系统
参考手册-271
范例:范例:
OS_EVENT *CommMbox;
void Task (void *pdata) {
void *msg;
pdata = pdata; for (;;) {
msg = OSMboxAccept(CommMbox); /* 检查消息邮箱是否有消息 if (msg != (void *)0) {
. /* 处理消息 . } else {
. /*没有消息 . } . . } }
*/ */ */
UCOS-II操作系统
272-μC/OS-II:实时操作系统内核
OSMboxCreate( )
OS_EVENT *OSMboxCreate(void *msg);
调用者 开关量量 OS_MBOX_EN 任务或启动代码
OSMboxCreate()建立并初始化一个消息邮箱。消息邮箱允许任务或中断向其他一个或几个任务发送消息。
OS_MBOX.C
参数
msg 参数用来初始化建立的消息邮箱。如果该指针不为空,建立的消息邮箱将含有消息。
返回值
指向分配给所建立的消息邮箱的事件控制块的指针。如果没有可用的事件控制块,返回空指针。
注意/警告
必须先建立消息邮箱,然后使用。
UCOS-II操作系统
参考手册-273
范例:范例:
OS_EVENT *CommMbox;
void main(void) { . .
OSInit(); /* 初始化μC/OS-Ⅱ */ . .
CommMbox = OSMboxCreate((void *)0); /* 建立消息邮箱 */ OSStart(); /* 启动多任务内核 */ }
UCOS-II操作系统
274-μC/OS-II:实时操作系统内核
OSMboxPend( )
Void *OSMboxPend ( OS_EVNNT *pevent, INT16U timeout, int8u *err );
所属文件 调用者 开关量
OS_MBOX_EN 任务
OSMboxPend()用于任务等待消息。消息通过中断或另外的任务发送给需要的任务。消息是一OS_MBOX.C
个以指针定义的变量,在不同的程序中消息的使用也可能不同。如果调用数时消息邮箱已经存在需要的消息,那么该消息被返回给OSMboxPend箱中清除该消息。如果调用OSMboxPend()函数时消息邮箱中没有需要的消息,()函数挂起当前任务直到得到需要的消息或超出定义等待超时的时间。如果同时有多个任务等待同一个消息,μC/OS-Ⅱ默认最高优先级的任务取得消息并且任务恢复执行。一个由OSTaskSuspend()函数挂起的任务也可以接受消息,但这个任务将一直保持挂起状态直到通过调用OSTaskResume()函数恢复任务的运行。
参数
pevent 是指向即将接受消息的消息邮箱的指针。该指针的值在建立该消息邮箱时可以得到。(参考OSMboxCreate()函数)。
Timeout 允许一个任务在经过了指定数目的时钟节拍后还没有得到需要的消息时恢复运行果该值为零表示任务将持续的等待消息。最大的等待时间为65,535个时钟节拍。这个时间长度并不是非常严格的,可能存在一个时钟节拍的误差,因为只有在一个时钟节拍结束后才会减少定义的等待超时时钟节拍。
Err 是指向包含错误码的变量的指针。OSMboxPend()函数返回的错误码可能为下述几种: OS_NO_ERR :消息被正确的接受。
OS_TIMEOUT :消息没有在指定的周期数内送到。
OS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从中断调用该函数,但μ
C/OS-Ⅱ仍然包含了检测这种情况的功能。
OS_ERR_EVENT_TYPE :pevent 不是指向消息邮箱的指针。
返回值
OSMboxPend()函数返回接受的消息并将 *err置为OS_NO_ERR。如果没有在指定数目的时钟节拍内接受到需要的消息,OSMboxPend()函数返回空指针OS_TIMEOUT。
注意/警告
必须先建立消息邮箱,然后使用。 不允许从中断调用该函数。
OSMboxPend()函OSMboxPend。如 且将 *err设置为()的调用者,消息邮并
UCOS-II操作系统
参考手册-275
范例:范例:
OS_EVENT *CommMbox;
void CommTask(void *pdata) {
INT8U err; void *msg;
pdata = pdata; for (;;) { . .
msg = OSMboxPend(CommMbox, 10, &err); if (err == OS_NO_ERR) { .
. /* 消息正确的接受 */ . } else { .
. /* 在指定时间内没有接受到消息*/ . } . . } }
UCOS-II操作系统
276-μC/OS-II:实时操作系统内核
OSMboxPost( )
INT8U OSMboxPost(OS_EVENT *pevent, void *msg);
所属文件 调用者 开关量
OS_MBOX_EN 任务或中断
OSMboxPost()函数通过消息邮箱向任务发送消息。消息是一个指针长度的变量,在不同的程OS_MBOX.C
序中消息的使用也可能不同。如果消息邮箱中已经存在消息,返回错误码说明消息邮箱已OSMboxPost()函数立即返回调用者,消息也没有能够发到消息邮箱。如果有任消息邮箱的消息,最高优先级的任务将得到这个消息。如果等待消息的任务优先级的任务优先级高,那么高优先级的任务将得到消息而恢复执行,也就是说,发换。
参数
pevent 是指向即将接受消息的消息邮箱的指针。该指针的值在建立该消息邮箱时可以得到。(参考OSMboxCreate()函数)
Msg 是即将实际发送给任务的消息。消息是一个指针长度的变量,在不同的程序中消息的使用也可能不同。不允许传递一个空指针,因为这意返回值
OSMboxPost()函数的返回值为下述之一: OS_NO_ERR :消息成功的 OS_MBOX_FULL :消息邮箱已经包含了其他消息,不空。 OS_ERR_EVENT_TYPE 注意/警告
必须先建立消息邮箱,然后使用。不允许传递一个空指针,因为这意满。何任务在等待比发送消息生了一次任务切 味着消息邮箱为空。
到消息邮箱中。
pevent 不是指向消息邮箱的指针。
味着消息邮箱为空。
。放 :
UCOS-II操作系统
参考手册-277
范例:范例:
OS_EVENT *CommMbox; INT8U CommRxBuf[100];
void CommTaskRx(void *pdata) {
INT8U err;
pdata = pdata; for (;;) { . .
err = OSMboxPost(CommMbox, (void *)&CommRxBuf[0]); . . } }
UCOS-II操作系统
278-μC/OS-II:实时操作系统内核
OSMboxQuery( )
INT8U OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata);
所属文件 调用者 开关量
OS_MBOX_EN 任务或中断
OSMboxQuery()函数用来取得消息邮箱的信息。用户程序必须分配一个OS_MBOX_DATA的OS_MBOX.C
数据结构,该结构用来从消息邮箱的事件控制块接受数以知道任务是否在等待消息以及有多少个任务在等待消息,还可以
参数
pevent 是指向即将接受消息的消息邮箱的指针。该指针的值在建立该消息邮箱时可以得到。(参考OSMboxCreate()函数)。
Pdata 是指向OS_MBOX_DATA数据结构的指针,该数 Void *OSMsg; /* 消息邮箱中消息的复制 INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; INT8U OSEventGrp;
返回值
OSMboxQuery()函数的返回值为下述之一: OS_NO_ERR :调用成功
OS_ERR_EVENT_TYPE :pevent 不是指向消息邮箱的指针。注意/警告
必须先建立消息邮箱,然后使用。
据。通过调用OSMboxQuery()函数可检查消息邮箱现在的消息。 据结构包含下述成员: */ /*消息邮箱等待队列的复制*/
UCOS-II操作系统
参考手册-279
范例:范例:
OS_EVENT *CommMbox;
void Task (void *pdata) {
OS_MBOXDATA mbox_data; INT8U err;
pdata = pdata; for (;;) { . .
err = OSMboxQuery(CommMbox, &mbox_data); if (err == OS_NO_ERR) {
. /* 如果mbox_data.OSMsg为非空指针,说明消息邮箱非空*/ } . . } }
UCOS-II操作系统
280-μC/OS-II:实时操作系统内核
OSMemCreate( )
OS_MEM *OSMemCreate( void *addr, INT32U nblks ,INT32U blksize, INT8U *err);
所属文件 调用者 开关量
OS_/MEM_EN 任务或初始代码
OSMemCreate()函数建立并初始化一块内存区。一块内存区包含指定数目的大小确定的内存OS_MEM.C
块。程序可以包含这些内存块并在用完后
参数
addr 建立的内存区的起始地址建立。
Nblks 需要的内存块的数目。Blksize 每个内存块的大小,最少Err 是指向包含错误码的变量的指针。OS_NO_ERR :成功建立内存OS_MEM_INVALID_PART :没有空OS_MEM_INVALID_BLKS :没有为OS_MEM_INVALID_SIZE :
返回值
OSMemCreate()函数返回指向函数返回空指针。
注意/警告
必须首先建立内存区,然后使用。
释放回内存区。 内存区可以使用静态数组或在初始化时使用一个内存区最少需要定义两个应该能够容纳一个指针。 OSMemCreate()函数返回的错误码可能为下述几种:
闲的内存区。
每一个内存区建立至少两小不足以容纳一个指针变量。存区控制块的指针。如果没有 malloc()函数 区,OSMemCreate()。每内存块。区。个内存块。内存块大 内剩余内存
UCOS-II操作系统
参考手册-281
范例:范例:
OS_MEM *CommMem;
INT8U CommBuf[16][128];
void main(void) {
INT8U err;
OSInit(); /* 初始化μC/OS-Ⅱ */ . .
CommMem = OSMemCreate(&CommBuf[0][0], 16, 128, &err); . .
OSStart(); /* 启动多任务内核 */ }
UCOS-II操作系统
282-μC/OS-II:实时操作系统内核
OSMemGet( )
Void *OSMemGet(OS_MEM *pmem, INT8U *err);
所属文件 调用者 开关量
OS_MEM_EN 任务或中断
OSMemGet()函数用于从内存区分配一个内存块。用户程序必须知道所建立的内存块的大小,OS_MEM.C
同时用户程序必须在使用完内存块后
参数
pmem 是指向内存区控制块的指针,可以从Err 是指向包含错误码的变量的指针。 OS_NO_ERR :成功得到一个 OS_MEM_NO_FREE_BLKS 返回值
OSMemGet()函数返回指向内存数返回空指针。
注意/警告
必须首先建立内存区,然后使用。
释放内存块。可以多次OSMemCreate()函数返回得到。OSMemGet(函数返回的错误码可能为下述几种:存块。
内存区已经没有空间分配给块的指针。如果没有空间分配给OSMemGet()函数。
存块。
内存块,OSMemGet()函调用内:内区
UCOS-II操作系统
参考手册-283
范例:范例:
OS_MEM *CommMem;
void Task (void *pdata) {
INT8U *msg;
pdata = pdata; for (;;) {
msg = OSMemGet(CommMem, &err); if (msg != (INT8U *)0) {
. /* 内存块已经分配 */ . } . . } }
正在阅读:
UCOS-II操作系统第11章05-25
2019小学生一年级关于我的朋友的作文06-14
平江县职称论文发表网-课程教学高中历史发散式教学法论文选题题目04-30
电子信息专业认知报告05-22
爸爸我想对你说作文400字02-04
中药制剂分析_尹华_第四章习题04-30
传感器复习题目(1)10-09
关于流浪狗的作文700字07-02
2017年版中国活性炭行业调查报告目录07-10
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 操作系统
- UCOS
- II
- 孟子国家学说的逻辑构成_从孔子到孟子(二)
- 沃尔玛国际市场营销战略
- 第三方支付法律监管问题——周厚军
- 基于灰色关联的北京郊野公园常见植物群落景观质量评价
- 你是我不经意的想起,不经意的痛
- 政法学院学生会办公室3月工作计划
- 2015上海事业单位考试备考真题及解析
- 传感器原理及工程应用设计
- 15-1-16圆锥曲线部分经典题目练习
- 超市会计如何做账务处理
- 员工离职对企业影响的成本效益分析
- 浅谈移动互联网时代产品运营
- 四川大学大学物理波动与光期末考试试题
- 第十章排列组合和概率(第7课)组合(1)--2004-12-14
- 四下数学培优补差记录表
- 宏观经济学名词解释总结版
- DIY化妆品行业环境分析报告
- 南京中商半年报摘要
- 安全标准化管理程序文件-05-文件控制程序
- 作业:一个财务总监的道德使命