ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
556118 Топик полностью
AlexBi (28.10.2014 18:51, просмотров: 251) ответил abivan на а ничего что TN_INTERRUPT_LEVEL = 1 ?
И вообще приведенный пример с двумя задачами и одним семафором на мой взгляд не корректный. Для начала там создание семафора записано так: tn_sem_create(&sem_Led_Exchange, TN_TRUE, TN_TRUE); Повезло, что TN_TRUE==1 А дальше функции, на которых я запнулся void TN_TASK User_Task3 (void *par) { par=par; for (;;) { tn_sem_acquire(&sem_Led_Exchange, TN_WAIT_INFINITE); SetLedGreenOn(); tn_task_sleep(10); SetLedGreenOff(); tn_sem_signal(&sem_Led_Exchange); } } По моей логике должна крутиться только задача с бОльшим приоритетом, т.к. она захватит семафор, уйдет в спячку, освободит семафор (но вторая функция не получит в это время управление, т.к. у нее приоритет ниже), потом опять захватит семафор, и так по кругу. Почему вторая такая же функция все же выполняется для меня загадка.