По моему у вас проблемы не с ОС, а с Си. Код покажите. Как вы семафор объявляете, как инициализируете. Вы уверены, что он успевает инициализироваться до первого прерывания?
[/quote]
Я думаю успевает, т.к. прерывание от УАРТа, а оно происходит по нажатию клавиши на клавиатуре (ну если конечно ему не 5 минут на инициализацию надо).
Вот код. В BSP_Init настраиваю УАРТ, разрешаю его прерывания, настраиваю таймер и порт для светодиода. Задача просто ждет семафора и моргает диодом (должна моргать, но не моргает

). Приоритет задачи 5, таймера 63.
#define APP_CFG_TASK1_STK_SIZE 360
static void App_Task1 (void *p_arg);
static OS_STK App_Task1Stk[APP_CFG_TASK1_STK_SIZE];
static OS_EVENT *App_Sem;
void main (void)
{
BSP_IntDisAll(); /* Disable all interrupts until we are ready to accept them */
/* IMPORTANT: MUST be setup before calling 'OSInit()' */
OSTaskStkSize = OS_TASK_IDLE_STK_SIZE; /* Setup the default stack size */
OSTaskStkSizeHard = OS_TASK_STK_SIZE_HARD; /* Setup the default hardware stack size */
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */
BSP_Init(); /* Initialize the BSP */
App_TaskCreate(); /* Create the application tasks */
App_EventCreate(); /* Create the application events */
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II) */
}
static void App_TaskCreate (void)
{
#if (OS_TASK_NAME_SIZE > 13)
CPU_INT08U os_err;
#endif
OSTaskCreateExt((void (*)(void *)) App_Task1,
(void *) 0,
(OS_STK *)&App_Task1Stk[APP_CFG_TASK1_STK_SIZE - 1],
(INT8U ) APP_CFG_TASK1_PRIO,
(INT16U ) APP_CFG_TASK1_PRIO,
(OS_STK *)&App_Task1Stk[0],
(INT32U ) APP_CFG_TASK1_STK_SIZE,
(void *) 0,
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
#if (OS_TASK_NAME_SIZE > 13)
OSTaskNameSet(APP_CFG_TASK1_PRIO, "Task1", &os_err);
#endif
}
static void App_EventCreate (void)
{
CPU_INT08U os_err;
App_Sem = OSSemCreate(1);
#if (OS_EVENT_NAME_SIZE > 8)
OSEventNameSet(App_Sem, "Semafor", &os_err);
#else
void(os_err);
#endif
}
static void App_Task1 (void *p_arg)
{
(void)p_arg;
while (DEF_TRUE) {
OSSemPend(App_Sem);
BSP_LED_Toggle(1);
}
}
Может у кого есть рабочий проект хотя бы для ATmega128. Если не жалко поделитесь.