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

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

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

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

(一)  创建任务一宏定义

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

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

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

  1. //开始任务任务函数
  2. void start_task(void *p_arg)
  3. {
  4. OS_ERR err;
  5. CPU_SR_ALLOC();
  6. p_arg = p_arg;
  7. CPU_Init();
  8. #if OS_CFG_STAT_TASK_EN > 0u
  9. OSStatTaskCPUUsageInit(&err); //统计任务
  10. #endif
  11.  
  12. #ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间
  13. CPU_IntDisMeasMaxCurReset();
  14. #endif
  15.  
  16. #if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候
  17. //使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
  18. OSSchedRoundRobinCfg(DEF_ENABLED,,&err);
  19. #endif
  20.  
  21. OS_CRITICAL_ENTER(); //进入临界区
  22. //创建TASK1任务
  23. OSTaskCreate((OS_TCB * )&Task1_TaskTCB,
  24. (CPU_CHAR * )"Task1 task",
  25. (OS_TASK_PTR )task1_task,
  26. (void * ),
  27. (OS_PRIO )TASK1_TASK_PRIO,
  28. (CPU_STK * )&TASK1_TASK_STK[],
  29. (CPU_STK_SIZE)TASK1_STK_SIZE/,
  30. (CPU_STK_SIZE)TASK1_STK_SIZE,
  31. (OS_MSG_QTY ),
  32. (OS_TICK ),
  33. (void * ),
  34. (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  35. (OS_ERR * )&err);
  36.  
  37. //创建任务二执行第三点然后复制上面创建任务一的函数,修改红色字体部分。
  38. OS_CRITICAL_EXIT(); //退出临界区
  39. OSTaskDel((OS_TCB*),&err); //删除start_task任务自身
  40. }

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

  1. //task1任务函数
  2. void task1_task(void *p_arg)
  3. {
  4. u8 task1_num=;
  5. OS_ERR err;
  6. CPU_SR_ALLOC();
  7. p_arg = p_arg;
  8.  
  9. /*初始化硬件相关进入临界区*/
  10. OS_CRITICAL_ENTER();
  11. //硬件相关初始化在这里
  12. OS_CRITICAL_EXIT();
  13. while()
  14. {
  15. task1_num++; //任务执1行次数加1 注意task1_num1加到255的时候会清零!!
  16. printf("任务1已经执行:%d次\r\n",task1_num);
  17. if(task1_num==)
  18. {
  19. OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err); //任务1执行5此后删除掉任务2
  20. printf("任务1删除了任务2!\r\n");
  21. }
  22. /*时,分,秒,毫秒*/
  23. OSTimeDlyHMSM(,,,,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s
  24.  
  25. }
  26. }

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

002_UCOSIII任务创建于删除的更多相关文章

  1. linux命令 - ln - 创建和删除软、硬链接

    linux命令 - ln - 创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件 ...

  2. 各种隐藏 WebShell、创建、删除畸形目录、特殊文件名、黑帽SEO作弊(转自核大大)

    其实这个问题,经常有朋友问我,我也都帮大家解决了…… 但是现在这些现象越来越严重,而且手法毒辣.隐蔽.变态,清除了又来了,删掉了又恢复了,最后直接找不到文件了,但是访问网站还在,急的各大管理员.站长抓 ...

  3. DOM创建和删除节点、HTML DOM常用对象[转]

    创建和删除节点:——核心DOM   1. 创建单个元素节点:3步:      1. 创建空元素节点对象:         var elem=document.createElement("标 ...

  4. MySQL索引的创建、删除和查看

    MySQL索引的创建.删除和查看 此文转自http://blogold.chinaunix.net/u3/93470/showart_2001536.html 1.索引作用 在索引列上,除了上面提到的 ...

  5. linux下创建和删除软、硬链接

    linux下创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制 ...

  6. git创建和删除远程分支

    问题描述:           使用git创建和删除远程分支 问题解决:              (1)git创建本地分支 注:            如上所示,使用命令 git branch -a ...

  7. oracl使用DataBase Configuration Assistant创建、删除数据库

    原文:oracl使用DataBase Configuration Assistant创建.删除数据库 可以使用DataBase Configuration Assistant来创建一个心得数据库.Da ...

  8. Java文件File操作一:文件的创建和删除

    一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...

  9. [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动

    觉得这个很常用..比如一些软件.   http://www.rabbit8.cn/DoNet/407.html   FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...

随机推荐

  1. 新浪sae对storage的文档进行读写操作

    有的人喜欢将一些数据写在服务器的文件里面,并不喜欢存在mysql里,但新浪sae却不支持对本地文件进行操作. 不过sae拓展了一个storage的服务,可以将一些静态文件放在上面.本文不介绍文件的上传 ...

  2. MongoDB 逻辑运算符

    逻辑与   $and:要求满足所有查询条件 ,否则返回空 语法:db.集合名.find{ $and: [ { <expression1> }, { <expression2>  ...

  3. TZOJ1294吃糖果

    #include<stdio.h> int main() { ],mi,i,max,s; scanf("%d",&t); while(t--) { scanf( ...

  4. 第八讲,TLS表(线程局部存储)

    一丶复习线程相关知识 首先讲解TLS的时候,需要复习线程相关知识,  (thread local storage ) 1.了解经典同步问题 首先我们先写一段C++代码,开辟两个线程去跑,看看会不会出现 ...

  5. 修改下jsp 默认编码,避免被坑

    修改下jsp 默认编码 ![](http://images2017.cnblogs.com/blog/1128666/201710/1128666-20171017143745927-14235413 ...

  6. Lua table直接索引VS缓存索引性能测试小示例

    local p = {} p.t = {} p.t.p = {} p.t.p.t = {} p.t.p.t.p = {} p.t.p.t.p.t = {} p.t.p.t.p.t.p = {} p.t ...

  7. js监听audio播放完毕

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. elment 中tree组件展开所有和收缩所有

    upAll () { // 全部展开 遍历变成true let self = this; // 将没有转换成树的原数据 let treeList = this.sourceData; for (let ...

  9. openssh升级

    转载:(感谢作者) centos7 升级openssh到openssh-8.0p1版本 https://www.cnblogs.com/nmap/p/10779658.html centos 7 op ...

  10. java中i=i++的问题

    java中 i = i++ 的结果 昨天看到下面这段代码,分享出来给大家看看,大家也可以讨论讨论. int i = 0; i = i++; System.out.println("i的值是 ...