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

Как настроить отладку проекта для 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 локальна для единицы трансляции. Ты написал <code>static button s1;</code> в заголовочном файле, а это значит, что каждая единица трансляции в которую ты подключил этот файл получит свой собственный, независимый экземпляр переменной s1. Функция <code>ModesInit</code> инициализирует s1 из <code>ModeDriver.o</code> , а s1 из <code>main.o</code> останется неинициализированным. <br/> <br/> Исправить это можно заменив <code>static</code> на <code>extern</code> в заголовочном файле, а в одном из исходников добавив определение для переменной -- <code>button s1;</code> .
Похожие вопросы