一、实验说明:

  本例程建立三个任务,通过任务寄存器来实现任务的建立与删除功能。红灯和绿灯同时以固定

频率闪烁,当任务寄存器为5时,删除绿灯闪烁的任务LED1,此时只有红灯闪烁,当任务寄存器的

值为10时,创建绿灯闪烁任务,红绿灯又开始同时闪烁,如此循环往复执行。

二、源代码下载链接:

链接:https://pan.baidu.com/s/1c39VF4c 密码:zhkb

三、核心代码:

  1. /*
  2. * Name : main
  3. * Description : ---
  4. * Author : zh.
  5. *
  6. * History
  7. * --------------------
  8. * Rev : 0.00
  9. * Date : 07/12/2017
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. /*实验现象:
  15. 红灯和绿灯同时以固定频率闪烁;当任务寄存器为5时,删除绿灯闪烁的任务LED1,
  16. 此时只有红灯闪烁;当任务寄存器的值为10时,创建绿灯闪烁任务,红绿灯又开始
  17. 同时闪烁;如此循环往复的执行。
  18. */
  19. int main(void)
  20. {
  21. system_clock.initialize(); //系统时钟初始化
  22. led.initialize(); //LED初始化
  23. usart6.initialize(); //串口初始化
  24.  
  25. OSInit(); //UCOS初始化
  26. OSTaskCreate(start_task, //创建开始任务
  27. (void*), //任务参数
  28. (OS_STK*)&START_TASK_STK[START_STK_SIZE-], //任务堆栈
  29. START_TASK_PRIO); //任务优先级
  30. OSStart(); //开启UCOS
  31. }
  1. /*
  2. * Name : start_task
  3. * Description : ---
  4. * Author : liu.
  5. *
  6. * History
  7. * --------------------
  8. * Rev : 0.00
  9. * Date : 07/12/2017
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. void start_task(void *pdata)
  15. {
  16. OS_CPU_SR cpu_sr;
  17.  
  18. OSStatInit();//初始化统计任务
  19.  
  20. OS_ENTER_CRITICAL();//关中断
  21.  
  22. OSTaskCreate(led0_task,(void*),(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-],LED0_TASK_PRIO);//创建LED0任务
  23. OSTaskCreate(led1_task,(void*),(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-],LED1_TASK_PRIO);//创建LED1任务
  24. OSTaskCreate(usart_task,(void*),(OS_STK*)&USART_TASK_STK[USART_STK_SIZE-],USART_TASK_PRIO);//创建usart任务
  25. OSTaskSuspend(OS_PRIO_SELF);//挂起start_task任务
  26.  
  27. OS_EXIT_CRITICAL();//开中断
  28. }
  1. /*
  2. * Name : led0_task
  3. * Description : ---
  4. * Author : liu.
  5. *
  6. * History
  7. * --------------------
  8. * Rev : 0.00
  9. * Date : 07/12/2017
  10. *
  11. * create.
  12. * --------------------
  13. */
  14. void led0_task(void *pdata)
  15. {
  16. INT8U err; //定义错误类型
  17. INT8U value = ; //定义寄存器的值
  18.  
  19. while(){
  20. value = OSTaskRegGet ( , , & err ); //获取该任务寄存器的值
  21. if ( value < ){
  22. OSTaskRegSet ( , , ++ value, & err );//寄存器的值加一
  23. if(value == ){
  24. OSTaskDelReq(LED1_TASK_PRIO); //发送删除LED1任务请求,任务睡眠,无法恢复
  25. }else if(value == ){
  26. OSTaskRegSet ( , , , & err ); //寄存器值置零
  27. OSTaskCreate(led1_task,
  28. (void*),
  29. (OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-],
  30. LED1_TASK_PRIO); //创建LED1任务
  31. }
  32. }
  33. LED_RED_ON; //红灯亮
  34. OSTimeDlyHMSM(,,,); //延时500ms
  35. LED_RED_OFF; //红灯灭
  36. OSTimeDlyHMSM(,,,); //延时500ms
  37. }
  38. }
  39. /*
  40. * Name : led_task
  41. * Description : ---
  42. * Author : liu.
  43. *
  44. * History
  45. * --------------------
  46. * Rev : 0.00
  47. * Date : 07/12/2017
  48. *
  49. * create.
  50. * --------------------
  51. */
  52. void led1_task(void *pdata)
  53. {
  54. while(){
  55. if(OSTaskDelReq(OS_PRIO_SELF)==OS_ERR_TASK_DEL_REQ){//判断是否有删除任务的请求
  56. OSTaskDel(OS_PRIO_SELF); //删除任务本身TaskLed
  57. }
  58. LED_GREEN_ON; //绿灯亮
  59. OSTimeDlyHMSM(,,,); //延时1000ms
  60. LED_GREEN_OFF; //绿灯灭
  61. OSTimeDlyHMSM(,,,); //延时1000ms
  62. }
  63. }
  64. /*
  65. * Name : usart_task
  66. * Description : ---
  67. * Author : liu.
  68. *
  69. * History
  70. * --------------------
  71. * Rev : 0.00
  72. * Date : 07/12/2017
  73. *
  74. * create.
  75. * --------------------
  76. */
  77. void usart_task(void *pdata)
  78. {
  79. double f=0.1;
  80.  
  81. while(){
  82. f+=0.1f; //浮点型运算
  83. usart6.printf("float f=%.4f\r\n",f); //串口输出
  84. OSTimeDlyHMSM(,,,); //延时500ms
  85. }
  86. }

iCore4链接:

【iCore4 双核心板_uC/OS-II】例程二:任务的建立与删除的更多相关文章

  1. 【iCore4 双核心板_uC/OS-II】例程四:软件定时器

    一.实验说明: 一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的 延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁. ...

  2. 【iCore4 双核心板_uC/OS-II】例程十一:内存管理

    一.实验说明: 应用程序在运行中为了某种特殊需要,经常需要临时获得一些内存空间.而作为比较完善的操作系统uC/OS-II,也具有动态分配内存的能力. uC/OS-II对内存进行两级管理:把连续内存分成 ...

  3. 【iCore4 双核心板_uC/OS-II】例程十:信号量集

    一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验 ...

  4. 【iCore4 双核心板_uC/OS-II】例程九:消息队列

    一.实验说明: 前面介绍通过信息传递可以进行任务间的交流,信息也可以直接发送给一个任务,在uC/OS-II中每一个任务在它们内部都有一个消息队列,也即任务消息队列,用户可以直接给一个任务发送消息,不需 ...

  5. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱

    一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构.   二.实验截图:   ...

  6. 【iCore4 双核心板_uC/OS-II】例程七:互斥信号量

    一.实验说明: 在介绍互斥信号量前,我们先简单地描述一下什么是优先级反转.使用实时内核心,优先级反转问题是实时系统中出现得最多的问题.假设任务H优先级高于任务M,任务M优先级高于任务L.任务H和任务M ...

  7. 【iCore4 双核心板_uC/OS-II】例程六:信号量——任务同步

    一.实验说明: 信号量是一个多任务内核提出的一个协议机构,上一个实验中我们介绍了信号量访问共享资源 的功能,其实信号量最初是用来控制访问共享资源的,它还可以用来同步一个中断服务函数和一个任 务,或者同 ...

  8. 【iCore4 双核心板_uC/OS-II】例程五:信号量——共享资源

    一.实验说明: 信号量是操作系统中的一类事件,是实现任务间通信的一个中间环节.当系统中的多个任务 在运行时,经常需要互相无冲突地访问同一个资源,或者需要互相支持的依赖,甚至有时还要互 相加以必要的限制 ...

  9. 【iCore4 双核心板_uC/OS-II】例程三:任务的挂起与恢复

    一.实验说明: 当一个任务正在运行的时候,由于某种情况可能需要终止运行一段时间,终止的这段时间就是 所谓的任务的挂起,可以由该任务自身或者其他任务来挂起一个任务.当被挂起的任务需要再次运 行的时候,可 ...

随机推荐

  1. SpringMVC处理器映射器和方法名称解析器

    所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式” 1.处理器映射器HandlerMapping Ha ...

  2. vue动态切换视图

    big.vue <template> <div> big <p>{{view}}</p> <!--标准规范--> <component ...

  3. vue给methods中的方法传入当前点击行的值

    <template> <!-- 在template中,只能存在一个根组件 --> <div class="event"> <ul> ...

  4. VueJs记录

    v-model是双向绑定,v-bind用来绑定属性,也可以简写成为:

  5. css3中linear-gradient()的使用

    用线性渐变创建图像. 如果想创建以对角线方式渐变的图像,可以使用 to top left 这样的多关键字方式来实现. 示例代码: linear-gradient(#fff, #333); linear ...

  6. html页面布局之table布局:

    table布局: table来做整体页面的布局,布局技巧归纳如下: (1)按照设计图的尺寸设置表格的宽高以及单元格的宽高 (2)将表格的border.cellpadding.cellspacing全部 ...

  7. Html块标签、含样式的标签、语义化的标签:

    Html块标签: (1)<div>标签 块元素,表示一块内容,没有具体的语义 (2)<span>标签 行内元素,表示一行中的一小段内容,没有具体的语义 <p>标签 ...

  8. 数据格式JSON

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...

  9. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

  10. Deepin 15.4 升级 chrome flash

    到 adobe 官方下载 flash插件 flash_player_ppapi_linux ~/.config/google-chrome/PepperFlash下建个目录 23.0.0.185,把 ...