打印
[应用相关]

(转)ucos-ii示例1:新建任务

[复制链接]
695|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
木木guainv|  楼主 | 2018-8-16 10:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本文博客链接:http://blog.csdn.net/jdh99


环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE


说明:

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


注意:

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

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



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



  •         if (SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))



  •         {



  •                 while (1);



  •         }




效果图:


源码:

[cpp] view plain copy



  • <code class="language-cpp">#define TASK_STK_SIZE        512  
  •                   
  • /*********************************************************************
  • *                           静态函数
  • **********************************************************************/  
  •   
  • static void task_start(void *pdata);  
  • static void task1(void *pdata);  
  • static void task2(void *pdata);  
  •   
  • /*********************************************************************
  • *                           静态变量
  • **********************************************************************/  
  •   
  • /*********************************************************************
  • *                           任务堆栈空间
  • **********************************************************************/  
  •   
  • static OS_STK Task_Start_Stk[TASK_STK_SIZE];  
  • static OS_STK Task1_Stk[TASK_STK_SIZE];  
  • static OS_STK Task2_Stk[TASK_STK_SIZE];  
  •   
  • /*********************************************************************
  • *                           信号量
  • **********************************************************************/  
  •   
  • OS_EVENT *Semaphore;  
  •   
  • /*********************************************************************
  • *                           函数
  • **********************************************************************/  
  •   
  • int main(void)  
  • {     
  •     //初始化内核  
  •     OSInit();  
  •     //创建任务  
  •     OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,0);  
  •       
  •     //启动任务  
  •     OSStart();  
  • }  
  •   
  • /*********************************************************************
  • *                           任务函数
  • **********************************************************************/  
  •   
  • static void task_start(void *pdata)  
  • {     
  •     //载入世界  
  •     world_load();  
  •       
  •     //设置背景色  
  •     GUI_SetBkColor(0xb07c17);  
  •     GUI_Clear();  
  •     GUI_SetColor(GUI_BLACK);  
  •       
  •     //新建任务  
  •     OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,1);  
  •     OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,2);  
  •       
  •     while(1)  
  •     {  
  •         OSTimeDlyHMSM(0,0,3,0);  
  •     }  
  • }  
  •   
  • static void task1(void *pdata)  
  • {  
  •     char str[30] = {0};  
  •     uint8_t err = 0;  
  •   
  •     while(1)  
  •     {     
  •         //显示  
  •         sprintf(str,"task1 time:%ds",OSTimeGet() * 10);  
  •         GUI_DispStringHCenterAt(str, 120, 5);  
  •         WM_Exec();  
  •         OSTimeDlyHMSM(0,0,1,0);  
  •     }  
  • }  
  •   
  • static void task2(void *pdata)  
  • {  
  •     char str[30] = {0};  
  •   
  •     while(1)  
  •     {     
  •         //显示  
  •         sprintf(str,"task2 time:%ds",OSTimeGet() * 10);  
  •         GUI_DispStringHCenterAt(str, 120, 20);  
  •         WM_Exec();  
  •         OSTimeDlyHMSM(0,0,3,0);  
  •     }  
  • }</code>  


沙发
labasi| | 2018-8-17 09:34 | 只看该作者
ucos-ii 请问这个是免费的吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

141

主题

4089

帖子

5

粉丝