Ошибка AVR-C: ожидается ‘=’, ‘,’, ‘;’, ‘asm’ или ‘__attribute__’ перед ‘& lt;’ знак

Я сейчас пытаюсь взять библиотеку кода, написанную для Arduino USB Host щит и отделить его от основных библиотек Arduino, чтобы я мог использовать код в проекте не-Arduino микроконтроллера.

Посмотрев на код, я не вижу много жестких зависимостей от базы кода Arduino, но я сталкиваюсь с некоторыми странными ошибками, которые, вероятно, связаны с различиями между системой сборки Arduino и Система сборки LUFA. В частности, я получаю следующую ошибку примерно в 75% заголовочных файлов, несколько десятков раз каждый:

error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token

Иногда ошибка указывает на разные токены в ошибке, но это все та же ошибка. Я обнаружил много похожих проблем на разных форумах и в Stack Overflow, но решение, как правило, меняется каждый раз.

Чтобы было ясно, этот код прекрасно компилируется в системе сборки Arduino, но эти ошибки возникают, когда я пытаюсь собрать напрямую с WinAVR, используя make-файлы шаблона LUFA. Просматривая код, я решил, что мне нужно #define несколько значений, таких как -DARDUINO=102 (или, по крайней мере, какое-то значение> = 100, но версия IDE Arduino, которую я использую, — 1.0.2, поэтому я решил, что это хорошее значение для использования).

Итак, я думаю, что я ищу кого-то, знакомого с системой сборки Arduino, чтобы помочь мне понять, что мне не хватает. Полная библиотека кода может быть найдена Вот, но для того, чтобы предоставить простой пример, который демонстрирует проблему, не включая всю библиотеку кода, вот printhex.h:

#if !defined(__PRINTHEX_H__)
#define __PRINTHEX_H__

#if defined(ARDUINO) && ARDUINO >=100
#include "Arduino.h"#else
#include <WProgram.h>
#endif

template <class T>
void PrintHex(T val)
{
T mask = (((T)1) << (((sizeof(T) << 1) - 1) << 2));

while (mask > 1)
{
if (val < mask)
Serial.print("0");

mask >>= 4;
}
Serial.print((T)val, HEX);
}

template <class T>
void PrintHex2(Print *prn, T val)
{
T mask = (((T)1) << (((sizeof(T) << 1) - 1) << 2));

while (mask > 1)
{
if (val < mask)
prn->print("0");

mask >>= 4;
}
prn->print((T)val, HEX);
}

template <class T>
void PrintBin(T val)
{
for (T mask = (((T)1) << (sizeof(T) << 3)-1); mask; mask>>=1)
if (val & mask)
Serial.print("1");
else
Serial.print("0");
}

#endif

Я должен отметить, что у меня есть Arduino.h скопированы в мой путь включения, и что если я включу Arduino.h в мой основной .c файл, он компилируется нормально, поэтому проблема не в этом. В том числе printhex.hОднако производит следующее:

In file included from MIDI.c:38:
Lib/HostShield/printhex.h:26: error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
Lib/HostShield/printhex.h:41: error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
Lib/HostShield/printhex.h:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token
make: *** [MIDI.o] Error 1

Строки 26, 41 и 56 являются тремя примерами следующего:

template <class T>

Я в тупике. Как я могу решить эту проблему?

4

Решение

Вы пытаетесь скомпилировать код C ++ как C. Вы можете (обычно) сделать обратное, но вам нужно переписать это как обычный C или использовать компилятор C ++ (avr-g++, кажется). Изменение ваших файлов на .cpp может сказать системе сборки использовать компилятор C ++ автоматически.

9

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

Других решений пока нет …

По вопросам рекламы [email protected]