Почему указатель в функцию передается с неправильным адресом?

Как настроить отладку проекта для STM32 в Visual Studio с использованием плагина VisualGDB, компилятора MinGW 12.3 и отладчика OpenOCD?
  • 6 апреля 2024 г. 12:39
Ответы на вопрос 2
1. Возможно, указатель передается с неправильным адресом из-за ошибки в коде, например, неправильного выделения памяти, неправильного присвоения значения указателю или передачи указателя на локальную переменную, которая выходит за пределы своей области видимости. Необходимо внимательно проверить код и убедиться в корректности передачи указателя в функцию.

2. Для настройки отладки проекта для STM32 в Visual Studio с использованием плагина VisualGDB, компилятора MinGW 12.3 и отладчика OpenOCD, следуйте следующим шагам:

- Установите VisualGDB и MinGW, если они еще не установлены.
- Создайте новый проект STM32 в Visual Studio с помощью VisualGDB.
- В настройках проекта выберите MinGW 12.3 в качестве компилятора.
- Настройте отладку, выбрав OpenOCD в качестве отладчика.
- Убедитесь, что у вас правильно настроены параметры OpenOCD для вашего конкретного микроконтроллера STM32.
- Соберите и запустите проект для отладки, убедившись, что все настроено правильно.

После проведения этих шагов вы сможете отлаживать проект для STM32 с использованием Visual Studio, MinGW 12.3 и OpenOCD. Если возникнут проблемы, обратитесь к документации плагина VisualGDB и документации по настройке MinGW и OpenOCD для STM32.
Потому что переменная со спецификатором static локальна для единицы трансляции. Ты написал static button s1; в заголовочном файле, а это значит, что каждая единица трансляции в которую ты подключил этот файл получит свой собственный, независимый экземпляр переменной s1. Функция ModesInit инициализирует s1 из ModeDriver.o , а s1 из main.o останется неинициализированным. 

Исправить это можно заменив static на extern в заголовочном файле, а в одном из исходников добавив определение для переменной -- button s1; .
Похожие вопросы