μC/OS-II实验:实验一 任务的基本管理

关于μC/OS-II的学习资料 猛戳此处。

实验通用代码描述:
μC/OS-II实验:实验一 任务的基本管理_第1张图片
实验代码模板(MDK4.70)
注意:这里的app是最后一个实验的代码,按照下面描述的复制进去了ok了。也可以从 最后一个开始。
涉及的μC/OS-II系统函数:
。。。

参考资料及配套代码:
uCOS-II 实验指导书
ucos_Demo
注意:是参考这个资料没错,但是好几个实验(几乎每个⊙﹏⊙b汗)的概念或者代码有问题,我在后面大都指出来(可能我的有的地方也错了),不清楚的可以下下来比较一下。
建议赋值代码到工程中,边调试变改,不同板子也可以,simulator的USART可以看到串口数据的输出。

实验代码:
 app.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void Task0( void* pdata)
{
    INT8U err;
     while( 1)
    {
        printf( "Application tasks switched %d times!\r\n",++count);
        printf( "TASK_0 IS RUNNING.............................\r\n"); 
        printf( "task_1 is suspended!\r\n"); 
        printf( "***********************************************\r\n"); 
        err=OSTaskSuspend(OS_PRIO_SELF);         // suspend itself 
    }
}

void Task1( void* pdata)
{
    INT8U err;
     while( 1)
    {
        OSTimeDly( 1000); 
        printf( "Application tasks switched %d times!\r\n",++count); 
        printf( "task_0 is suspended!\r\n"); 
        printf( "TASK_1 IS RUNNING..............................\r\n"); 
        printf( "***********************************************\r\n"); 
        OSTimeDly( 1000); 
        err=OSTaskResume(TASK0_TASK_PRIO);       /* resume task0            */ 
    }
}


 app.h
1
GLOBAL INT32U count;

 app_cfg.h 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define TASK0_STK_SIZE       64
#define TASK1_STK_SIZE       64

#define TASK0_TASK_PRIO      4
#define TASK1_TASK_PRIO      5

#ifdef GLOBAL_STASK_DEFINE
#define GLOBAL 
#else
#define GLOBAL  extern
#endif

GLOBAL OS_STK   TASK_TASK0_STK[TASK0_STK_SIZE];
GLOBAL OS_STK   TASK_TASK1_STK[TASK1_STK_SIZE];

void Task0( void* pdata);
void Task1( void* pdata);

 main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//启动任务
static  void TaskStart( void* pdata)
{
    pdata = pdata; 
     //APP Initialization
     //系统时钟必须在OSStart()之后调用
    Systick_Configuration();
    
#if(OS_TASK_STAT_EN >  0)
    OSStatInit();
#endif

     /* 实验一  任务的基本管理 */
    OSTaskCreate(Task0,( void*)&TaskData[ 0],(OS_STK*)&TASK_TASK0_STK[TASK0_STK_SIZE- 1],TASK0_TASK_PRIO);
    OSTaskCreate(Task1,( void*)&TaskData[ 1],(OS_STK*)&TASK_TASK1_STK[TASK1_STK_SIZE- 1],TASK1_TASK_PRIO);
    
     //创建其他任务之后删除自己
    OSTaskDel(OS_PRIO_SELF);
}

实验结果:
μC/OS-II实验:实验一 任务的基本管理_第2张图片
注意:提供心脏跳动的Systick_Configuration必须在OSStart之后调用(最好放在启动任务的任务TaskStart中-好习惯),不然后果未知,因为在系统还没有启动之前你就把中断打开了,系统也不晓得咋办了。


你可能感兴趣的:(ucos-II,任务的基本管理)