-
- Поставь в обработчике сброса задержку, чтоб отладчик успевал
зацепиться раньше чем mcu пройдет точку останова. Я полагаю
freertos тут ни причем. - klen(Вчера, 11:16)
- Поставил. Всё так же: сначала делает вид, что остановился в потоке. Если кликаю "продолжить" - попадает в задержку: Nikolay_Po(455 знак., Вчера, 12:38)
- Заработало. На радостях, снэпшот виртуалки сделал, мало ли что. Nikolay_Po(968 знак., Вчера, 10:53, ссылка, ссылка)
- Не знаю че там у тебя в деталях, но я сначала crt выполняю, потом
конструкторы, потом init и main, в main стартует шедулер freertos. klen(161 знак., Вчера, 11:14)
- Я взял за основу родной пример от FreeRTOS. И да, в нём нет потоков
до запуска main(). Но что вижу - то вижу. Насчёт задержки в
обработчике сброса - попробую. - Nikolay_Po(Вчера, 11:28)
- Аааа.... еще было такое. Если сброс "не правильный" например прыжок
из загрузчика и таймер системных тиков не выключен в прошлой
жизни... привеД: вызов шедулера еще до инициализации новой
вселенной - 1:0 в пользу рукизжопы. - klen(Вчера, 11:43)
- Единственный пин Boot0 - сидит на земле, прозвонил. Перед отладкой прошивка шьётся, значит, по идее, сброс потом производится. Nikolay_Po(428 знак., Вчера, 12:54)
- Аааа.... еще было такое. Если сброс "не правильный" например прыжок
из загрузчика и таймер системных тиков не выключен в прошлой
жизни... привеД: вызов шедулера еще до инициализации новой
вселенной - 1:0 в пользу рукизжопы. - klen(Вчера, 11:43)
- Я взял за основу родной пример от FreeRTOS. И да, в нём нет потоков
до запуска main(). Но что вижу - то вижу. Насчёт задержки в
обработчике сброса - попробую. - Nikolay_Po(Вчера, 11:28)
- Не знаю че там у тебя в деталях, но я сначала crt выполняю, потом
конструкторы, потом init и main, в main стартует шедулер freertos. klen(161 знак., Вчера, 11:14)
- Вроде как FreeRTOS использует буфферы для памяти потоков и своей
кучи (heap_1.c, heap_2.c, ..., heap_5.c). В зависимости от
конфигурации может использоваться в .bss, .data, RAM_DTCM, итд.
Самое странное это активность потоков во время инициализации. Как
будто слишком рано запускаеться системный таймер FreeRTOS. Поправка
на - это мне кажется :) - framer(07.07.2025 19:26)
- Да, выглядит странно. Переход в стартап происходит из служебной
функции RTOS, будто система запускается запускается раньше
стартапа. Nikolay_Po(148 знак., 07.07.2025 19:36)
- Да может при подключении openocd есть переход по адресу и
"проваливается" в стартап. Может дать -d3 (debug level 3) и
посмотреть что он там делает (reset halt, reset init). - framer(07.07.2025 19:55)
- -d3 это кому? У GCC уже стоит -g3, но почему-то отладчик постоянно
промахивается - почти невозможно поймать старт с начала. Попадает
уже в код в процессе работы. В разные запуски останавливается при
старте в разных местах функции prvIdleTask: или вызываемой из неё
prvCheckTasksWaitingTermination(). Nikolay_Po(650 знак., Вчера, 10:32, картинка, картинка)
- Заработало, см. выше. Nikolay_Po(1 знак., Вчера, 10:53, ссылка)
- Примечание: путём проб и ошибок, выяснил, что отказ отладки
происходит, если: Nikolay_Po(582 знак., Вчера, 13:01)
- Похоже, некорректно отрабатывается "reset halt" при отладке. Сначала, отладка влетает в уже запущенные потоки, будто отладчик не успевает перехватить управление после сброса ЦП. И лишь затем происходит переход к стартапу и началу main(). И, возможно, когда стартап затирает указатели потоков и прочее, что уже успели обнаружить OpenOCD+GDB, отладка и рушиться с сообщением OpenOCD: Nikolay_Po(211 знак., Вчера, 13:42)
- Примечание: путём проб и ошибок, выяснил, что отказ отладки
происходит, если: Nikolay_Po(582 знак., Вчера, 13:01)
- Заработало, см. выше. Nikolay_Po(1 знак., Вчера, 10:53, ссылка)
- -d3 это кому? У GCC уже стоит -g3, но почему-то отладчик постоянно
промахивается - почти невозможно поймать старт с начала. Попадает
уже в код в процессе работы. В разные запуски останавливается при
старте в разных местах функции prvIdleTask: или вызываемой из неё
prvCheckTasksWaitingTermination(). Nikolay_Po(650 знак., Вчера, 10:32, картинка, картинка)
- Да может при подключении openocd есть переход по адресу и
"проваливается" в стартап. Может дать -d3 (debug level 3) и
посмотреть что он там делает (reset halt, reset init). - framer(07.07.2025 19:55)
- Да, выглядит странно. Переход в стартап происходит из служебной
функции RTOS, будто система запускается запускается раньше
стартапа. Nikolay_Po(148 знак., 07.07.2025 19:36)
- Поставь в обработчике сброса задержку, чтоб отладчик успевал
зацепиться раньше чем mcu пройдет точку останова. Я полагаю
freertos тут ни причем. - klen(Вчера, 11:16)