-
已经解决,为什么需要修改OS_Sched函数?
void OS_Sched (void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT8U y;
OS_ENTER_CRITICAL();
if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked */
y = OSUnMapTbl[OSRdyGrp]; /* Get pointer to HPT ready to run */
OSPrioHighRdy = (INT8U)((y
-
什么东东西
-
好资料
-
刚开始学uCOS,建了三个任务,
TaskA,TaskB,TaskC,
优先级分别是4,5,6
现在打算试验邮箱广播功能,
TASKB发送邮箱,TASKA,TASKC接收邮箱。
1.想测试是否一个消息出去,
是否第一个就绪的优先级最高的任务接收到之后就删除这个消息?
但是发现程序一直停留在TASKB中。
不知道为什么?程序如下。有大侠帮忙解惑吗?用
Freescale S12芯片,编译通过,邮箱定义在文件头就没有贴出来
void TaskA (void *pdata)
{
INT16U *tempvalue;
pdata = pdata; /* nothing */
for(;;)
{
tempvalue = OSMboxPend(BroadBox,0,&err);
asm NOP;
OSTimeDly(5);
}
}
void TaskB (void *pdata)
{
INT16U *tempvalue,MeasureValue[12];
INT8U i;
pdata = pdata; /* nothing */
for(;;)
{
for(i=0;i
-
刚开始学uCOS,建了三个任务,
TaskA,TaskB,TaskC,
优先级分别是4,5,6
现在打算试验邮箱广播功能,
TASKB发送邮箱,TASKA,TASKC接收邮箱。
1.想测试是否一个消息出去,
是否第一个就绪的优先级最高的任务接收到之后就删除这个消息?
但是发现程序一直停留在TASKB中。
不知道为什么?程序如下。有大侠帮忙解惑吗?用
Freescale S12芯片,编译通过,邮箱定义在文件头就没有贴出来
void TaskA (void *pdata)
{
INT16U *tempvalue;
pdata = pdata; /* nothing */
for(;;)
{
tempvalue = OSMboxPend(BroadBox,0,&err);
asm NOP;
OSTimeDly(5);
}
}
void TaskB (void *pdata)
{
INT16U *tempvalue,MeasureValue[12];
INT8U i;
pdata = pdata; /* nothing */
for(;;)
{
for(i=0;i
-
?啥东西
-
多谢
-
太少了啊
-
感谢感谢
-
好资料,感谢楼主
-
好资料,可惜俺没银子
-
以下是完整的代码,有定义啊。。。没定义的话,编译都通不过啊。 MCU_init()的函数我就没COPY进来了。谢谢楼上啊。帮忙看看?1楼的优先级定义可以自己设置啊,不一定要设置1.OS_STK TaskAStartStk[TASK_STK_SIZE];OS_STK TaskBStartStk[TASK_STK_SIZE];OS_STK TaskCStartStk[TASK_STK_SIZE];INT16U MeasureValue[MEASURECNT]; //包括电压,电流,温度OS_EVENT *BroadBox; //OS_EVENT *RS232Sem;//OS_EVENT *void Basic_Init(void); void MCU_init(void); /* Device initialization function declaration */void TaskA (void *pdata){ INT16U *tempvalue; pdata = pdata; /* nothing */ for(;;) { tempvalue = OSMboxPend(BroadBox,0,&err); asm NOP; OSTimeDly(5); }}void TaskB (void *pdata){ INT16U *tempvalue,MeasureValue[12]; INT8U i; pdata = pdata; /* nothing */ for(;;) { for(i=0;i<12;i++) MeasureValue = i+2; OSMboxPostOpt(BroadBox,MeasureValue,OS_POST_OPT_BROADCAST); asm NOP; OSTimeDly(10); }}void TaskC (void *pdata){ INT16U *tempvalue; pdata = pdata; /* nothing */ for(;;) { tempvalue = OSMboxPend(BroadBox,0,&err); asm NOP; OSTimeDly(100); }}void main(void) { INT8U i; INT16U j; MCU_init(); EnableInterrupts; OSInit(); BroadBox = OSMboxCreate((void*)0); i = OSTaskCreate(TaskA, (void *)0, &TaskAStartStk[TASK_STK_SIZE - 1],4); i = OSTaskCreate(TaskB, (void *)0, &TaskBStartStk[TASK_STK_SIZE - 1], 5); i = OSTaskCreate(TaskC, (void *)0, &TaskCStartStk[TASK_STK_SIZE - 1], 6); OSStart(); }