本帖最后由 singleywy 于 2011-3-14 14:27 编辑
28# 刘前辈
奇怪,复制之后,格式都没有了
在开发板上,完美运行,源程序如下:
#include<reg52.h>
#include "Os_api.h"
#include"IOfor52.h"
void OsTimerISR()interrupt 1
{
OsIntEnter();
#if T0_TIMER_EN
ACC=((65536+8-SYS_CLK)%256);
TR0=0;
TL0+=ACC;
ACC=0;
CY=ACC&0x80;
ACC =((65536+8-SYS_CLK)/256)+ACC;
TH0+=ACC;
TR0=1; //时间管理
#endif
#if T2_TIMER_EN
#endif
#if TIME_EXPAND_EN
OsRunTime--;
if(OsRunTime == 0){
OsRunTime=TIME_COEFFICIENT-1;
OsTimeTick();
}
#else
OsTimeTick();
#endif
OsIntExit();
}
void TaskA()
{
static uint8 i;
while(1)
{
OsSemP(4,255);
OsSemP(0,255);
LED1_ON;
OsTaskWait(DO_TMO,200);
LED1_OFF;
OsSemV(0);
OsSemV(4);
}
}
void TaskB()
{
while(1)
{
OsSemP(0,255);
OsSemP(1,255);
LED2_ON;
OsTaskWait(DO_TMO,200);
LED2_OFF;
OsSemV(1);
OsSemV(0);
}
}
void TaskC()
{
while(1)
{
OsSemP(1,255);
OsSemP(2,255);
LED3_ON;
OsTaskWait(DO_TMO,200);
LED3_OFF;
OsSemV(2);
OsSemV(1);
}
}
void TaskD()
{
while(1)
{
OsSemP(2,255);
OsSemP(3,255);
LED4_ON;
OsTaskWait(DO_TMO,200);
LED4_OFF;
OsSemV(3);
OsSemV(2);
}
}
void TaskE()
{
while(1)
{
OsSemP(4,255);
OsSemP(3,255);
LED5_ON;
OsTaskWait(DO_TMO,200);
LED5_OFF;
OsSemV(3);
OsSemV(4);
}
}
void TaskIdle()
{
static uint8 i;
LED0_ON;
OsSemCreate(0,1);
OsSemCreate(1,1);
OsSemCreate(2,1);
OsSemCreate(3,1);
OsSemCreate(4,1);
while(1)
{
i++;
LED0=LED0^1;
}
}
void main()
{
OsTaskCreate(0,(uint16)TaskA);
OsTaskCreate(1,(uint16)TaskB);
OsTaskCreate(2,(uint16)TaskC);
OsTaskCreate(3,(uint16)TaskD);
OsTaskCreate(4,(uint16)TaskE);
OsTaskStart(5,(uint16)TaskIdle);
} |