基本上,我正在尝试了解微控制器是如何工作的。至少从软件开发人员的角度来看是这样。我对"make-files“、编译和链接过程以及低级编程有一些基础知识。但我想学的是更接近硬件的编程。
所以我开始为Arduino剖析HardwareSerial代码(HardwareSerial.c和HardwareSerial.h)。我不明白的是UBRRH (或UBRR0H)是在哪里定义的,这意味着我们有serial0 (Arduino-Uno唯一的一个)。我的猜测是,电路板制造商需要以某种方式提供这一点。我认为,根据我使用的目标板,不同的代码会被编译。因此,如果我编译Arduino-Uno的代码,编译后的文件将以某种方式包含UBRRH等定义。那么Arduino IDE如何知道我正在编译什么板呢?
我的目标是最终能够编写我自己的串行协议。甚至可以设计我自己的冲浪板..尽管我创建的唯一“板”是一个H桥,但是,嘿,目标远大……
发布于 2019-04-03 18:30:17
Arduino IDE如何知道我正在编译哪块板?
您在菜单Tools -> Board中选择了它。
每个板上都存储了大量的信息。
以Arduino\hardware\arduino\avr为例。
我的猜测是电路板的制造商需要以某种方式提供这一点。我认为,根据我使用的目标板,不同的代码会被编译。因此,如果我编译Arduino-Uno的代码,编译后的文件将以某种方式包含UBRRH等定义。
或多或少是这样的。看看这里,https://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html
发布于 2019-04-06 00:00:16
实际上,能够构建自己的兼容电路板是很常见的。在此基础上检查以下内容
根据这个问题(假设您引用了"UBRRH"),我猜您已经知道在Arduino UNO中存在什么控制器。
文件/hardware/arduino/avr/cores/arduino/HardwareSerial.h使用这些寄存器。
寄存器在库中声明,这些库被打包为Atmel公司提供的编译器工具链的一部分。
文件hardware/arduino/avr/boards.txt具有编译器的预处理器定义,这些定义是根据您在Arduino IDE的tools>board中选择的板来选择的。
现在,这些库根据它们从boards.txt文件中从Arduino IDE获得的build.mcu属性来查找正在编程的控制器的类型。
根据所选择的mcu,库定义或不定义代码编程MCU所需的寄存器(例如"UBRRH")。
我希望这能帮助你到达你想去的地方。
https://stackoverflow.com/questions/55480955
复制相似问题