如何读取ATMEGA328上的重置矢量



我有几个基于ATMEGA328的自定义板:我最近发现标准的Arduino引导加载程序不能正确处理看门狗超时(它一直在重置,所以设备在下一次电源循环之前都会被有效地阻塞(,所以我切换到Optiboot引导加载程序。

我想在我的应用程序中添加一些东西,告诉我引导程序是Arduino还是Optiboot。由于Optiboot要小得多,重置矢量不同,因此打印出来将是一个很好的指示。

Serial.println(pgm_read_word_near(0(,HEX(;

上面的代码行打印出940C,我期待着类似7E00的东西。如何从重置矢量中打印出地址?

启动闪存部分的实际起始地址由BOOTSZ保险丝确定。

这读取经典ATmega:的引导加载程序的大小

uint32_t bootloaderSize;
cli();
uint8_t highBits = boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS);
sei();
if (!(highBits & bit(FUSE_BOOTRST))) {
uint8_t v = (highBits & ((~FUSE_BOOTSZ1 ) + (~FUSE_BOOTSZ0 )));
bootloaderSize = MIN_BOOTSZ << ((v >> 1) ^ 3);
}

使用#include <avr/boot.h>

最新更新