FreeRTos 执行空函数指针,重启的现象是为什么

问题:
当代码中由于不小心执行了,空函数结果出现,机器重启的现象.这是为什么?

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的数据区的数据的不同可能出现不一样的现象.
因此出现重启,只不过是众多可能性的一种而已.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值