- 1
- 2
- 3
- 4
void IRQHandler(void)
{
...
WaitSemaphore(semH);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+160
void IRQHandler(void)
{
...
WaitSemaphore(semH);
Из кода для встроенного устройства реального времени.
А как Вы себе представляете ожидание семафора в обработчике прерывания? Вот и говнокод.
Нет. Ждать их запрещенно. Это сразу блокируется переключение задач (фактически блокируется всё ядро и возможно на длительное время), блокируются прерывания с более низким приоритетом. Более того, если низкоприоритетные прерывания будут заблокированы длительное время - они могут потеряться.
Если ядро одно, то не будет никого, кто мог бы разблокировать это ядро (не считая прерываний с более высоким приоритетом).
Да и если в данном случае все так как ты описываешь, это не говнокод, а тупо банальная ошибка.
Приведите пример хоть одной, где это не так?