Arduino:检测代码信息



是否有任何方法可以检测代码版本或诸如最后更新或二进制代码大小的任何信息?

这是示例:

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  // turn the LED on (HIGH is the voltage level)
  delay(1000);
  // wait for a second
  digitalWrite(LED_BUILTIN, LOW);
  // turn the LED off by making the voltage LOW
  delay(1000);
  // wait for a second
}

如果我将代码上传到Arduino董事会,我可以在Arduino中检测有关代码大小或最后修改时间或上传时间等的任何信息吗?

谢谢。

汇编日期存储在__DATE__宏中,当前的编译系统时间存储在__TIME__宏中。同样有用的是存储文件名的__FILE__宏。参考(和其他相关宏):http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_preprocessor.pre-defined_macros.html

这里有一些有趣的讨论:

https://github.com/arduino/arduino/issues/5618

在该线程中,他们正在讨论在编译/上传时存储代码的git哈希的方法。如果您使用的是Git版本控制,则信息可能比上次修改的时间或代码大小更有用,以确定在微控制器上运行的哪个版本并能够轻松检索该版本。我不确定自己对在每次上传的每一个上传上都会自动做出提交有多疯狂,一旦测试最终确定,请稍后会挤压它们。如果您不使用git,则可以适应相同的技术添加您喜欢的任何其他版本信息,甚至可以在该版本上进行代码的自动备份。

正如FACCHINM在该线程中所解释的那样,Arduino IDE的最新版本在整个构建过程中提供了钩子,您可以使用这些钩子来添加其他操作。请参阅:

https://github.com/arduino/arduino/wiki/wiki/arduino-ide-1.5-3rd-party-hardware-specification#pre-and-and-post-build-build-build-build-nooks-since-since-incine-iide-165

原始建议是将版本信息存储在EEPROM中。我相信最常见的方法是通过.EEP文件。这个想法的一个问题是,Arduino Uno和流行的第三方硬件软件包使用的流行的Optiboot引导加载程序不支持在上传过程中写入EEPROM(为了在0.5 kb的启动部分中安装启动加载程序)。您还需要避免通过草图使用相同的EEPROM地址引起的冲突。

另一个想法是将其存储在代码本身中。我猜这将通过使用钩子自动更新草图包含的标头文件"库"来完成。例如:

#include <VersionTracker.h>

现在您如何访问该信息?您可以在草图中有代码,以根据要求或启动发送该信息。一个简单的例子:

void setup() {
  Serial.begin(9600);
  Serial.print(F("Filename: "));
  Serial.println(F(__FILE__));
  Serial.print(F("Compilation timestamp: "));
  Serial.println(F(__DATE__ " " __TIME__));
}
void loop() {}

将在启动时将此信息打印到串行监视器。当然,您可以使用任何其他通信方法。这种事情会增加一些重要的开销,因此从微控制器下载固件,也许是可取的(如果不太初学者友好的话),然后找出一种从拆卸中找到版本信息的方法。

您无法获得的时间。Arduino没有任何时钟或任何方法可以知道时间。

,如果您使用Avrdude将芯片读取的十六进制代码读取,然后查看您阅读的内容的大小,则可以获得的代码大小。

最新更新