(一)先创建一个启动任务来进行创建其它任务,创建任务的宏定义

#define START_TASK_PRIO        3            //任务优先级
#define START_STK_SIZE 128 //任务堆栈大小
OS_TCB StartTaskTCB; //任务控制块
CPU_STK START_TASK_STK[START_STK_SIZE]; //任务堆栈
void start_task(void *p_arg); //任务函数

(一)  创建main函数,用于创建启动任务

int main(void)
{
OS_ERR err; /*初始化时候错误保存*/
CPU_SR_ALLOC(); /*声明变量,这个是进入临界区那个代码用到*/ /*硬件相关初始化*/
delay_init(); //时钟初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断分组配置
uart_init(); //串口初始化 OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER(); //进入临界区
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"start task", //任务名字
(OS_TASK_PTR )start_task, //任务函数
(void * ), //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&START_TASK_STK[], //任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/, //任务堆栈深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY ), //内部消息队列能够接收最大消息数目,为0时禁止接收
(OS_TICK ), //当使能时间片轮转时的时间片长度,为0时为默认 (void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项
(OS_ERR * )&err); //存放该函数错误时的返回值
OS_CRITICAL_EXIT(); //退出临界区
OSStart(&err); //开启UCOSIII
}

(一)  创建任务一宏定义

注意:在没有开启时间轮转调度时候优先级不要相同

#define TASK1_TASK_PRIO        4            //任务优先级
#define TASK1_STK_SIZE 128 //任务堆栈大小
OS_TCB Task1_TaskTCB; //任务控制块
CPU_STK TASK1_TASK_STK[TASK1_STK_SIZE]; //任务堆栈
void task1_task(void *p_arg); //任务函数

(一)  在启动任务函数中创建任务一

//开始任务任务函数
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 //当使用时间片轮转的时候
//使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
OSSchedRoundRobinCfg(DEF_ENABLED,,&err);
#endif OS_CRITICAL_ENTER(); //进入临界区
//创建TASK1任务
OSTaskCreate((OS_TCB * )&Task1_TaskTCB,
(CPU_CHAR * )"Task1 task",
(OS_TASK_PTR )task1_task,
(void * ),
(OS_PRIO )TASK1_TASK_PRIO,
(CPU_STK * )&TASK1_TASK_STK[],
(CPU_STK_SIZE)TASK1_STK_SIZE/,
(CPU_STK_SIZE)TASK1_STK_SIZE,
(OS_MSG_QTY ),
(OS_TICK ),
(void * ),
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err); //创建任务二执行第三点然后复制上面创建任务一的函数,修改红色字体部分。
OS_CRITICAL_EXIT(); //退出临界区
OSTaskDel((OS_TCB*),&err); //删除start_task任务自身
}

(一)  创建任务一的任务函数

//task1任务函数
void task1_task(void *p_arg)
{
u8 task1_num=;
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg; /*初始化硬件相关进入临界区*/
OS_CRITICAL_ENTER();
//硬件相关初始化在这里
OS_CRITICAL_EXIT();
while()
{
task1_num++; //任务执1行次数加1 注意task1_num1加到255的时候会清零!!
printf("任务1已经执行:%d次\r\n",task1_num);
if(task1_num==)
{
OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err); //任务1执行5此后删除掉任务2
printf("任务1删除了任务2!\r\n");
}
/*时,分,秒,毫秒*/
OSTimeDlyHMSM(,,,,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s }
}

(六)添加任务按点三四五点添加,上面程序不完整,只是示例,具体看历程创建任务与删除

最新文章

  1. 瀑布流布局(jq实现)
  2. NDK问题总结
  3. ffmpeg-20160325-snapshot-static-bin
  4. 一起做RGB-D SLAM 第二季 (二)
  5. Scala Collection简介
  6. Win7显示隐藏文件,隐藏文件夹怎么显示?如何查看?
  7. 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组
  8. ActionResult 之HttpGet HttpPost
  9. 【Scala】Scala之Control Structures
  10. Apache Storm 1.1.0 发布概览
  11. 移动端布局最佳实践(viewport+rem)
  12. session和cookie介绍以及session简单应用
  13. configparser模块(拷贝)
  14. PHP Curl模拟登录并抓取数据
  15. Openstack: MP-BIOS bug: 8254 timer not connected to IO-APIC
  16. Linux驱动基础:MSM平台AP/CP通信机制
  17. 并发库应用之五 & ReadWriteLock场景应用
  18. 一些input用法
  19. mysql的root的权限被控制无法授权
  20. 删除RAC集群节点

热门文章

  1. C++Primer 5th Chap8 The IO Library
  2. electron客户端开发
  3. Nginx学习笔记(一):Nginx 进程模型 / 事件处理模型
  4. JSON和XML格式与对象的序列化及反序列化的辅助类
  5. Abp 领域事件简单实践 <三> 自定义事件
  6. VBA术语(三)
  7. 关于Vue中,在方法中使用(操作)子组件获取到的数据
  8. 周伯通的空明拳,米诺斯的星尘傀儡线,SAP Kyma的Serverless
  9. 6.Java集合-LinkedList实现原理及源码分析
  10. selenium重定向新窗口