Ардуино МЕГА с ОСРВ
Я писал код для FreeRTOS на MEGA 2560 и использовал несколько светодиодов для определения активности каждой задачи, переключая каждый отдельный светодиод каждый раз при выполнении задачи и отслеживая время с помощью индикатора на контактах светодиода. . Все работало нормально, пока я не добавил код для последней задачи.
Только индикатор последней задачи показывал активность, и я предположил, что напортачил с новым кодом, и потратил целый день на переписывание кода и устранение неполадок. Что ж, оказывается, что код работал нормально. Проблема, по-видимому, заключается в том, что RTOS не управляет соответствующим светодиодом для каждой задачи, а использует какой-то другой вывод. Та же конфигурация, но с простым тестовым кодом, работает нормально.
Я испробовал практически все, что знал, но результаты оказались отрицательными. 3 задачи выполняются нормально (мне еще нужно провести гораздо больше тестирования), поэтому проблема с переполнением стека не возникает, плюс я решил сделать ВСЕ переменные глобальными, чтобы минимизировать использование стека и возможные конфликты с переменными. , которые были одинаковыми в двух исходных программах. Я использую около 600 байт ОЗУ для этих переменных и имею массу спецификаций в MEGA во всех аспектах. Код использует только 14 КБ из доступных 256 КБ.
Итак, я официально в тупике и предполагаю, что существует какая-то проблема с переключением задач, но я бы ожидал, что код в конечном итоге выйдет из строя, если бы это было так, но он выполняется часами и часами.
р>Есть ли у кого-нибудь реальный опыт работы с FreeRTOS, который сталкивался с подобными проблемами, связанными с простыми проблемами цифрового чтения и/или цифровой записи, подобными тем, что я вижу?
@crusader27529, 👍0
Обсуждение1 ответ
Ну, ДУМБО (это я) нашел проблему, и это была настоящая ошибка.
Когда я применил автономный код к среде RTOS, я не перераспределил назначения контактов, поэтому несколько событий ввода-вывода записывались в тот же порт, который использовал тестовые светодиоды.
Я знал, что FreeRTOS не может быть таким уж плохим, ведь если бы ввод-вывод поступал на неправильные контакты, код был бы бесполезен.
Поэтому не ищите ярлыков, даже если вы не готовы завершить все этапы проекта. Проверьте наличие повторяющихся определений, иначе они вас укусят за задницу.......
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Просто возникла идея.....посмотрев на размер кода, я понял, что он подойдет для UNO. Я не могу использовать UNO для проекта, потому что мне нужно гораздо больше контактов, чем есть, но запуск кода на другом, меньшем участке аппаратного обеспечения может показать некоторые результаты, либо он работает лучше, либо имеет проблему с размером стека., @crusader27529
Ну, он работает так же и не дает сбоев, так что, кроме того, что проблема не специфична для MEGA, никаких полезных данных получено не было., @crusader27529