UCOSIII(一)常用函数积累

UCOSIII任务初始宏定义

#define TASK_PRIO        3       //任务优先级

#define TASK_STK_SIZE    128     //任务堆栈大小    

OS_TCB TASKTCB;                  //任务控制块

CPU_STK TASK_STK[TASK_STK_SIZE]; //任务堆栈    

void task(void *p_arg);          //任务函数

创建开始任务函数

OS_ERR err;    //创建返回任务错误的变量
CPU_SR_ALLOC();//为临界区申请变量


//在主函数开始这个任务

OSInit(&err);          //初始化UCOSIII
OS_CRITICAL_ENTER();   //进入临界区

    //创建开始任务
    OSTaskCreate((OS_TCB     * )&TASKTCB,       //任务控制块,用存储任务信息
                 (CPU_CHAR    *)"task",         //任务名字
                 (OS_TASK_PTR  )task,           //任务函数
                 (void       * )0,              //传递给任务函数的参数
                 (OS_PRIO      )TASK_PRIO,      //任务优先级
                 (CPU_STK   *  )&TASK_STK[0],   //任务堆栈基地址
                 (CPU_STK_SIZE )TASK_STK_SIZE/10, //任务堆栈深度限位
                 (CPU_STK_SIZE )TASK_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_OPT_TASK_SAVE_FP, //任务选项,为了保险起见,所有任务都保存浮点寄存器的值
                 (OS_ERR     * )&err);          //存放该函数错误时的返回值
 OS_CRITICAL_EXIT();    //退出临界区     
 OSStart(&err);      //开启UCOSIII

 在开始任务中定义其他任务

void start_task(void *p_arg)
{
    OS_ERR err;
    CPU_SR_ALLOC();
    p_arg = p_arg;

    CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); //统计任务 #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间 CPU_IntDisMeasMaxCurReset(); #endif #if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候 //使能时间片轮转调度功能,设置默认的时间片长度 OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); #endif OS_CRITICAL_ENTER(); //进入临界区 //创建TASK1任务 //此处省略 //创建TASK2任务 OS_CRITICAL_EXIT(); //退出临界区 OSTaskDel((OS_TCB*)0,&err); //删除start_task任务自身 }

其他任务函数

void task1_task(void *p_arg)
{
    
    OS_ERR err;
    CPU_SR_ALLOC();
    p_arg = p_arg;
    
    
    OS_CRITICAL_ENTER();
    
    OS_CRITICAL_EXIT();
while(1) { OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } }

 main函数

  OS_ERR  err;
  CPU_SR_ALLOC();
    
  Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz   
  HAL_Init();                     //初始化HAL库
  delay_init(180);                //初始化延时函数
  uart_init(115200);              //初始化USART
  LED_Init();                     //初始化LED 
  OSInit(&err);
    
  OS_CRITICAL_ENTER();//进入代码临界保护区
    
  OSTaskCreate (&START_TASK_TCB, (CPU_CHAR *)"start_task",start_task,0,START_TASK_PRIO,START_TASK_STK,START_TASK_STK_SIZE/10,START_TASK_STK_SIZE,0, 0,0,OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,&err);
    
  OS_CRITICAL_EXIT();//退出代码临界保护区
  OSStart(&err);      //开启UCOSIII
  while(1);
原文地址:https://www.cnblogs.com/CaiFengYuanXing/p/13704487.html