Перейти к содержанию
    

Непонятки с семафором.

В проекте софтовый I2C, доступ к нему защищён семафором.

Есть две задачи которые пользуются этим I2C. Та что с большим приоритетом 100 раз в секунду опрашивает внешнее устройство. Та что с меньшим, посылает в тоже устройтво команду.

 

Стабильно получаю следующую картину: задача с большим приоритетом замечательно работает, а с меньшим никак не может получить доступ к I2C.

 

"Завёл" в FreeRTOS "Run Time Stats", оно показывает, что cpu находится в IDLE 88% времени.

 

Как такое может быть?

 

 

Вывел в отладочную консоль (в DBGU) сообщения о попытках захватить семафор. В логе видно две попытки захвата и соответсвенно одна успешная.

 

Задача с ещё более высоким приоритетом нормально получает доступ к I2C.

 

Интересный момент, если временно приостановить опрос и снова запустить всё становится на свои места и начинает работать как должно быть. Также если вставить задержку перед запуском опроса, то тоже всё нормально работает.

Уменьшение скорости опроса тоже решает проблему, но это не вариант.

 

Уже всю голову сломал :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё непонятность. Когда низкоприоритетная задача "висит", vTaskList показывает на ней статус Suspended, а когда нормально работает, Blocked.

vTaskSuspend в проекте вообще не используется. Статус S стоит у ещё одной задачи которая замечательно работает.

 

Что происходит? :smile3046:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приведите ключевые фрагменты кода из обеих задач с комментариями по сути вопроса - это будет информативнее чем словесные описания...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Повторить не удалось, вероятно ошибка была других частях проекта...

 

Тему можно удалить/закрыть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...