📄 ledflow3.c
字号:
#include "config.h"
#define TASK_STK_SIZE 64
#define LedFlowSpeed 5
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskLedStk[TASK_STK_SIZE*2];
OS_STK TaskLedStk1[TASK_STK_SIZE*2];
OS_STK TaskLedStk2[TASK_STK_SIZE*2];
static OS_EVENT *LedFlowSem;
static OS_EVENT *Led1FlowSem;
static OS_EVENT *Led2FlowSem;
#define Led1 (1<<22)
#define Led2 (1<<23)
#define Led3 (1<<24)
#define Led4 (1<<25)
void TaskStart(void *pdata);
void TaskLed(void *pdata);
void TaskLed1(void *pdata);
void TaskLed2(void *pdata);
void DelayNms(INT32U dly);
int main()
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE-1], 0);
OSStart();
return 0;
}
void TaskStart(void *pdata)
{
pdata = pdata;
TargetInit();
LedFlowSem = OSSemCreate(1);
Led1FlowSem = OSSemCreate(1);
Led2FlowSem = OSSemCreate(1);
IO0DIR |= Led1|Led2|Led3|Led4;
IO0SET = Led1|Led2|Led3|Led4;
PINSEL0 = (PINSEL0&0x00000000) | 0x05;
PINSEL1 = (PINSEL1&0x00000000);
OSTaskCreate(TaskLed, (void *)0, &TaskLedStk[TASK_STK_SIZE-1],8);
OSTaskCreate(TaskLed1,(void *)0, &TaskLedStk1[TASK_STK_SIZE*2-1],9);
OSTaskCreate(TaskLed2,(void *)0, &TaskLedStk2[TASK_STK_SIZE*2-1],10);
for(;;)
{
OSTimeDlyHMSM(0,0,1,10);
OS_ENTER_CRITICAL();
OSSemPost(LedFlowSem);
OS_EXIT_CRITICAL();
OSTimeDlyHMSM(0,0,1,10);
OS_ENTER_CRITICAL();
OSSemPost(Led1FlowSem);
OS_EXIT_CRITICAL();
OSTimeDlyHMSM(0,0,1,10);
OS_ENTER_CRITICAL();
OSSemPost(Led2FlowSem);
OS_EXIT_CRITICAL();
OSTimeDlyHMSM(0,0,0,200);
}
}
void TaskLed(void *pdata)
{
uint8 err;
pdata = pdata;
for(;;)
{
OS_ENTER_CRITICAL();
OSSemPend(LedFlowSem, 0, &err);
OS_EXIT_CRITICAL();
IO0CLR = Led1;
DelayNms(LedFlowSpeed*100);
IO0SET = Led1;
DelayNms(2);
IO0CLR = Led2;
DelayNms(LedFlowSpeed*100);
IO0SET = Led2;
DelayNms(2);
IO0CLR = Led3;
DelayNms(LedFlowSpeed*100);
IO0SET = Led3;
DelayNms(2);
IO0CLR = Led4;
DelayNms(LedFlowSpeed*100);
IO0SET = Led4;
DelayNms(2);
OS_ENTER_CRITICAL();
OSSemPend(LedFlowSem, 0, &err);
OS_EXIT_CRITICAL();
//OSTimeDlyHMSM(0,0,1,100);
}
}
void TaskLed1(void *pdata)
{
uint8 err;
pdata = pdata;
for(;;)
{
OS_ENTER_CRITICAL();
OSSemPend(Led1FlowSem, 0, &err);
OS_EXIT_CRITICAL();
IO0CLR = Led1|Led2|Led3|Led4;
DelayNms(LedFlowSpeed*100);
IO0SET = Led1|Led2|Led3|Led4;
DelayNms(LedFlowSpeed*100);
IO0CLR = Led1|Led2|Led3|Led4;
DelayNms(LedFlowSpeed*100);
IO0SET = Led1|Led2|Led3|Led4;
DelayNms(LedFlowSpeed*100);
//OSTimeDlyHMSM(0,0,0,100);
OS_ENTER_CRITICAL();
OSSemPend(Led1FlowSem, 0, &err);
OS_EXIT_CRITICAL();
//OSTimeDlyHMSM(0,0,1,100);
}
}
void TaskLed2(void *pdata)
{
uint8 err;
pdata = pdata;
for(;;)
{
OS_ENTER_CRITICAL();
OSSemPend(Led2FlowSem, 0, &err);
OS_EXIT_CRITICAL();
IO0CLR = Led1|Led2;
//OSTimeDly(OS_TICKS_PER_SEC/LedFlowSpeed);
DelayNms(LedFlowSpeed*100);
IO0SET = Led1|Led2;
DelayNms(LedFlowSpeed*100);
IO0CLR = Led3|Led4;
//OSTimeDly(OS_TICKS_PER_SEC/LedFlowSpeed);
DelayNms(LedFlowSpeed*100);
IO0SET = Led3|Led4;
DelayNms(LedFlowSpeed*100);
//OSTimeDlyHMSM(0,0,0,100);
OS_ENTER_CRITICAL();
OSSemPend(Led2FlowSem, 0, &err);
OS_EXIT_CRITICAL();
//OSTimeDlyHMSM(0,0,1,100);
}
}
/****************************************************************************
* 名称:DelayNmS()
* 功能:长软件延时
* 入口参数:dly 延时参数,值为1时,延时为1ms
* 出口参数:无
****************************************************************************/
void DelayNms(INT32U dly)
{ INT32U i;
for(; dly>0; dly--)
for(i=0; i<7142; i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -