sea313081574 - 2008-5-10 15:37:00
这是使用手册给的一个例子
int err; //error No
int t1stack[20]; //Task 1 stack
int t2stack[20]; //Task 2 stack
HEvent sem; //Event handle
volatile unsigned int *P_IOB_DATA =(unsigned int*)(0x7005); //Port B data register
volatile unsigned int *P_IOB_DIR =(unsigned int*)(0x7007); //Port B direction register
volatile unsigned int *P_IOB_ATTRIB = (unsigned int*)(0x7008); //port B attribute register
main()
{
void Task1();
SpSInit(); //Initialize OS kernel
*P_IOB_DIR = 0XFFFF; //Set port B direction
*P_IOB_ATTRIB = 0XFFFF; //Set prot B attribute
err = SpSTaskCreate(Task1,0,t1stack+19,1); //Create first task
sem = SpSSemCreate(1); //Create a semaphone
SpSStart(); //Start kernel
}
void Task1() //task 1
{
void Task2();
unsigned int i = 1;
err = SpSTaskCreate(Task2,0,t2stack+19,2); //Create second task
while(1) {
SpSSemPend(sem,0); // Waiting semaphone
for(i = 1;i<0x100;i<<=1) {
*P_IOB_DATA = i;
SpSTimeDly(30); //Delay 30 tick
}
SpSSemPost(sem); //Release semaphone
}
}
void Task2() //task 2
{
volatile unsigned int *P_IOB_DATA = (unsigned int*)(0x7005);
unsigned int i = 0x80;
while(1) {
//*P_Watchdog_Clear=0x01;
SpSSemPend(sem,0); //Waiting semaphone
for(i = 0x80;i != 0;i>>=1) {
*P_IOB_DATA = i;
SpSTimeDly(5); //Delay 5 tick
}
SpSSemPost(sem); //Release semaphone
}
}
它要的目的是在B口来回的输出高电平,实现对发光二极管的控制。但是我试的时候却实现不了这个效果,结果是这样的,当程序运行到Task2()里面的SpSSemPend(sem,0)时,系统好像就复位了,不知道为什么啊??怎么办??高人指点。
sea313081574 - 2008-5-10 15:57:00
我知道了,就是清狗的问题,应该在Task1()那个for里加个清狗的,同样的在Task里面也要加一个清狗的。
zelong - 2008-7-29 7:45:00
联系我,我有他的大完整解决方案,你可以在论坛上搜一下。我已发帖。qq695088137