打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
μC/OS
μC/OS-Ⅱ的用户指南--函数参考手册5
(2013-01-14 13:50:50)
标签:μc/os-&8545
参考手册
函数的功能
函数的功能描述
it
分类:ucosii
参考手册
提供了μC/OS-Ⅱ的用户指南。每一个用户可以调用的内核函数都按字母顺序加以说明,包括:
l 函数的功能描述
l 函数原型
l 函数名称及源代码
l 函数使用到的常量
l 函数参数
l 函数返回值
l 特殊说明和注意点
OSTaskSuspend( )
INT8U OSTaskSuspend ( INT8U prio);
所属文件
调用者
开关量
OS_TASK.C
只能是任务
OS_TASK_SUSPEND_EN
OSTaskSuspend()无条件挂起一个任务。调用此函数的任务也可以传递参数OS_PRIO_SELF,挂起调用任务本身。当前任务挂起后,只有其他任务才能唤醒。任务挂起后,系统会重新进行任务调度,运行下一个优先级最高的就绪任务。唤醒挂起任务需要调用函数OSTaskResume ()。
任务的挂起是可以叠加到其他操作上的。例如,任务被挂起时正在进行延时操作,那么任务的唤醒就需要两个条件:延时的结束以及其他任务的唤醒操作。又如,任务被挂起时正在等待信号量,当任务从信号量的等待对列中清除后也不能立即运行,而必须等到唤醒操作后。
参数
prio为指定要获取挂起的任务优先级,也可以指定参数OS_PRIO_SELF,挂起任务本身。此时,下一个优先级最高的就绪任务将运行。
返回值
OSTaskSuspend()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_TASK_ SUSPEND_IDLE:试图挂起μC/OS-II中的空闲任务(Idle task)。此为非法操作。
l OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO或没有设定OS_PRIO_SELF的值。
l OS_TASK_ SUSPEND _PRIO:要挂起的任务不存在。
注意/警告
在程序中OSTaskSuspend()和OSTaskResume ()应该成对使用。
用OSTaskSuspend()挂起的任务只能用OSTaskResume ()唤醒。
范例:
void TaskX(void *pdata)
{
INT8U err;
for (;;) {
.
.
err = OSTaskSuspend(OS_PRIO_SELF);
.
.
.
}
}
OSTimeDly( )
void OSTimeDly ( INT16U ticks);
所属文件
调用者
开关量
OS_TIMC.C
只能是任务
OSTimeDly()将一个任务延时若干个时钟节拍。如果延时时间大于0,系统将立即进行任务调度。延时时间的长度可从0到65535个时钟节拍。延时时间0表示不进行延时,函数将立即返回调用者。延时的具体时间依赖于系统每秒钟有多少时钟节拍(由文件SO_CFG.H中的常量OS_TICKS_PER_SEC设定)。
参数
ticks为要延时的时钟节拍数。
返回值
注意/警告
注意到延时时间0表示不进行延时操作,而立即返回调用者。为了确保设定的延时时间,建议用户设定的时钟节拍数加1。例如,希望延时10个时钟节拍,可设定参数为11。
范例:
void TaskX(void *pdata)
{
for (;;) {
.
.
OSTimeDly(10);
.
.
}
}
OSTimeDlyHMSM( )
void OSTimeDlyHMSM( INT8U hours,INT8U minutes,INT8U seconds,INT8U milli);
所属文件
调用者
开关量
OS_TIMC.C
只能是任务
OSTimeDlyHMSM()将一个任务延时若干时间。延时的单位是小时、分、秒、毫秒。所以使用OSTimeDlyHMSM()比OSTimeDly()更方便。调用OSTimeDlyHMSM()后,如果延时时间不为0,系统将立即进行任务调度。
参数
hours为延时小时数,范围从0-255。
minutes为延时分钟数,范围从0-59。
seconds为延时秒数,范围从0-59
milli为延时毫秒数,范围从0-999。需要说明的是,延时操作函数都是以时钟节拍为为单位的。实际的延时时间是时钟节拍的整数倍。例如系统每次时钟节拍间隔是10ms,如果设定延时为5ms,将不产生任何延时操作,而设定延时15ms,实际的延时是两个时钟节拍,也就是20ms。
返回值
OSTimeDlyHMSM()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_TIME_INVALID_MINUTES:参数错误,分钟数大于59。
l OS_TIME_INVALID_SECONDS:参数错误,秒数大于59。
l OS_TIME_INVALID_MILLI:参数错误,毫秒数大于999。
l OS_TIME_ZERO_DLY:四个参数全为0。
注意/警告
OSTimeDlyHMSM(0,0,0,0)表示不进行延时操作,而立即返回调用者。另外,如果延时总时间超过65535个时钟节拍,将不能用OSTimeDlyResume()函数终止延时并唤醒任务。
范例:
void TaskX(void *pdata)
{
for (;;) {
.
.
OSTimeDlyHMSM(0, 0, 1, 0);
.
.
}
}
OSTimeDlyResume( )
void OSTimeDlyResume( INT8U prio);
所属文件
调用者
开关量
OS_TIMC.C
只能是任务
OSTimeDlyResume()唤醒一个用OSTimeDly()或OSTimeDlyHMSM()函数延时的任务。
参数
prio为指定要唤醒任务的优先级。
返回值
OSTimeDlyResume()的返回值为下述之一:
l OS_NO_ERR:函数调用成功。
l OS_PRIO_INVALID:参数指定的优先级大于OS_LOWEST_PRIO。
l OS_TIME_NOT_DLY:要唤醒的任务不在延时状态。
l OS_TASK_NOT_EXIST:指定的任务不存在。
注意/警告
用户不应该用OSTimeDlyResume()去唤醒一个设置了等待超时操作,并且正在等待事件发生的任务。操作的结果是使该任务结束等待,除非的确希望这么做。
OSTimeDlyResume()函数不能唤醒一个用OSTimeDlyHMSM()延时,且延时时间总计超过65535个时钟节拍的任务。例如,如果系统时钟为100Hz,OSTimeDlyResume()不能唤醒延时OSTimeDlyHMSM(0,10,55,350)或更长时间的任务。
(OSTimeDlyHMSM(0,10,55,350)共延时 [ 10 minutes *60 + (55+0.35)seconds ] *100 =65,535次时钟节拍------译者注)
范例:
void TaskX(void *pdata)
{
INT8U err;
pdata = pdata;
for (;;) {
.
err = OSTimeDlyResume(10);
if (err == OS_NO_ERR) {
.
.
}
.
}
}
OSTimeGet( )
INT32U OSTimeGet (void);
所属文件
调用者
开关量
OS_TIMC.C
任务或中断
OSTimeGet()获取当前系统时钟数值。系统时钟是一个32位的计数器,记录系统上电后或时钟重新设置后的时钟计数。
参数
无。
返回值
当前时钟计数(时钟节拍数)。
注意/警告
范例:
void TaskX(void *pdata)
{
INT32U clk;
for (;;) {
.
.
clk = OSTimeGet();
.
.
}
}
OSTimeSet( )
void OSTimeSet (INT32U ticks);
所属文件
调用者
开关量
OS_TIMC.C
任务或中断
OSTimeSet()设置当前系统时钟数值。系统时钟是一个32位的计数器,记录系统上电后或时钟重新设置后的时钟计数。
参数
ticks要设置的时钟数,单位是时钟节拍数。
返回值
无。
注意/警告
范例:
void TaskX(void *pdata)
{
for (;;) {
.
.
OSTimeSet(0L);
.
.
}
}
OSTimeTick( )
void OSTimeTick (void);
所属文件
调用者
开关量
OS_TIMC.C
任务或中断
每次时钟节拍,μC/OS-II 都将执行OSTimeTick()函数。OSTimeTick()检查处于延时状态的任务是否达到延时时间(用OSTimeDly()或OSTimeDlyHMSM()函数延时),或正在等待事件的任务是否超时。
参数
`无。
返回值
无。
注意/警告
OSTimeTick()的运行时间和系统中的任务数直接相关,在任务或中断中都可以调用。如果在任务中调用,任务的优先级应该很高(优先级数字很小),这是因为OSTimeTick()负责所有任务的延时操作。
范例:
(Intel 80x86,实模式)
TickISRPROC    FAR
PUSHA                         ; 保存CPU寄存器内容
PUSH ES
PUSH DS
;
INC  BYTE PTR _OSIntNesting   ; 标识C/OS-II进入中断处理程序
CALL FAR PTR _OSTimeTick      ; 调用时钟节拍处理函数
.                             ; 用户代码清除中断标志
.
CALL FAR PTR _OSIntExit       ; 标识C/OS-II退出中断处理程序
POP  DS                       ; 恢复CPU寄存器内容
POP  ES
POPA
;
IRET                          ; 中断返回
TickISRENDP
OSVersion( )
INT16U OSVersion (void);
所属文件
调用者
开关量
OS_CORE.C
任务或中断
OSVersion()获取当前μC/OS-II的版本。
参数
`无。
返回值
当前版本,格式为x.yy,返回值为乘以100后的数值。例如当前版本2.00,则返回200。
注意/警告
范例:
void TaskX(void *pdata)
{
INT16U os_version;
for (;;) {
.
.
os_version = OSVersion();
.
.
}
}
OS_ENTER_CRITICAL( )
OS_EXIT_CRITICAL( )
所属文件
调用者
开关量
OS_CPU.C
任务或中断
OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()为定义的宏,用来关闭、打开CPU的中断。
参数
`无。
返回值
无。
注意/警告
OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()必须成对使用。
范例:
void TaskX(void *pdata)
{
for (;;) {
.
.
OS_ENTER_CRITICAL();
.
.
.
OS_EXIT_CRITICAL();
.
.
}
}
前一篇:μC/OS-Ⅱ的用户指南--函数参考手册4
后一篇:STM32硬件调试详解
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
uC/OS-II 常用函数参考手册
uC/OS-II源码分析(一) 特点
UCOS操作系统堆栈浅谈
浅析μC/OS-ⅡAPI的设计思想及实现机制
ucos ii 46个系统API函数解析 .
一步一步教你使用uCOS
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服