创建了两个任务,一个用来LED闪烁,一个用来做AD,用下面这种方式都会运行不走。
led1的优先级是7 , adc的优先级是8
void led1_task(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
cpu_sr = cpu_sr;
pdata = pdata;
while(1){
OSTaskSuspend(ADC_TASK_PRIO);
LED0_ON;
OSTimeDlyHMSM(0, 0, 1, 0);
LED0_OFF;
OSTimeDlyHMSM(0, 0, 1, 0);
OSTaskResume(ADC_TASK_PRIO);
OSTaskSuspend(OS_PRIO_SELF);
// adc1 = Get_AD(ADC1);
// adc11 = ((float)adc1*3.3/4096);
// printf("PC5的电压值是 = %5.3f\r\n", adc11);
};
}
void adc_task(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
cpu_sr = cpu_sr;
pdata = pdata;
while(1)
{
LED3_ON;
adc1 = Get_AD(ADC1);
adc11 = ((float)adc1*3.3/4096);
printf("PC5的电压值是 = %5.3f\r\n", adc11);
OSTimeDlyHMSM(0, 0, 1, 0);
LED3_OFF;
OSTimeDlyHMSM(0, 0, 1, 0);
OSTaskSuspend(OS_PRIO_SELF);
OSTaskResume(LED1_TASK_PRIO);
};
}
改成这样就可以运行了,不晓得是不是任务切换有问题,还是什么问题。
void led1_task(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
cpu_sr = cpu_sr;
pdata = pdata;
while(1){
// OSTaskSuspend(ADC_TASK_PRIO);
LED0_ON;
OSTimeDlyHMSM(0, 0, 1, 0);
LED0_OFF;
OSTimeDlyHMSM(0, 0, 1, 0);
// OSTaskResume(ADC_TASK_PRIO);
// OSTaskSuspend(OS_PRIO_SELF);
adc1 = Get_AD(ADC1);
adc11 = ((float)adc1*3.3/4096);
printf("PC5的电压值是 = %5.3f\r\n", adc11);
};
}
void adc_task(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
cpu_sr = cpu_sr;
pdata = pdata;
while(1)
{
LED3_ON;
adc1 = Get_AD(ADC1);
adc11 = ((float)adc1*3.3/4096);
// printf("PC5的电压值是 = %5.3f\r\n", adc11);
// OSTimeDlyHMSM(0, 0, 1, 0);
LED3_OFF;
OSTimeDlyHMSM(0, 0, 1, 0);
// OSTaskSuspend(OS_PRIO_SELF);
// OSTaskResume(LED1_TASK_PRIO);
};
}
|