CLI
}
for(;;){
PORTA&=0xFE;
OSTimeDly(5); /*延时0.5s*/
PORTA|=0x01;
/*延时0.5s*/
DSTimeDly(5);
Count++;
If(count= =4){
OSSemPost(Semaphore);
Count=0;
}
}}
void Task2(void *pdata)
{
Byte err;
For(;;){
OSSemPend(Semaphore,0,&err);
PORTA&=0xFD:
OSSemPend(Semaphore,0,&err);
PORTA|=0x02;
}
}
void main(void){
Hardwarelnit(); /*完成硬件的初始化工作*/
Oslint(); /*初始化多任务环境*/
Semaphore=OSSEMCreate(0);
OSTaskCreate(Task1,(void*)0,(void*)&Task1Stk
[TASK_STK_SIZE],10);
OSTaskCreate(Task2,void*)0,(void*)&Task2Stk
[TASK_STK_SIZE],9);
OSStart();
}
在主程序main()中,用户必须先调用OSInit(),然后创建各个任务和信号量等,最后调用OSStart(),以启动内核运行,开始正常的任务调度。
本例中尽量减小了对RAM的需求:假如中断嵌套层数不超过三层,所需事件只有一个,即只需要一个事件控制块;应用中对μC/OS-II提供的功能进行最大限度的裁剪,能不用的尽量不用。采用了上述措施后,μC/OS-II的RAM使用情况大致如下:μC/OC-II所使用的全局变量占用22字节,事件控制块占用12字节。此外,当系统初始化时,还需要最小30字节的系统堆栈用于初始化TCB,并传递参数。以上为μC/OS-II中系统所必需的RAM,计64字节。
综上所述,GP32的512字节RAM可分为8个64字节的RAM块。如果运行4个任务,能留给应用程序的RAM也只剩下128字节了。如果在GP32上运行μC/OS-II,且不多于8个任务,则任务调度表可以再简化,不需要调度64个任务,只调度8个任务就可以了。
本文关键字:暂无联系方式嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术