请选择 进入手机版 | 继续访问电脑版
快捷导航
0 75

uC/OS-Ⅱ任务管理和时间管理

陈燕 于 2017-12-20 08:22 发表在 [技术分享] [复制链接]

注册后可查看大图哦

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 陈燕 于 2017-12-21 10:23 编辑

如果你看到我的帖子没写完,不要惊讶<_<只是因为不想保存在草稿箱中,因为之前的帖子保存为草稿,后来被覆盖没了,我很是忧伤,所以就先发了,这样一定不会丢!


一、任务管理

(一)建立任务
注:调用OSStart()前,用户必须建立至少一个任务
OSTaskCreate(); //建立任务
OSTaskCreateExt(); //建立任务更灵活

建立任务的部分代码:
  1. INT8U  OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
  2. {
  3.     OS_STK    *psp; //进程堆栈指针
  4.     INT8U      err;
  5. #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
  6.     OS_CPU_SR  cpu_sr = 0;
  7. #endif
  8. #if OS_ARG_CHK_EN > 0
  9.     if (prio > OS_LOWEST_PRIO) //优先级越低,数字越大,如果超过最低优先级,则不在允许范围内
复制代码
注:OS_ENTER_CRITICAL(); //关中断函数
       OS_EXIT_CRITICAL(); //开中断函数


(二)任务堆栈
1、静态分配堆栈 static OS_STK  TaskStack[stack_size];
2、动态
OS_STK  *pstk;
pstk = (OS_STK *)malloc(stack_size);
If (pstk != (OS_STK *)0)
{         
    Create the task;
}堆栈向上增长:
OS_CPU.H 的OS_STK_GROWTH置为0时,用户需要将堆栈的最低内存地址传递给任务创建函数;反之。

(三)删除任务
OSTaskDel();
注:是说任务将返回并处于休眠状态,而不是真正的删除
OSTaskDelReq();//请求删除任务
(四)任务优先级
OSTaskChangePrio();

(五)挂起任务
OSTaskSuspend();
注:任务可以挂起自己或其他任务;不能挂起空闲任务。
设置OS_STAT_SUSPEND标志了,以表明任务正在被挂起。

(六)恢复任务
OSTaskResume();
通过清除OSTCBStat域中的OS_STAT_SUSPEND位来取消挂起。

(七)获得任务信息
OSTaskQuery();
注:获得的是对应任务的OS_TCB中内容的拷贝,本函数是有用的调试工具。

二、延时函数

OSTimeDly();
注:期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时,它就会马上进入就绪状态。
OSTimeDlyHMSM(); //按时分秒来定义时间
OSTimeGet(); //获得计数器的当前值;
OSTimeSet(); //改变计数器的值

Connecting & Messaging from Any.

共 0 个关于本帖的回复 最后回复于 2017-12-20 08:22

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐板块

精彩推荐

热门排行

明星用户

手机版|小黑屋|AnyMSG ( ©AnyMSG 2009 - 2017 · ICP备16009991号 )

GMT+8, 2019-4-25 21:43