📄 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 + -