Откуда arduino-uno знает, что у него только один последовательный порт? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь понять, как работает микроконтроллер. По крайней мере, с точки зрения разработчиков программного обеспечения. У меня есть некоторые базовые знания о «make-файлах» и процессе компиляции и компоновки, а также низкоуровневого программирования. Но я хочу научиться программированию еще ближе к аппаратному обеспечению.

Итак, я начал анализировать код HardwareSerial (HardwareSerial.c и HardwareSerial.h) для Arduino. И что я не мог понять, так это где UBRRH (или UBRR0H) определены, что означает, что у нас есть serial0 (единственный для Arduino-Uno). Я думаю, что производитель платы должен как-то это предоставить. Я думал, что в зависимости от целевой платы, которую я использую, компилируется другой код. Так что, если я скомпилирую код для Arduino-Uno, скомпилированный файл будет как-то включать определение, например, UBRRH. Тогда как Arduino IDE узнает, какую плату я собираю?

Моя цель - со временем написать свой собственный последовательный протокол. И, может быть, даже спроектировать мою собственную доску ... Хотя единственная «доска», которую я создал, это H-мост, но эй, цель высокая ...

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

как Arduino IDE узнает, какую плату я собираю?

Вы выбрали его в меню Инструменты -> Доска.

Для каждой доски хранится много информации.

Взгляните, например, на Arduino \ hardware \ arduino \ avr .

Я предполагаю, что производитель платы должен предоставить это как-то. Я думал, что в зависимости от целевой платы, которую я использую, разные код скомпилирован. Так что, если я скомпилирую код для Arduino-Uno скомпилированный файл будет так или иначе включать определение, например, UBRRH.

Более или менее да. Взгляните сюда https://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html

https://www.nongnu.org/avr-libc/user-manual/index.html

0 голосов
/ 05 апреля 2019

На самом деле довольно часто можно собрать собственную совместимую плату.Изучите следующие вещи, которые

На основании вопроса (учитывая, что вы ссылались на «UBRRH») IЯ предполагаю, что вы уже знаете, какой контроллер присутствует в Arduino UNO.

Файл /hardware/arduino/avr/cores/arduino/HardwareSerial.h использует эти регистры.

Регистры объявлены в библиотеках, которые упакованы как частьнабора инструментов компилятора, поставляемого компанией Atmel.

Файл hardware/arduino/avr/boards.txt содержит определения препроцессора для компилятора, которые выбираются в зависимости от того, какую плату вы выбрали в tools>board в Arduino IDE..

Теперь эти библиотеки узнают, какой тип контроллера программируется, основываясь на свойстве build.mcu, которое они получают из IDE Arduino из файлаboards.txt.

В зависимости от того, какой mcuбыли выбраны библиотеки, определяющие или не определяющие регистры, которые требуются коду для программирования MCU (например, «UBRRH»)

Я надеюсь, что это поможет вам добраться туда, куда вы хотитеуйти.

...