【发布时间】:2017-12-19 05:20:40
【问题描述】:
我试图在 Atmel AVR 微控制器上编写自己的引导加载程序。我已经从 github 引用了其中一个代码库。我要感谢ZEVERO的代码库
在初级阶段,我了解代码库。但在第 224 行我发现了一行 Reference to the code
**if (pgm_read_word(0) != 0xFFFF) ((void(*)(void))0)(); //EXIT BOOTLOADER**
我理解 if 条件部分,但是当我试图理解真正的陈述部分时,即
**((void(*)(void))0)();**
代码编写者对此给出了解释是//EXIT BOOTLOADER
我的第一个问题是这个复杂声明的含义是什么
**((void(*)(void))0)();**
第二个问题是,它是否退出了微控制器中代码的执行。
【问题讨论】:
-
否(不是直接退出代码);它可能会崩溃,或者以其他方式执行地址 0 处的代码(可能是重新启动代码)。这是未定义的行为,因此很糟糕,除非有一个上下文赋予它定义的行为。
-
对于编写此代码的平台,它可能是重置代码。但这绝不是可移植的。始终使用标准的
exit函数。
标签: c avr bootloader atmel