Red de conocimiento informático - Problemas con los teléfonos móviles - ucos-ii no puede realizar el cambio de tareas

ucos-ii no puede realizar el cambio de tareas

Hay 4 problemas, simplemente modifíquelos

(1) El problema principal es OSStart(); falta la siguiente declaración al frente, la antigua interrupción del reloj del sistema no tiene una función de cambio de tarea:

OS_ENTER_CRITICAL();

PC_VectSet(0x08, OSTickISR); /* Instalar el tick de reloj ISR de uC/OS-II */

PC_SetTickRate(OS_TICKS_PER_SEC); * Reprogramar la tasa de ticks */

OS_EXIT_CRITICAL();

(2) printf() es un servicio de DOS y no es reentrante. Debe cambiarse a una función reentrante, como por ejemplo. como la función PC_DispStr(). O escríbalo como

OS_ENTER_CRITICAL();

printf("esta es App_one, prio=10, demora 6 segundos y comienza de nuevo\n\n ");

OS_EXIT_CRITICAL();

Y así sucesivamente. El sistema original venía con estos programas de prueba, pero ninguno de ellos usaba la función printf().

(3) Además, OSTimeDlyHMSM(0, 0, 0, 3000) no puede escribir OSTimeDlyHMSM(0, 0, 3, 0).

De lo contrario, OSTimeDlyHMSM; () El parámetro se tratará como no válido y se ignorará. La tarea App_one no se retrasa, sino que se repite durante mucho tiempo sin cambiar.

(4) Dado que prio=10, 20, 30, debe estar definido en OS_CFG.H al menos

#define OS_LOWEST_PRIO 32

De lo contrario, algunos Las tareas de baja prioridad se considerarán inválidas y no participarán en el cambio.