


void task ( )
{
//initialize
while(1)
{
//your code
}
}

OSTaskCreate(Task0,&StackTask0[StackSizeTask0 - 1],PrioTask0); // 创建一个任务OSTaskSuspend()可以主动挂起一个任务。OSTaskSuspend()会把任务从任务就绪表中移出,最后重新启动系统调度。这个函数可以挂起任务本身也可以挂起其他任务。OSTaskResume(),可以让被 OSTaskSuspend或 OSTimeDly 挂起的任务恢复就绪态,然后进行任务调度OSTaskDelReq(BEEP_TASK_PRIO);OSTaskDel(OS_PRIO_SELF);上面进行简单的介绍,下面放一段简单典型的代码,大家可以直观的感受一下。
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "includes.h"
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//设置任务优先级
#define RGD0_TASK_PRIO 7
//设置任务堆栈大小
#define RGD0_STK_SIZE 64
//任务堆栈
OS_STK RGD0_TASK_STK[RGD0_STK_SIZE];
//任务函数
void rgd0_task(void *pdata);
//设置任务优先级
#define RGD1_TASK_PRIO 6
//设置任务堆栈大小
#define RGD1_STK_SIZE 64
//任务堆栈
OS_STK RGD1_TASK_STK[RGD1_STK_SIZE];
//任务函数
void rgd1_task(void *pdata);
int main(void)
{
delay_init(168); //初始化延时函数
//所有外设初始化地区
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
OSStart();
}
//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
//通信(消息,信号量。邮箱)初始化--核心
OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
OSTaskCreate(rgd0_task,(void *)0,(OS_STK*)&RGD0_TASK_STK[RGD0_STK_SIZE-1],RGD0_TASK_PRIO);
OSTaskCreate(rgd1_task,(void *)0,(OS_STK*)&RGD1_TASK_STK[RGD1_STK_SIZE-1],RGD1_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
}
void rgd0_task(void *pdata)
{
while(1)
{
//=============
};
}
void rgd1_task(void *pdata)
{
while(1)
{
//=============
};
}
由于抢占调度让任务独立运行的特点,我们不使用全局变量,让任务拥有自己栈。会导致我们任务间需要信息的沟通与传递,(这也是精华啦!下一篇见)