Ошибки в скомпилированной программе

Я использую IDE версии 1.18.13 (пробовал 2.0x, но пришлось вернуться). Плата XIAO ESP32C3. Скетч содержит 2 файла - stepperDriver.ino и stepper.h.

При компиляции я получил два сообщения об ошибках: C:\Users\USER\AppData\Local\Temp\arduino_build_714606\sketch\Stepper.h.cpp:1:1: ошибка: заблудший '##' в программе

C:\Users\USER\AppData\Local\Temp\arduino_build_714606\sketch\Stepper.h.cpp:1:3: ошибка: 'строка' не указывает тип; вы имели в виду 'int'?

При проверке указанного файла я заметил, что первая строка действительно нетипична: ##line 14 "E:\Current\ESP32 SW\StepperDriver\stepperDriver.ino"

Как я могу это решить?

С уважением

Редактировать: после некоторых комментариев я добавляю уменьшенные файлы, которые все еще содержат ошибки. Они копируются из IDE с помощью элемента управления A, C и V. INO-файл:

#include <Arduino.h>
#include "Stepper.h"
StepperD  stepper[STEPPERS_COUNT];

#define interLoopsInterval  4
String commandLine;

/*********************************************************/
void setup(){}
/*********************************************************/
void loop()
{
}

Степпер.H:

#ifndef ModStepper_h
#define ModStepper_h

#include <Arduino.h>

class StepperD
{
  public:
    StepperD() {isAttached = false;}               // Конструктор
    String stepperParser (String inCommand);      // Обработка системных команд
    bool   begin(uint8_t ch);                     // Определяем контакты GPIO и значения по умолчанию
    volatile uint32_t  step_delay;
  private:  
    void   GoOneStep();    
// логические значения конфигурации (String CommandLine, uint16_t &var);
    bool   writeToGpioExpander (uint8_t dataB);
    bool   writeToGpioExpander (uint8_t bitInReg, uint8_t level);
};

/*******************************************/
bool   StepperD::begin(uint8_t ch)
{
  return ch == 0;
}
/*******************************************/
bool StepperD::writeToGpioExpander (uint8_t dataB)
{
  return dataB == 0;
}

bool StepperD::writeToGpioExpander (uint8_t bitInReg, uint8_t level)
{
}
/*******************************************/
String StepperD::stepperParser (String commandLine)
{
  return commandLine;
}
/******************* Not TMC2209 *********************************/
void StepperD::GoOneStep()
{ 
}
/*******************************************/
bool StepperD::StartMotion(int way)
{
  return (way);
}
#endif // ModStepper_h

Изменить 2: Stepper.h.cpp

##line 9 "E:\\Current\\ESP32 SW\\StepperDriver\\stepperDriver.ino"
void setup();
#line 11 "E:\\Current\\ESP32 SW\\StepperDriver\\stepperDriver.ino"
void loop();
#line 0 "E:\\Current\\ESP32 SW\\StepperDriver\\stepperDriver.ino"
line 1 "E:\\Current\\ESP32 SW\\StepperDriver\\Stepper.h"
#ifndef ModStepper_h
#define ModStepper_h

#include <Arduino.h>

class StepperD
{
  public:
    StepperD() {isAttached = false;}               // Конструктор
    String stepperParser (String inCommand);      // Обработка системных команд
    bool   begin(uint8_t ch);                     // Определяем контакты GPIO и значения по умолчанию
    volatile uint32_t  step_delay;
  private:  
    void   GoOneStep();    
// логические значения конфигурации (String CommandLine, uint16_t &var);
    bool   writeToGpioExpander (uint8_t dataB);
    bool   writeToGpioExpander (uint8_t bitInReg, uint8_t level);
};

/*******************************************/
bool   StepperD::begin(uint8_t ch)
{
  return ch == 0;
}
/*******************************************/
bool StepperD::writeToGpioExpander (uint8_t dataB)
{
  return dataB == 0;
}

bool StepperD::writeToGpioExpander (uint8_t bitInReg, uint8_t level)
{
}
/*******************************************/
String StepperD::stepperParser (String commandLine)
{
  return commandLine;
}
/******************* Not TMC2209 *********************************/
void StepperD::GoOneStep()
{ 
}
/*******************************************/
bool StepperD::StartMotion(int way)
{
  return (way);
}
#endif // ModStepper_h

#line 1 "E:\\Current\\ESP32 SW\\StepperDriver\\stepperDriver.ino"
#include <Arduino.h>
#include "Stepper.h"
StepperD  stepper[STEPPERS_COUNT];

#define interLoopsInterval  4
String commandLine;

/*********************************************************/
void setup(){}
/*********************************************************/
void loop()
{
}

, 👍0

Обсуждение

Если вам нужна помощь с кодом, вы должны включить код в вопрос. Пожалуйста, отредактируйте вопрос и добавьте код (в правильном формате), @chrisl

основной ошибкой является «бродячий '##' в программе». в исходном коде stepperDriver.ino или stepper.h есть какой-то символ, запрещенный в исходном коде. (Stepper.h.cpp — это файл, созданный сборщиком Arduino как часть процесса сборки), @Juraj

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

Пожалуйста, покажите нам минимальный воспроизводимый пример, хотя бы первые строки "stepper.h", @the busybee

Нам не нужен "Stepper.h", нам нужен Stepper.h.cpp. [#line](https://learn.microsoft.com/en-us/cpp/preprocessor/hash-line-directive-c-cpp?view=msvc-170) директивы генерируются компилятором во время компиляции для отслеживания из его источников. Наряду с тем, что ## является еще одним специальным макроопределением (комбинирующим оператором), получается, что строка интерпретируется таким образом., @Thomas Weller


1 ответ


0

Имя файла INO было stepperDriver, а имя папки — StepperDriver. При выравнивании случаев ошибки исчезали. Спасибо ptillisch с сайта https://forum.arduino.cc/.

,