?? main.c
字號:
#include "config.h"
#include "stdlib.h"
#define TaskStkLengh 64 //Define the Task stack length 定義用戶任務的堆棧長度
#define TASK_START_PRIO 2 /* Application tasks priorities */
#define TASK_1_PRIO 0
#define TASK_2_PRIO 1
OS_STK TaskStartStk[TaskStkLengh]; /* Startup task stack */
OS_STK Task1Stk[TaskStkLengh]; /* Task #1 task stack */
OS_STK Task2Stk[TaskStkLengh]; /* Task #2 task stack */
OS_EVENT *AckMbox; /* Message mailboxes for Tasks #1 and #2 */
OS_EVENT *TxMbox;
void TaskStart(void *pdata); //Function prototypes of tasks
void Task1(void *pdata); //Task1 任務1
void Task2(void *pdata); //Task2 任務2
const uint32 LED1 = (1 << 18); // P1.18控制LED1,高電平點亮
const uint32 LED2 = (1 << 0); // P0.0控制LED2,高電平點亮
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
int main (void)
{
PINSEL2 = PINSEL2 & (~0x08); // P1.18連接GPIO
IO1DIR = LED1; // 設置LED1控制口為輸出
PINSEL0 = PINSEL0 & (~0x0F); // P0.0連接GPIO
IO0DIR = LED2; // 設置LED2控制口為輸出
IO0CLR=0x000000FF; //控制P0.0~P0.7
OSInit ();
OSTaskCreate (TaskStart,(void *)0, &TaskStartStk[TaskStkLengh - 1], TASK_START_PRIO);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task 任務
********************************************************************************************************/
void TaskStart (void *pdata)
{
pdata = pdata;
TargetInit ();
OSStatInit();
AckMbox = OSMboxCreate((void *)0); /* Create 2 message mailboxes */
TxMbox = OSMboxCreate((void *)0);
OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], TASK_1_PRIO);//創建兩個任務
OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], TASK_2_PRIO);
}
void Task1 (void *pdata)
{
INT8U txmsg;
INT8U err;
pdata = pdata;
TargetInit ();
txmsg=1;
while (1)
{
IO1SET = LED1; // LED1點亮
DelayNS(50);
IO1CLR = LED1; // LED1熄滅
DelayNS(50);
IO1SET = LED1; // LED1點亮
DelayNS(50);
IO1CLR = LED1; // LED1熄滅
DelayNS(50);
OSMboxPost(TxMbox, (void *)&txmsg); /* Send message to Task #2 */
OSMboxPend(AckMbox, 0, &err); /* Wait for acknowledgement from Task #2 */
OSTimeDlyHMSM(0, 0, 1, 0 ); /* Wait 1 second */
txmsg=0;
}
}
void Task2 (void *pdata)
{
char *rxmsg;
INT8U err;
pdata = pdata;
PINSEL0 = PINSEL0 & (~0x0F); // P0[0:7]連接GPIO
IO0DIR = LED2; // 設置LED2控制口為輸出
while (1)
{
rxmsg = (char *)OSMboxPend(TxMbox, 0, &err); /* Wait for message from Task #1 */
IO0CLR=0x000000FF; //控制P0.0~P0.7
IO0SET=*rxmsg;
OSTimeDlyHMSM(0, 0, 0, 100); /* Wait 10 milsecond */
OSMboxPost(AckMbox, (void *)1);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -