Я что-то разрабатываю во встроенном контексте с Zephyr.
По сути, я имею дело с boot-l oop, вызванным переполнением стека. Переполнение стека исчезает, когда я изменяю параметр unused вызова функции глубоко внутри моего main. Чтобы убедиться, что проблема не во внутренней части функции, я жестко запрограммировал ее реализацию как return 0;
.
Неверная строка, похожая на такую, создает загрузку l oop:
uint8_t port;
ret = foo(&port, NULL, NULL);
Но в строке, в которой отсутствует порт, ссылка на который отсутствует, код работает нормально:
uint8_t port;
ret = foo(NULL, NULL, NULL);
Имейте в виду, как я уже сказал, реализация foo жестко закодирована для возврата 0. Параметры ни в коем случае не используются. Более того, я уверен, что линия никогда не достигается во время выполнения (в данном случае), поскольку она находится за некоторыми условными выражениями, требующими от моего взаимодействия на самом деле от go до
Я начал сдаваться и винить вещи, связанные с неисправной памятью или повреждением электростатическим разрядом, но когда я пробовал тот же код с теми же изменениями на запасном оборудовании, которое у меня было, происходит то же самое. Что мне не хватает? Я искренне не знаю, что еще я мог бы сделать, чтобы узнать, почему это происходит, и как это исправить. У меня нет доступа к отладчику для этого микроконтроллера (SAMD21), поэтому я немного растерялся ... Есть идеи (или, по крайней мере, сочувствие)?