本帖最后由 Cjy_JDxy 于 2017-9-15 10:37 编辑
工作中用到实时多任务UCOSII,所以买了一本周航慈的《基于嵌入式实时操作系统的程序设计技术》。
书里第19页有一个例子。我用的开发板是STM32的,仿照那个例子做实验。
那个例子没有创建启动任务,我感觉很奇怪。我仿照那个实验坐下来。
本来书上是一个闪灯,一个蜂鸣器鸣叫。我改成两个LED闪烁。
可是只有一个灯闪。
程序如下:
int main(void)
{
delay_init(); //ÑÓʱº¯Êý³õʼ»¯
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// ÉèÖÃÖжÏÓÅÏȼ¶·Ö×é2
LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
OSInit();
//OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//´´½¨ÆðʼÈÎÎñ
OSTaskCreate(led0_task,(void *)0,&stkLed0Task[sizeof(stkLed0Task)/4-1],4);
OSTaskCreate(led1_task,(void *)0,&stkLed1Task[sizeof(stkLed1Task)/4-1],4);
OSStart();
}
//¿ªÊ¼ÈÎÎñ
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OS_ENTER_CRITICAL(); //½øÈëÁÙ½çÇø(ÎÞ·¨±»Öжϴò¶Ï)
OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //¹ÒÆðÆðʼÈÎÎñ.
OS_EXIT_CRITICAL(); //Í˳öÁÙ½çÇø(¿ÉÒÔ±»Öжϴò¶Ï)
}
//LED0ÈÎÎñ
void led0_task(void *pdata)
{
pdata=pdata;
while(1)
{
LED0=0;
OSTimeDly(OS_TICKS_PER_SEC/4);
//delay_ms(80);
LED0=1;
//delay_ms(920);
OSTimeDly(OS_TICKS_PER_SEC/4);
};
}
//LED1ÈÎÎñ
void led1_task(void *pdata)
{
pdata=pdata;
while(1)
{
LED1=0;
//delay_ms(300);
OSTimeDly(OS_TICKS_PER_SEC/4);
LED1=1;
//delay_ms(300);
OSTimeDly(OS_TICKS_PER_SEC/4);
};
}请高手指教,谢谢!
|