Собственно никакой многозадачности не наблюдаю. Работает только та задача у которой наивысший приоритет. (В данном случае task ).
Что я хотел получить: должны мигать три светодиода, и по приходу данных с UART должен заходить в обработчик uart_intr_hdl.
Вроде как такая конструкция на RTOS STM32 работает корректно, но тут, на uOS никак не желает.
Что я делаю не так ???
Код
bool_t uart_intr_hdl(void *arg)
{
ch = get_received_byte(1);
LedTgl(1);
return 1;
}
void task1 (void *arg)
{
for(;;)
{
LedTgl(8);
udelay(30000);
}
}
void task2 (void *arg)
{
for(;;)
{
LedTgl(4);
udelay(40000);
}
}
void task (void *arg)
{
setup_baud_rate (1, KHZ, 115200);
mutex_lock_irq (&receiver, RECEIVE_IRQ (1), &uart_intr_hdl, 0);
enable_receiver (1);
enable_receive_interrupt (1);
transmit_byte(1, '*');
for (;;)
{
udelay(50000);
LedTgl(2);
} // for(;;)
}
void uos_init (void)
{
SYS_REG.CLK_EN.data = 0xFFFFFFFF; // включение тактовой частоты _init_ включает только минимум частот
LedInit();
MFBSP2.DIR.data = 0x3ff; // переключаем LDAT2[7:4] в режим выхода
task_create (task1, 0, "task1", 1, task1_space, sizeof (task1_space));
task_create (task2, 0, "task2", 2, task2_space, sizeof (task2_space));
task_create (task, "task", "task", 3, task_space, sizeof (task_space));
}
{
ch = get_received_byte(1);
LedTgl(1);
return 1;
}
void task1 (void *arg)
{
for(;;)
{
LedTgl(8);
udelay(30000);
}
}
void task2 (void *arg)
{
for(;;)
{
LedTgl(4);
udelay(40000);
}
}
void task (void *arg)
{
setup_baud_rate (1, KHZ, 115200);
mutex_lock_irq (&receiver, RECEIVE_IRQ (1), &uart_intr_hdl, 0);
enable_receiver (1);
enable_receive_interrupt (1);
transmit_byte(1, '*');
for (;;)
{
udelay(50000);
LedTgl(2);
} // for(;;)
}
void uos_init (void)
{
SYS_REG.CLK_EN.data = 0xFFFFFFFF; // включение тактовой частоты _init_ включает только минимум частот
LedInit();
MFBSP2.DIR.data = 0x3ff; // переключаем LDAT2[7:4] в режим выхода
task_create (task1, 0, "task1", 1, task1_space, sizeof (task1_space));
task_create (task2, 0, "task2", 2, task2_space, sizeof (task2_space));
task_create (task, "task", "task", 3, task_space, sizeof (task_space));
}