Переход с компилятора C на компилятор C ++ приводит к ошибкам компилятора для прошивки MSP430

Я пытаюсь скомпилировать проверенную и надежную часть прошивки для микроконтроллера Texas Instruments MSP430 с новым компилятором (компилятором C ++, в Visual Studio с использованием VisualGDB).

Все предыдущие версии этой прошивки были скомпилированы с компилятором C, с нулевыми ошибками и нулевыми предупреждениями. Переход от компилятора C к компилятору C ++ должен быть причиной моей проблемы. (Код, скомпилированный с помощью компилятора C, работает без проблем в течение пяти лет.)

Учитывая этот фрагмент кода:

#include <msp430x14x.h>
WDTCTL = WDTPW+WDTHOLD;

Я получаю эту ошибку:

ошибка: «WDTCTL» не называет тип c: \ msptest \ LedBlink \ LedBlink.cpp

WDTCLT объявлен в msp430x14x.h.

Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

0

Решение

Возможны две вещи:

  • msp430x14x.h, предоставляемые каждым компилятором, различны — стандартной формы для такого заголовка не существует, и каждый поставщик может определять их по-своему.
  • Вы используете заголовок от одного компилятора с другим, и он использует несовместимые расширения или синтаксис компилятора.

Нет никаких сомнений в том, что здесь происходит множество специфических для компилятора или «магии макрокоманд» — вам нужно посмотреть, как именно эти макросы расширяются препроцессором. Компилятор жалуется на расширенный код, а не на источник, который вы опубликовали.

Препроцессор использовался здесь для создания синтаксиса, который в противном случае не был бы допустимым C или C ++, поэтому без учета расширения определить немногое можно. И поскольку каждый компилятор может предоставить свой файл msp430x14x.h, не зная точно, какой C и какой компилятор C ++ использовался, об этом тоже нельзя сказать много. Помните, что полный необходимо учитывать расширение — поэтому, если макрос определен в терминах других макросов, они также должны быть раскрыты. GCC имеет опцию n для вывода на выходе препроцессора, или вы можете запустить препроцессор отдельно (исполняемый файл «cpp»).

3

Другие решения

Проблема в том, что WDTCTL определяется с помощью sfrwи хотя это не показано в вашем коде, sfrw определяется в iomacros.h как встроенное утверждение asm. Очевидно, что встроенный asm будет зависеть от процессора, и то, что работает для msp430, не будет работать в visual studio.

0

Спасибо всем что откликнулись. Ответы полезны помимо вопроса, который я задал.

Я нашел и исправил проблему. Я должен признать, что проблема была в неосторожной ошибке с моей стороны. Я вырезал и вставил код из законченной программы на C в тестовую программу, пропуская

int main ()

Таким образом, операторы присваивания, на которые жаловался компилятор, находились в неверной области исходного кода.

Я отправил свой вопрос преждевременно.

Тем не менее, ваши ответы наиболее полезны при принятии решения о дальнейшем использовании компилятора GCC (с Visual Studio в качестве IDE) или того же компилятора, который я использовал для всех предыдущих версий этой прошивки. Я многому научился из набора ответов, которые вы предоставили.

Спасибо!

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector