单片机
返回首页

ucos-ii示例1:新建任务

2016-12-18 来源:eefocus

环境:

主机: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. }
      



进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 红外线探测报警器

  • 短波AM发射器电路设计图

  • RS-485基础知识:处理空闲总线条件的两种常见方法

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章