📄 main.c
字号:
#include "config.h"
#define rs (1<<8)
#define rw (1<<9)
#define en (1<<10)
#define busy (1<<7)
#define Led1 (1<<11)
#define Led2 (1<<12)
#define Led3 (1<<13)
#define Led4 (1<<14)
#define Led5 (1<<15)
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskLed1Stk[TASK_STK_SIZE];
OS_STK TaskLed2Stk[TASK_STK_SIZE];
OS_STK TaskLed3Stk[TASK_STK_SIZE];
OS_STK TaskLed4Stk[TASK_STK_SIZE];
static void TaskStart(void *data);
static void TaskLed1(void *data);
static void TaskLed2(void *data);
static void TaskLed3(void *data);
static void TaskLed4(void *data);
OS_EVENT *AckMbox;
OS_EVENT *TxMbox;
uint8 txt[]={"helloz"};
uint8 txe[]={"woaini"};
/****************************************************************************
* 名称:DelayNS
* 功能:长延时
****************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(;dly>0;dly--)
for(i=0;i<50000;i++);
}
/****************************************************************************
* 名称:LedInit
* 功能:Led控制口的初始化
****************************************************************************/
void LedInit(void)
{
PINSEL0=0x00000000;
PINSEL1=0x00000000;
IODIR=0xffffffff;
IOSET=Led1;
IOSET=Led2;
IOSET=Led3;
IOSET=Led4;
IOSET=Led5;
}
/****************************************************************************
* 名称:ChkBusy()
* 功能:检查总线是否忙
****************************************************************************/
void ChkBusy()
{
PINSEL0=0x00000000;
IODIR=0x700;
while(1)
{
IOCLR=rs;
IOSET=rw;
IOSET=en;
if(!(IOPIN & busy))break;
IOCLR=en;
}
IODIR=0x7ff;
}
/****************************************************************************
* 名称:WrOp()
* 功能:写函数
****************************************************************************/
void WrOp(uint8 dat)
{
ChkBusy();
IOCLR=rs; //全部清零
IOCLR=rw;
IOCLR=0xff; //先清零
IOSET=dat; //再送数
IOSET=en;
IOCLR=en;
}
/****************************************************************************
* 名称:WrDat()
* 功能:写数据函数
****************************************************************************/
void WrDat(uint8 dat) //读数据
{
ChkBusy();
IOSET=rs;
IOCLR=rw;
IOCLR=0xff; //先清零
IOSET=dat; //再送数
IOSET=en;
IOCLR=en;
}
/****************************************************************************
* 名称:DisText()
* 功能:显示文本函数
****************************************************************************/
void DisplayText(uint8 addr,uint8 *p)
{
WrOp(addr);
while(*p !='\0')WrDat(*(p++));
}
/****************************************************************************
* 名称:main()
* 功能:显示文本
****************************************************************************/
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);
OSStart();
return 0;
}
/****************************************************************************
* 名称:TaskStart()
* 功能:任务
****************************************************************************/
void TaskStart(void *pdata)
{
pdata=pdata;
TargetInit();
AckMbox = OSMboxCreate((void *)0);
TxMbox = OSMboxCreate((void *)0);
OSTaskCreate(TaskLed1, (void *)0, &TaskLed1Stk[TASK_STK_SIZE - 1], 5);
OSTaskCreate(TaskLed2, (void *)0, &TaskLed2Stk[TASK_STK_SIZE - 1], 6);
OSTaskCreate(TaskLed3, (void *)0, &TaskLed3Stk[TASK_STK_SIZE - 1], 7);
OSTaskCreate(TaskLed4, (void *)0, &TaskLed4Stk[TASK_STK_SIZE - 1], 8);
while(1)
{
OSTimeDlyHMSM(0,0,5,0);
}
while(1);
}
void TaskLed1(void *pdata)
{
pdata=pdata;
TargetInit();
while(1)
{
IOSET=Led1;
OSTimeDlyHMSM(0,0,0,50);
IOCLR=Led1;
OSTaskSuspend(5);
OSTimeDlyHMSM(0,0,0,50);
}
while(1);
}
void TaskLed2(void *pdata)
{
pdata=pdata;
TargetInit();
LedInit();
while(1)
{
uint32 j;
for(j=0;j<=3;j++)
{
IOSET=Led2;
OSTimeDlyHMSM(0,0,0,50);
IOCLR=Led2;
OSTimeDlyHMSM(0,0,0,50);
}
OSTaskResume(5);
}
while(1);
}
void TaskLed3(void *pdata)
{
uint8 txmsg;
uint32 j;
txmsg = 'A';
pdata=pdata;
TargetInit();
LedInit();
while(1)
{
for(j=0;j<=2;j++)
{
IOSET=Led3;
OSTimeDlyHMSM(0,0,0,50);
IOCLR=Led3;
OSTimeDlyHMSM(0,0,0,50);
}
OSMboxPost(TxMbox,(void *)&txmsg);
}
while(1);
}
void TaskLed4(void *pdata)
{
uint8 err;
pdata=pdata;
TargetInit();
LedInit();
while(1)
{
OSMboxPend(TxMbox,0,&err);
IOSET=Led4;
OSTimeDlyHMSM(0,0,0,50);
IOCLR=Led4;
OSTimeDlyHMSM(0,0,0,50);
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -