Как преобразовать код Arduino во встроенный код C/C++

Например, у меня есть код для Arduino, но я хочу изменить его на встроенный C, чтобы создать более профессиональный проект с другим оборудованием. есть ли учебник? Я знаю логику, и большинство кодов одинаковы. Я просто хочу узнать о библиотеках или определениях выводов для ЖК-дисплея и кнопок.

, 👍0

Обсуждение

Код Arduino уже C, вы даже можете использовать конструкции C++ (по крайней мере, некоторые). Например, большинство библиотек уже используют классы C++. Вы довольно расплывчато говорите о «другом оборудовании»., @Michel Keijzers

Под разным оборудованием я имел в виду микроконтроллер без Arduino и индивидуальный ЖК-дисплей., @Sohrab Yavarzadeh

не-arduino все еще очень расплывчато. Некоторые микроконтроллеры вообще не предлагают компилятор C. Некоторые предлагают несколько компиляторов C со странным синтаксисом (PMS150C - я смотрю на вас). Вы должны быть более конкретными, что это. Сообщите нам, на какую аппаратную платформу вы ориентируетесь, и кто-нибудь здесь сможет дать вам ответ., @Kwasmich

ATMega328P это моя цель MC, @Sohrab Yavarzadeh


2 ответа


Лучший ответ:

1

Ардуино использует стандартный компилятор C++. Предполагаемый «язык Arduino» не существует; это С++. За исключением того, что Arduino IDE позволит вам использовать некоторые ярлыки, которых нет в компиляторе. Два важных момента:

  1. Среда IDE заметит, что вы пытаетесь использовать библиотеки (в любом случае те, которые она распознает), и вставит необходимый #include <SOMELIBRARY.H>, если вы этого не сделали это.

  2. Среда IDE заметит, когда вы сделаете прямую ссылку на функцию, которая еще не определена и не объявлена, и предоставит необходимое предварительное объявление.

Но если вы управляете ими самостоятельно, как это пришлось бы делать в любой другой среде C++, ваша структура кода будет переносимой.

Еще один источник несовместимости – аппаратная зависимость. Написание программного обеспечения для встраиваемых систем почти всегда зависит от аппаратного обеспечения. Это должно зависеть от внешнего оборудования и, вполне вероятно, зависит от специфики MCU. Последние зависимости обычно можно переписать. Например, вызовы функций или прямые ссылки на регистры ввода-вывода процессора, которые на другом процессоре будут отображаться по-другому, возможно, даже на адреса памяти, а не на регистры вообще.

Другой процессор, скорее всего, будет иметь совершенно другой набор контактов с другими характеристиками и возможностями, чем исходный. Библиотеки для управления внешним оборудованием, скорее всего, были разработаны для данного процессора или семейства процессоров и могут не корректно сопоставляться с другим.

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

,

именно я хочу знать, какие ярлыки дает мне Arduino, которых нет у других компиляторов, @Sohrab Yavarzadeh

На самом деле это делается в среде IDE. Базовый компилятор представляет собой довольно простой ванильный компилятор C++. FWIW, я делаю то, что вы обдумываете - пишите стандартный и полный C/C++. На самом деле я почти никуда его не портирую; моя основная цель — иметь возможность использовать либо Arduino IDE, либо Eclipse/Sloeber по желанию, и переносимый код очень эффективен, чтобы позволить мне это сделать., @JRobert


1

Если вы хотите писать более профессиональный код, вы можете попробовать использовать другой редактор вместо базового редактора Arduino. Возможные варианты, например:

  • Visual Studio Core с подключаемым модулем platformio.
  • Eclipse с подключаемым модулем Sloeber.

Поскольку arduino уже использует язык C/C++, единственная разница заключается в том, как вы пишете и организуете код.

,

Аминь! Мне интересно, будет ли Arduino IDE 2.x основана на чем-то вроде VS Code с функциями, которые выходят за рамки простой подсветки синтаксиса., @Kwasmich

На мой взгляд, Arduino IDE должна быть очень простой. Если вам нужно больше, чем написать простой скэтч, вы можете использовать другую IDE, уже совместимую с arduino., @IU1JVO Giuliano Favro

Единственное, что мешает мне установить Arduino IDE, — это менеджер платы и библиотеки. Поскольку Arduino CLI, похоже, не получает должного внимания, это, к сожалению, самый простой способ начать работу с ними. Интересно, когда Arduino-CLI станет стабильной и будет продвигаться на их странице., @Kwasmich