2

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

error C2059: syntax error : '.'

Код указан ниже, может кто-нибудь указать мне в правильном направлении.

typedef struct usart_reg_map 
{
    volatile uint32 SR;
    volatile uint32 DR;
    volatile uint32 BRR;
    volatile uint32 CR1;
    volatile uint32 CR2;
    volatile uint32 CR3;
    volatile uint32 GTPR;
}usart_reg_map;

#define USART1_BASE ((struct usart_reg_map*))

typedef struct usart_dev 
{
    usart_reg_map *regs;
}usart_dev;

struct usart_dev usart1 =
{
    .regs = USART1_BASE, 
};

usart_dev *USART1 = &usart1;

3 ответа3

1

Во всех случаях много работы, но возможно:

  1. Узнайте, какие классы, структуры, типы и функции вам нужны из микробиблиотеки.
  2. Создайте для них файлы, похожие на библиотеки micros, желательно с одинаковой файловой структурой, но в другом месте. Они будут работать только в версии для ПК.
  3. Создайте новый проект для немикросреды, в которой файлы на шаге 2 используются вместо 1. Это может быть сделано путем изменения пути включения, вероятно.

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

Что касается C99, убедитесь, что вы не используете специфические функции C99 в общем коде (коде вашего микроконтроллера), и, если вам это нужно, создайте этот код в отдельных функциях, которые вы могли бы либо портировать на VS, либо, возможно, они не нужны поскольку они являются частью библиотек микроконтроллеров или фасадных функций.

1

Есть две проблемы для рассмотрения:

  • Скорее всего, вы компилируете код как C++. Но C++ - это не C, и наоборот - они не являются совместимыми языками. Вам необходимо принудительно выполнить компиляцию C, что обычно делается путем именования вашего файла .c вместо .cpp .

  • Даже в режиме C, Visual Studio имеет ужасную поддержку стандарта . Синтаксис инициализации известен как обозначенные инициализаторы и был введен в 1999 году. Microsoft, однако, настаивала на том, чтобы не обновлять свой компилятор C, до некоторой нерешительной попытки несколько лет назад. Они могут или не могут поддерживать назначенные инициализаторы, я не знаю.

Я бы настоятельно рекомендовал любому начинающему программисту использовать вместо этого компилятор со стандартным компилятором. Вы можете указать VS использовать компилятор gcc вместо стандартного дерьма, или вы можете загрузить другую IDE, такую как Codeblocks, которая поставляется с предустановленным gcc/mingw по умолчанию.

0

Ваша конкретная проблема заключается в том, что, как вы обнаружили, указанный инициализатор .regs = USART1_BASE не работает в Visual Studio.

Я обычно использую GCC и make-файл при тестировании моих проектов микроконтроллеров в Windows. Кажется, это работает намного лучше при попытке использовать функции из определенного стандарта, такого как C99.

Как уже отмечали другие, вам, вероятно, придется сделать много рефакторинга, чтобы весь ваш проект действительно работал на Windows. Я обычно разбиваю свой проект на простые модули, которые я могу скомпилировать и протестировать в Windows с помощью GCC, а затем объединить эти хорошо протестированные модули в более крупное приложение, которое я могу запустить и протестировать на целевом устройстве.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .