问题:
当代码中由于不小心执行了,空函数结果出现,机器重启的现象.这是为什么?
int (*p_cxt_fun)(int, int) = NULL;
void main( void *pvParameters )
{
p_cxt_fun(1,2);
猜测:
可能是空函数与RESET函数刚好地址一致,因此调用空函数的时候,无意中执行了重启函数REST,所以才出现重启现象.
对猜测的调查:
RESET函数根本不是0,因此上面猜测是错误的.
调查结果:
调用空函数后,PC指向了 0,然后根据地址0的数据,当成了指令集执行. 所有可能出现各种现象,重启只是其中一个可能而已.
上面的图中可以看书,调用空指针函数p_cxt_fun的汇编代码.跳转到 内存的0地址.(内存中0地址保存的时候,一些常用数据区,并非代码区域)准备继续执行.
上面图说明,把内存地址0的数据区,当成指令集 ,继续执行.
最后出现什么现象,就跟地址0的数据区的数据的不同可能出现不一样的现象.
因此出现重启,只不过是众多可能性的一种而已.