nrf5 sdk调用softdevice函数代码的方式

刚开始用nrf5 sdk的时候,好奇app程序是如何调用softdevice函数的。工程里没有静态库,也没有源代码,只有一个hex。

跟着ble的函数走下去,发现走到了一个SVCALL函数就走不下去了,再往下走就是softdevice真正的函数了,可惜nordic将其直接做成了hex,看不到源码,也无法追踪。

SVCALL使用了arm的svc指令,经过以下几步,就实现了调用softdevice函数。

  1. 手动发起svc中断,并将ble相关函数代号放在cpu寄存器r0里面
  2. svc中断处理函数由softdevice实现,我们也是看不到的,中断发起后,由中断向量表带着cpu的pc寄存器走到了flash中的svc处理函数地址,在svc处理函数中解析函数代号,并跳转到对应函数执行,比如使用以下的逻辑:
//这段程序位于softdevice的hex里,在此只是演示一下逻辑
if (number == 0x10)//这个0x10是在我们的app程序里约定好的,大家可以自己去找
	ble_enable();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朴人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值