0

我试图了解微控制器是如何工作的,基本上。至少从软件开发人员的角度来看。我对“make-files”、编译和链接过程以及低级编程有一些基本的了解。但我想学习的是更接近硬件的编程。

所以我开始剖析 Arduino 的 HardwareSerial 代码(HardwareSerial.c 和 HardwareSerial.h)。我无法弄清楚 UBRRH(或 UBRR0H)的定义位置,这意味着我们有 serial0(Arduino-Uno 的唯一一个)。我的猜测是电路板的制造商需要以某种方式提供这个。我认为根据我使用的目标板,编译不同的代码。因此,如果我为 Arduino-Uno 编译代码,编译后的文件将以某种方式包含例如 UBRRH 的定义。那么 Arduino IDE 是如何知道我正在编译的板子的呢?

我的目标是最终能够编写自己的串行协议。甚至可能设计我自己的电路板..尽管我创建的唯一“电路板”是 H 桥,但是嘿,瞄准高...

4

2 回答 2

1

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

于 2019-04-03T10:30:16.567 回答
0

能够构建自己的兼容板实际上很常见。检查以下内容

基于这个问题(鉴于您引用了“UBRRH”),我猜您已经知道 Arduino UNO 中存在什么控制器。

该文件/hardware/arduino/avr/cores/arduino/HardwareSerial.h使用这些寄存器。

寄存器在库中声明,这些库作为编译器工具链的一部分打包,由 Atmel 公司提供。

该文件hardware/arduino/avr/boards.txt具有编译器的预处理器定义,这些定义是根据您在tools>boardArduino IDE 中选择的板来选择的。

现在,这些库会根据它们从 Arduino IDE 的 board.txt 文件中获得的 build.mcu 属性找出正在编程的控制器类型。

根据选择的 MCU,库定义或不定义代码对 MCU 进行编程所需的寄存器(例如“UBRRH”)

我希望这可以帮助你到达你想去的地方。

于 2019-04-05T16:00:16.023 回答