解决方案:
\n事实证明它与 USART 没有任何关系。问题出在 Makefile 中。我重复使用了长期以来一直用于 atmega328p 和 atmega2560 的 Makefile。但是在将 elf 转换为 hex 文件时,此 Makefile 不包含 .rodata 部分。我想这部分从来没有用于“旧的”atmega 部件。在十六进制文件中包含 .rodata 部分后,一切都按 atmega4809 的预期工作。
\nMakefile 之前的部分:
\n$(OUT).hex: $(OUT).elf\n rm -f $(OUT).hex $(OUT).eep.hex\n $(OBJCOPY) -j .text -j .data -O ihex $(OUT).elf $(OUT).hex\n $(SIZE) $(OUT).hex\nRun Code Online (Sandbox Code Playgroud)\n之后的 Makefile 部分:
\n$(OUT).hex: $(OUT).elf\n rm -f $(OUT).hex $(OUT).eep.hex\n $(OBJCOPY) -j .text -j .data -j .rodata -O ihex $(OUT).elf $(OUT).hex\n $(SIZE) $(OUT).hex\nRun Code Online (Sandbox Code Playgroud)\n原问题:
\n以下代码的结果是:
\n\n$(OUT).hex: $(OUT).elf\n rm -f …Run Code Online (Sandbox Code Playgroud)