目的: 中断发生时,Task1才能发生而且是在中断结束后立即进行,Task1发生过程中延时时,将CPU使用权转给比它优先级低的Task2.,从而使Task2得以进行并通过save()函数将中断的信息存储。
做法:
1)初始化时建立了信号量RxSem =
OSSemCreate(0); 并设置了Task1的优先权高于Task2
2)Rx中断时,通过函数OSSemPost(),将信号量的使用权转给包含
OSSemPend()函数的Task1
程序大体如下:
void Uart1_RxInt(void)
{
U8 data, LRC, i;
data = RdURXH2();
SerRxCh = data;
OSSemPost(RxSem); //
CommRxQueuePut(2,data);
OSPrintf("Uart2 %c",data);
ClearSubPending(BIT_SUB_RXD2);
// Clear Sub int pending}
Void Task1(void)
{int m;
OSSemPend(RxSem,0,&err);
m++;
OSTimeDly(1000);}
Void Task2(void)
{int n;
n++;
save();
OSTimeDly(10000);}
在进行1,2以外的任务发生中断时,程序按照预想的进行。但是当在Task2执行中也就是在中断信息存储过程中又发生新的中断时,Task1的m为什么跟原来一样?是Task1不进行还是什么原因?我认为既然Task1的优先权高于Task2,而且整个Project中只有Task1中用到
OSSemPend()函数,中断结束后它没道理不执行。。。谁能指点下。。。不胜感激。。。。 |