UCOS III创建一个基础的任务

 声明一下:这里用的是原子的教程和代码。

ucos iii有5个系统任务:空闲任务,时钟节拍任务,统计任务,定时任务,中断服务管理任务。而在系统初始化的时候最少哦要创建两个任务:空闲任务和时钟节拍任务。空闲任务的优先级应为最低OS_CFG_PRIO_MAX(默认为256)-1,中断服务管理任务的优先级应为0(最高),统计任务应为OS_CFG_PRIO_MAX-2,时钟节拍任务应为1

在ucos iii中创建任务一般在main文件上,在main()函数前通过宏定义一些任务的参数

定义任务的优先级,任务堆栈大小,创建任务控制块结构体,定义任务堆栈空间,申明任务函数。不过要注意在OSStart()(就是正式开启ucos iii)前只能创建一个任务,我们一般在main函数中创建一个start_task()开始任务,其它的任务在开始任务创建。

main()函数例程

int main(void){
    OS_ERR err;             //很重要的变量,用来存放函数错误是的返回值。
    CPU_SR_ALLOC();
    delay_init();         //时钟初始化。
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组配置。
    
    OSInit(&err);        //初始化UCOSIII
    OS_CRITICAL_ENTER();   //进入临界区
    
    OSTaskCreate(            //创建开始任务。
            (OS_TCB *)&StartTaskTCB,       //任务控制块
            (CPU_CHAR *)"start task",    //任务名字(不知道有什么用)
            (void *) 0,                //传递给任务函数的参数
            (OS_PRIO )START_TASK_PRIO,   //任务的优先级(前面 宏定义了)
            (CPU_STK *)&START_TASK_STK[0],   //任务堆栈的基地址。
            (CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈的深度限位
            (CPU_STK_SIZE)START_STK_SIZE,    //任务堆栈大小
            (OS_MSG_QTY) 0,               //任务内部消息队列能接受的最大的消息数目,为0是禁止接收
            (OS_TICK ) 0,              //当时间片轮转时的时间长度,为0时为默认长度
            (void *) 0,             //用户补充的存储区
            (OS_OPT ) OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   //任务选项
            (OS_ERR *)&ERR);         //存放任务错误时的返回值
    OS_CRITICAL_EXIT();        //退出临界区
    OSStart(&err);         //开启UCOS III
    while(1);
}

 注意事项

  1. CPU_Init()函数会创建空闲任务。
  2. 在创建任务前要进入临界区,就是要调用OS_CRITICAL_ENTER()函数,结束要掉用OS_CRITICAL_EXIT()函数退出临界区。

 补充:

  • 任务状态:休眠态,就绪态,运行态,等待态,中断服务态。
  • 原子的UCOSIII任务时间片默认是5ms
  • 延时函数是OSTimeDlyHMSM().
    • 例子:OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s。
  • 删除任务时调用:OSTaskDel()函数
    • 例子:OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err);  //参数写入要删除的任务控制块地址
  • 挂起任务调用:OSTaskSuspend(),恢复任务调用:OSTaskResume()函数
    • 挂起任务:OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);
    • 恢复任务:OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);
    • OSTaskResume()函数只能恢复OSTaskSuspend()挂起的函数。
  • 任务选项的代表的含义
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值