Где документация для написания ядра Arduino?

Я заинтересован в написании "ядра Arduino" (то есть портирования Arduino на новый MCU и новые платы). Мне трудно найти много документации о том, как это сделать. Я что-то упустил?

На этой странице написано: "Любой желающий может разработать ядро для своих собственных плат, следуя правилам и требованиям, которые мы издали." Итак, где же эти "правила и требования"?

Я нашел что-то под названием "Спецификация платформы", что звучало многообещающе, но оно документирует только конфигурационные файлы; в нем ничего не говорится о коде, который должен быть написан для поддержки новой платформы.

Я нашел ArduinoCore-API, в котором говорится, что это "аппаратно независимый уровень ядра Arduino"." Но в нем ничего не говорится о том, как написать аппаратно-зависимую часть ядра.

Я был бы благодарен, если бы кто-нибудь указал мне на основную документацию Arduino. Он не появляется в моих поисковых системах в Интернете. Спасибо!

Разъяснения:

  • Да, я могу посмотреть на существующие ядра в качестве примеров, но я бы предпочел иметь и документацию. Тем более что существующие ядра могут быть разного качества, а могут и не соответствовать последнему стандарту. Документация - это всегда хорошо.
  • Причина, по которой я хочу написать ядро, заключается в том, что... Я хочу использовать MCU, который в настоящее время не поддерживается! (В частности, я хочу добавить поддержку GD32F350, но на самом деле это не должно иметь отношения к ответу "Где документация?")

, 👍2

Обсуждение

спецификация, которую вы связали, - это все, что вам нужно. см.Существующие ядра в качестве примеров. почему вы хотите создать ядро?, @Juraj

В спецификации ничего не говорится о коде, который мне нужно написать. Где это указано?, @user31708

Я понимаю. API Arduino описано здесь https://www.arduino.cc/reference/en/. некоторые части реализованы в репозитории API Arduino. некоторые из них зависят от аппаратного обеспечения и должны быть реализованы., @Juraj

99% написания ядра-это понимание и кодирование чипа, с которым вы работаете. Спецификация *не может* сказать вам об этом, поскольку она полностью зависит от архитектуры чипа. В основном у вас есть два варианта: 1. используйте предварительно определенный уровень API и заполните его своим кодом, чтобы заставить функции работать, или 2. напишите свой собственный код, реализующий функции API. Документация *представляет собой* список функций API. Он *не может* рассказать вам, как писать эти функции., @Majenko

некоторые новые ядра Arduino для микроконтроллеров ARM сделаны поверх ОС ARM mbed и используют поддержку mbed для микроконтроллера, @Juraj


1 ответ


3

В написании ядра Arduino есть две основные части: аппаратно-независимые части и аппаратно-зависимые.

Аппаратно-независимые части в значительной степени сделаны для вас в ArduinoCore-API. Однако я бы не просто использовал это дословно, а использовал бы его как отправную точку и адаптировал бы к вашим потребностям. Это происходит потому, что на самом деле у него есть пара нерешенных проблем, и не все может на 100% соответствовать вашим потребностям. Мы не используем его для ядра чипкИТА, потому что:

  • У него есть нерешенная проблема вокруг именования файла String.h, который конфликтует со строкой.h libc в нечувствительных к регистру файловых системах
  • Наш USB-стек сильно отличается от того, как работает Arduino "Pluggable USB"
  • У нас есть дополнительные возможности в ряде стандартных объектов чтобы использовать более эффективное использование более совершенного оборудования

После того как вы отсортировали аппаратно-независимую часть, вам нужно написать с нуля аппаратно-зависимую часть. Основной список функций, которые вам нужно реализовать, приведен в справочнике Arduino. Как вы их пишете, не может быть задокументировано, так как это зависит от оборудования. И вам вполне может понадобиться (или захочется) написать значительно больше функций, чем просто те. Например, на chipKIT, а также стандартной функции analogWrite() у нас также есть функции для изменения частоты ШИМ и разрешения - вещи, которые не являются частью "стандарта", но невероятно полезны.

Хорошей отправной точкой является изучение Arduino.h файл существующего ядра (ядро AVR-хороший базовый уровень), в котором будет перечислено большинство функций и их типы параметров/возвращаемых значений. Это дает вам то, что функции ожидают получить и что они должны излучать, но то, как эти функции записываются, полностью зависит от вас.

И тогда, конечно, вы должны реализовать варианты плат и т. Д., чтобы все это работало...

Кроме того, имейте в виду, что написание (и поддержание) ядра-это долгий и сложный процесс, который займет всю вашу оставшуюся жизнь.

,

Спасибо! Я думаю, это намного более очевидно, чем я думал, в том, что вы непосредственно реализуете API, а не реализуете какие-то "внутренние" функции, которые вызываются API. Тем не менее, какой-то документ "обзор на 10 000 футов" был бы полезен. Я не так беспокоюсь о "как", потому что я планирую просто позвонить в библиотеку прошивки поставщика микросхем., @user31708