ucos-ii示例1:新建任务

发布者:钱老李最新更新时间:2016-12-18 来源: eefocus关键字:ucos-ii  新建任务 手机看文章 扫描二维码
随时随地手机看文章

环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE


说明:

本示例新建两个任务,并运行。


注意:

1.不同任务的任务优先级必须不一样,否则只运行首先定义的任务

2.从系统时钟设置必须在内核启动后设置,否则会导致OSIntNesting一直为1,从而OS_TaskStat函数因为OSTimeDly函数一直返回0陷入死循环


  1. //系统时钟设置,1ms嘀嗒一次  

  2. if (SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))  

  3. {   

  4.     while (1);  

  5. }  




效果图:


源码:


  1. #define TASK_STK_SIZE     512  

  2.                   

  3. /********************************************************************* 

  4. *                           静态函数 

  5. **********************************************************************/  

  6.   

  7. static void task_start(void *pdata);  

  8. static void task1(void *pdata);  

  9. static void task2(void *pdata);  

  10.   

  11. /********************************************************************* 

  12. *                           静态变量 

  13. **********************************************************************/  

  14.   

  15. /********************************************************************* 

  16. *                           任务堆栈空间 

  17. **********************************************************************/  

  18.   

  19. static OS_STK Task_Start_Stk[TASK_STK_SIZE];  

  20. static OS_STK Task1_Stk[TASK_STK_SIZE];  

  21. static OS_STK Task2_Stk[TASK_STK_SIZE];  

  22.   

  23. /********************************************************************* 

  24. *                           信号量 

  25. **********************************************************************/  

  26.   

  27. OS_EVENT *Semaphore;  

  28.   

  29. /********************************************************************* 

  30. *                           函数 

  31. **********************************************************************/  

  32.   

  33. int main(void)  

  34. {     

  35.     //初始化内核  

  36.     OSInit();  

  37.     //创建任务  

  38.     OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,0);  

  39.       

  40.     //启动任务  

  41.     OSStart();  

  42. }  

  43.   

  44. /********************************************************************* 

  45. *                           任务函数 

  46. **********************************************************************/  

  47.   

  48. static void task_start(void *pdata)  

  49. {     

  50.     //载入世界  

  51.     world_load();  

  52.       

  53.     //设置背景色  

  54.     GUI_SetBkColor(0xb07c17);  

  55.     GUI_Clear();  

  56.     GUI_SetColor(GUI_BLACK);  

  57.       

  58.     //新建任务  

  59.     OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,1);  

  60.     OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,2);  

  61.       

  62.     while(1)  

  63.     {  

  64.         OSTimeDlyHMSM(0,0,3,0);  

  65.     }  

  66. }  

  67.   

  68. static void task1(void *pdata)  

  69. {  

  70.     char str[30] = {0};  

  71.     uint8_t err = 0;  

  72.   

  73.     while(1)  

  74.     {     

  75.         //显示  

  76.         sprintf(str,"task1 time:%ds",OSTimeGet() * 10);  

  77.         GUI_DispStringHCenterAt(str, 120, 5);  

  78.         WM_Exec();  

  79.         OSTimeDlyHMSM(0,0,1,0);  

  80.     }  

  81. }  

  82.   

  83. static void task2(void *pdata)  

  84. {  

  85.     char str[30] = {0};  

  86.   

  87.     while(1)  

  88.     {     

  89.         //显示  

  90.         sprintf(str,"task2 time:%ds",OSTimeGet() * 10);  

  91.         GUI_DispStringHCenterAt(str, 120, 20);  

  92.         WM_Exec();  

  93.         OSTimeDlyHMSM(0,0,3,0);  

  94.     }  

  95. }
      



关键字:ucos-ii  新建任务 引用地址:ucos-ii示例1:新建任务

上一篇:ucos-ii示例2:信号量测试
下一篇:ucgui界面设计示例2

推荐阅读最新更新时间:2024-03-16 15:26

uC/OS-II在51单片机上的移植2
文件名 : YY.C #i nclude #define MAX_STK_SIZE 64 void TaskStartyya(void *yydata) reentrant; void TaskStartyyb(void *yydata) reentrant; void TaskStartyyc(void *yydata) reentrant; OS_STK TaskStartStkyya ;//注意:我在ASM文件中设置?STACK空间为40H即64,不要超出范围。 OS_STK TaskStartStkyyb ;//用户栈多一个字节存长度 OS_STK TaskStartStkyyc ; void main(void)
[单片机]
uC/OS-II在ARM系统上的移植与实现
  0  引言   在开发嵌入式系统时,一般选择基于ARM 和uC/ OS - II 的嵌入式开发平台,因为ARM 微处理器具有处理速度快、超低功耗、价格低廉、应用前景广泛等优点 . 将uC/ OS - II 移植到ARM 系统之后,可以充分结合两者的优势. 如果一个程序在一个环境里能工作,我们经常希望能将它移植到另一个编译系统、处理器或者操作系统上,这就是移植技术.移植技术可以使一种特定的技术在更加广泛的范围使用,使软件使用更加灵活,不局限于某一条件.uC/OS - II 是由Jean J . Labrosse 先生编写的完整的可移植、固化、裁剪的占先式实时多任务内核.uC/ OS - II 的源代码完全开放,这是其他商业
[单片机]
uC/OS-II在ARM系统上的移植与实现
基于CAN总线的胎压监测系统在重型车辆上的应用
引言    TPMS在 重型车辆 上的应用在国内外的汽车电子" 汽车电子领域起步比较迟缓,事实上重型车辆由于载重量较大,发生爆胎的机率更高。现在汽车安全产品种类繁多,以致相互通信复杂且资源浪费,本文就重型车辆上整合TPMS与汽车行驶记录仪等汽车安全配件,提出一种全新的实现方法,以一个电控单元统一协调管理取代以往多个汽车安全用品单独控制,形成汽车安全电控系统。整个汽车安全电控系统由 胎压监测 系统、倒车雷达装置、汽车行驶记录仪等组成,所有装置均挂接于 CAN总线 上,共享仪表盘显示。其中重点介绍TPMS的实现原理。接收显示部分的软件由源码公开的微型实时操作系统 uCOS-II 来管理,使整个系统的实时性,可靠性进
[汽车电子]
基于CAN总线的胎压监测系统在重型车辆上的应用
ucos-ii示例5:消息队列测试
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例中task1时间片为1s,task2时间片为8s。task1每秒往消息队列写入1个数据,task2全部读取出来。所以task2每次能读到8个数据。 注意: 1.消息队列需要一个指针数组指向消息 2.应该有一个固定的消息数组存储消息,不应将局部变量填入发送消息函数 3.QSQPost为先进先出函数(FIFO),QSQPostFornt为后进先出函数(LIFO) 效果图: 源码: #define TASK_STK_SIZE 512 /***********
[单片机]
<font color='red'>ucos-ii</font>示例5:消息队列测试
uCOS-II在STM32上的移植步骤
前言: 说点废话,网上有很多关于uCOS-ii移植的文章,好多都是千篇一律,理论性很强,分析了一大堆虚头巴脑的东西,真想问他们,你确定你分析的这些东西是需要你做的工作吗?实操性严重欠缺。。。这方面我也走了很多弯路,下面就将自己的移植过程一步步的记录下来,也给大家做做参考。 首先,简单总结一下移植的大概过程: (1) 去uC/OS-ii官网下载你要移植芯片CPU的相关案例,不一定完全对应,那就找相应系列吧。 (2) 编程环境一般有两种,分别是IAR和MDK,这个根据你自己的编程环境进行下载。 (3) 本案例需要将uC/OS-II 移植到STM32F103ZET6上,而我使用的编程环境是MDK,很遗憾,官网上提供的案例是基于
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved