#define TASK_STK_SIZE 512
/*********************************************************************
* 静态函数
**********************************************************************/
static void task_start(void *pdata);static void task1(void *pdata);static void task2(void *pdata);/*********************************************************************
* 静态变量
**********************************************************************/
/*********************************************************************
* 任务堆栈空间
**********************************************************************/
staticOS_STK Task_Start_Stk[TASK_STK_SIZE];staticOS_STK Task1_Stk[TASK_STK_SIZE];staticOS_STK Task2_Stk[TASK_STK_SIZE];/*********************************************************************
* 信号量
**********************************************************************/OS_EVENT*Semaphore;/*********************************************************************
* 消息队列数组
**********************************************************************/
void *Msg_Group[10];char Msg_Arr[10][30];
uint8_t Index_Msg_Arr= 0;/*********************************************************************
* 函数
**********************************************************************/
int main(void)
{//初始化内核
OSInit();//创建任务
OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,10);//启动任务
OSStart();
}/*********************************************************************
* 任务函数
**********************************************************************/
static void task_start(void *pdata)
{//载入世界
world_load();//设置背景色
GUI_SetBkColor(0xb07c17);
GUI_Clear();
GUI_SetColor(GUI_BLACK);
Semaphore= OSQCreate(Msg_Group,10);//新建任务
OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,11);
OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,12);while(1)
{
OSTimeDlyHMSM(0,0,3,0);
}
}static void task1(void *pdata)
{char str[30] = {0};
uint8_t err= 0;char *mail;
uint8_t i= 0;
OS_Q_DATA query;while(1)
{//打印接收的消息
OSQQuery(Semaphore,&query);for (i = 0;i < query.OSNMsgs;i++)
{//请求信号量
mail = OSQPend(Semaphore,0,&err);//显示
sprintf(str,"task1 receive:%s",mail);
GUI_DispStringHCenterAt(str,120, 40 + i * 20);
}//显示
sprintf(str,"task1 time:%ds",OSTimeGet());
GUI_DispStringHCenterAt(str,120, 5);
WM_Exec();
OSTimeDlyHMSM(0,0,8,0);
}
}static void task2(void *pdata)
{char str[30] = {0};while(1)
{//显示
sprintf(*(Msg_Arr + Index_Msg_Arr),"task2 send:%ds",OSTimeGet());//发送信号量
OSQPost(Semaphore,*(Msg_Arr +Index_Msg_Arr));
Index_Msg_Arr++;if (Index_Msg_Arr >= 10)
{
Index_Msg_Arr= 0;
}//显示
sprintf(str,"task2 time:%ds",OSTimeGet());
GUI_DispStringHCenterAt(str,120, 20);
WM_Exec();
OSTimeDlyHMSM(0,0,1,0);
}
}