Необъяснимая ошибка «ошибка: ожидается ')' перед '*' токеном» в заголовочном файле устройства при попытке скомпилировать проект STM32duino с использованием библиотеки LoRaFi - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь скомпилировать пример, включенный в библиотеку LoRaFi, для использования с радиошляпой SX1272 LoRa и комплектом STM32 IoT Node Discovery. Это проект STM32duino.

Ошибка конкретно указывает на заголовок устройства IoT Node, включенный в пакет STM32core.

C:\Users\monou\Documents\ArduinoData\packages\STM32\hardware\stm32\1.9.0\system/Drivers/CMSIS/Device/ST/STM32L4xx/Include/stm32l475xx.h:1397:43: error: expected ')' before '*' token
 1397 | #define CRC                 ((CRC_TypeDef *) CRC_BASE)
      |                              ~            ^
C:\Users\monou\Documents\Arduino\libraries\LoRaFi\src/LoRaFi.h:122:8: note: in expansion of macro 'CRC'
  122 |   void CRC(uint8_t crc = ON);
      |        ^~~

Эта ошибка не имеет для меня никакого смысла, поскольку структура CRC_TypeDef четко определена в самом заголовке.

typedef struct
{
  __IO uint32_t DR;          /*!< CRC Data register,                           Address offset: 0x00 */
  __IO uint8_t  IDR;         /*!< CRC Independent data register,               Address offset: 0x04 */
  uint8_t       RESERVED0;   /*!< Reserved,                                                    0x05 */
  uint16_t      RESERVED1;   /*!< Reserved,                                                    0x06 */
  __IO uint32_t CR;          /*!< CRC Control register,                        Address offset: 0x08 */
  uint32_t      RESERVED2;   /*!< Reserved,                                                    0x0C */
  __IO uint32_t INIT;        /*!< Initial CRC value register,                  Address offset: 0x10 */
  __IO uint32_t POL;         /*!< CRC polynomial register,                     Address offset: 0x14 */
} CRC_TypeDef;

, за которым следует собственное определение CR C

#define FLASH               ((FLASH_TypeDef *) FLASH_R_BASE)
#define CRC                 ((CRC_TypeDef *) CRC_BASE)
#define TSC                 ((TSC_TypeDef *) TSC_BASE)

Радиомодуль LoRa требует, чтобы CR C быть включен, поэтому я не могу просто закомментировать оскорбительный код в LoRaFi.h. Понятия не имею, как это исправить. CRC_TypeDef определен правильно, CR C также должен быть определен.

Любая помощь будет принята с благодарностью.

В случае, если это поможет, вот пример, предоставленный LoRaFi. Стоит отметить, что эта ошибка возникает во всех приведенных примерах, а не только в этом.

// LoRaFi receiving data using interrupt

#include <LoRaFi.h>

  //creat object to call functions of LoRaFi library
  LoRaFi LoRaFi;

  const int messageLength = 11;
  char message[messageLength];


void setup() {
  
  //initialize serial communication
  Serial.begin(9600);
  delay(100);

  //initialize LoRa module
  LoRaFi.begin();
  delay(100);

  // activate the interrupt on LoRaFi receiving
  LoRaFi.ReceivingInterrupt(receiveMessage);

}

void loop() {

  //Just waiting the interrupt and do nothing
  delay(1000);

}

//callback function to receve the temperature and humidity using interrupt routine
void receiveMessage()
{
  Serial.print("Received Message: ");

  //Receive message
  LoRaFi.ReceivePackage(message,messageLength);

  //Print received message
  int i;
  for(i=0; i<messageLength; i++)
  {
  Serial.print(message[i]);
  }
  Serial.println();
}

1 Ответ

0 голосов
/ 06 августа 2020

Это, к сожалению, плохо написанная библиотека. У вас есть конфликтующие символы.

Прокомментируйте #define CRC ...., поскольку вы не будете использовать аппаратный CR C.

...