1
11
正如@iBug所指出的,
实际上,这将程序控制转移到内存地址0。现在,在工作站上,这将是一个巨大的UB,很可能导致一个SEGFULT。 然而,由于所讨论的代码是针对硬件引导加载程序的,它不是UB,它(显然)只是退出引导加载程序。 在硬件层面,几乎 每件事 依赖于实现,几乎 没有什么 是便携式的。您不能期望针对特定硬件平台的C代码以任何方式代表公认的C模式和实践。 |
2
7
通过空函数指针调用是未定义的行为,因此不能保证此技巧适用于其他编译器、更高版本的GCC,甚至不同的优化设置。
这个
|
3
0
如前所述,调用此函数只会导致跳转到地址0。 由于此地址的代码通常不是由您自己的程序定义的,而是由特定的环境定义的,因此行为完全取决于此环境。
您的问题标记为AVM/Atmel:在AVR上,跳转到地址0只会导致重新启动(与硬件重置行为几乎相同,但请注意,MCU将保持中断启用/禁用状态,而不是“真实”重置)。“更干净”的程序可能希望使用看门狗计时器进行“真正的”重置(
|
4
-1
它将简单地调用地址0,就像它是一个返回的函数一样
|
gotti123 · 在MCU上查找Pin 6 年前 |
Daniel Barvík · 使用I2C\U主库AVR 6 年前 |
Bergi · 如何为数据保留固定的闪存部分? 7 年前 |
danieljimeneznz · AVR半双工接收器中断错误 7 年前 |
girikks · 结构值未在主源文件中更新 7 年前 |