函数指针和给特定地址赋值

1、给特定地址赋值的方法:
比如给0x4E000000的地址赋值10
(*(volatile unsigned *)0x4E000000)=10

2、函数指针定义需要用到关键字typedef
例如:typedef int (*initOSFile_func_t)(void);
这个时候initOSFile_func_t就是函数指针类型了

3、直接调用地址例如跳转到0x31000000;
( (void (*)( ))0x31000000 ) ( );

STM32
keil里面的关中断和开中断
__disable_irq() ; //关闭总中断
__enable_irq() ; //打开总中断

//关闭所有中断(但是不包括fault和NMI中断)
__asm void INTX_DISABLE(void)
{
CPSID I
BX LR
}

//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}

汇编跳转
__asm void Jump1(u32 appxaddr)
{

cpsid   i				//Disable interrupt
ldr     r1, [r0]		//Get MSP location
ldr     r2, [r0, #4]	        //Get resethanler address
movs    r0, #0
msr 	CONTROL, r0		//Use MSP
msr 	MSP, r1
bx	r2

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值