Как преобразовать скетч примера Arduino в полный проект C++?

Я экспериментирую с новым Arduino Leonardo. Я удалил его оригинальный загрузчик и прошил его с помощью примера запоминающего устройства LUFA с добавленными функциями (теперь это прошивка). Сейчас я пытаюсь добавить пример считывателя RFID (чтение/запись) в свою прошивку. Для этого мне нужно преобразовать скетч в код С++. Поэтому я скопировал соответствующий файл заголовка и файл cpp из папки библиотеки (libraries->rfid-master->bla.h,bla.cpp). Но я не понимаю, что делать с файлом .ino в разделе примеров (библиотеки->rfid-master->examples->ReadAndWrite->blabla.ino). Думаю этот код надо скопировать в основной класс моей прошивки. Есть идеи?

, 👍4


1 ответ


5

По сути, *.ino — это *.cpp без заголовков. Так что вы можете

  • переименуйте его в *.cpp,
  • Если у вас есть какие-либо функции, которые используются до того, как они были определены, предоставьте объявления для каждой функции перед ее первым использованием
  • #include <Arduino.h> сверху
  • #include <Wire.h>, если вы используете Wire и т. д.

и у вас есть "обычный" файл CPP.

Если вы создаете библиотеку таким образом, вы также создаете файл *.h, в котором вы объявляете все экспортированные функции и объекты и # включаете этот файл в свой *.cpp в качестве первой строки (чем вам не нужно/необходимо вперед объявить любую из этих экспортированных функций)

Вы можете взглянуть на https://github.com/arduino/Arduino.git https://github.com/sudar/Arduino-Makefile и https://github.com/ladislas/bare-arduino-project

у Bare Arduino есть 2 проекта, в каждом из которых используется 2 библиотеки, так что вы можете черпать там вдохновение

,

Makefile, на который вы ссылаетесь, выглядит как слегка устаревшая вилка Sudar Muthu [Arduino-Makefile] (https://github.com/sudar/Arduino-Makefile). Почему бы не дать ссылку на оригинал?, @Edgar Bonet

Просто потому, что я сначала нашел Bare-Arduino, на котором использовалась эта версия (а потом пропатчена версией sudar, как я сейчас вижу). В любом случае он может скомпилировать мои файлы с Arduino 1.8.0, так что он может работать как отправная точка. Или оригинальный make-файл Sudars, но в проекте Bare есть хорошие примеры того, как организовать свой проект, что, я думаю, поможет @Isuru с началом. А позже он может мигрировать на другую версию/систему. (Я тоже строю простой над этим, чтобы помочь моим проектам, ничего особенного, но помог мне быстрее разобраться в своих мыслях), @gilhad

Принимая во внимание, что имеет смысл использовать WeAreLeka/Arduino-Makefile как подмодуль ladislas/Bare-Arduino-Project, нет смысла предоставлять прямую ссылку на этот форк, поскольку он не имеет дополнительной ценности по сравнению с оригиналом. Если вы хотите дать прямую ссылку на Arduino-Makefile, вам следует отредактировать свой ответ, чтобы указать ссылку на реальный проект., @Edgar Bonet

Вы забыли о предварительном объявлении функций., @Pharap

@Pharap «для каждой функции, которая используется перед объявлением, напишите ее заголовок перед первым использованием» (ИМХО) именно так ... и функции, используемые после объявления, уже объявлены. Или есть какие-то другие случаи, когда это нужно обычному ino -> cpp?, @gilhad

Файлы @gilhad .ino позволяют вам использовать свои собственные функции без их предварительного объявления, а файлы .cpp — нет, они требуют, чтобы вы объявили функцию до ее использования, иначе компилятор не узнает о ее существовании. [Вот пример] (https://gist.github.com/Pharap/6f08bdf052b9a81f97b969a2f03347fc). Я бы не стал понимать, что «написать заголовок перед первым использованием» означает «вы должны предварительно объявить свои функции перед их использованием», потому что заголовок — это файл определенного типа, и для него не требуется файл заголовка, он просто требует объявление функции., @Pharap

заголовочный файл отличается от заголовка функции. В вашем примере написано void sendMessage(void); перед использованием sendMessage. (и #includes, как я уже упоминал). Никакой другой разницы., @gilhad