Tarbal 4 5 мая Опубликовано 5 мая · Жалоба Недавно нашел непростой баг. При переходе с 7 на 10 версию FreeRTOS система подвисала. Проблема оказалась была связана с мютексом. Дело в том, что мютекс имеет хозяина (тред, который его установил) и снять его может только тот кто поставил. В семерке это игнорировалось. В версии 10 тред, который не был хозяином использовал неинициалисированный указатель, что приводило к exception. Затруднило поиск отсутствие системы защиты памяти. Заменили мютекс на бинарный семафор и стало можно снимать его не тем тредом, который его установил. Зато хорошо запомнил чем отличаются вышеназванные семафоры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Viktuar 0 5 мая Опубликовано 5 мая · Жалоба А еще хозяин может сколько угодно раз устанавливать мьютекс, это не приведет к ошибке. И освободить его все-равно будет достаточно один раз. А семафор - если он не бинарный, aka флаг - на каждый set будет увеличивать значение на единичку и на каждый clear уменьшать на единичку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 6 мая Опубликовано 6 мая · Жалоба Quote использовал неинициалисированный указатель Включайте assert такие места быстро найдутся 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться