Почему FreeRTOS требует остановки один раз в точке останова для нормальной работы?

У меня есть приложение для Zynq MPSoC (Vitis 2020.2), написанное на C++ с использованием FreeRTOS V10.3.0. Это приложение работает очень хорошо, если однажды остановится на точке останова. Если я отключу все точки останова, программа будет работать с ошибками? В чем может быть проблема?

1 ответ

Сколько способов это могло произойти ?! Это операционная система реального времени, предположительно также приложение реального времени. Если вы остановите сопроцессор, вы повлияете на время. Не зная аппаратного обеспечения, программного обеспечения, в котором вы устанавливаете точку останова, и ошибок, возникающих при работе в автономном режиме, невозможно ответить на ваш конкретный вопрос. Т.е. вам нужно отладить его - нет общего объяснения того, почему навязчивое действие по остановке процессора «исправляет» вашу систему.

У вас явно есть ошибочный код, на который влияет время. Остановка кода не обязательно останавливает периферийные устройства и, конечно же, не останавливает внешний мир, с которым взаимодействует ваша система. Например, когда вы останавливаетесь на точке останова, мир продолжается, прерывания становятся отложенными (возможно, несколько), поэтому, когда вы возобновляете выполнение, путь выполнения и порядок планирования потоков, вероятно, будут значительно отличаться от того, когда он выполняется в свободном режиме, как и все эти ожидающие прерывания обрабатываются и, в свою очередь, вызывают события, которые приводят к тому, что различные задачи становятся ожидающими, готовыми к выполнению, а затем запускаются в другом порядке, чем в противном случае.

В конце концов, вы задаете неправильный вопрос; точка останова не «исправляет» ваш код волшебным образом, скорее, она значительно меняет способ его выполнения, так что некоторые существующие ошибки (или ошибки) скрываются или избегаются. Ошибка все еще существует, поэтому вопрос лучше сфокусировать на поиске ошибки, чем на «волшебном мышлении».

Ошибки могут быть на любом уровне, но, скорее всего, это проблемы проектирования с несоответствующим разделением задач, назначением приоритетов, IPC, синхронизацией задач или защитой ресурсов. Обычно, вероятно, слишком широко, чтобы заниматься одним вопросом SO.

Другие вопросы по тегам