cumtgao 发表于 2015-3-30 20:41:08

NRF51822如何调用协议栈提供的API函数?

我们在使用NRF51822做蓝牙低功耗时会发现,需要先烧写官方提供的一个协议栈。hex文件。                  
之后是烧录我们的APP工程文件,细心的会发现工程文件IROM起始地址变成了0X14000,RAM也便宜了0X2000。

这样的工程很像我们平常经常用到的bootloader+app工程模式设置方式,但是我们平常用的bootloader和app都是只调用各自工程内的函数,没有跨工程调用。

那么问题来了,51822芯片是如何让我们的app工程调用官方提供的HEX文件内的函数的呢?

我猜测如下:
官方的HEX文件内没有main函数,编译成hex文件后看各个函数的绝对地址,在app中调用的是指向该绝对地址的函数指针。


但是这种做法没有亲自验证,希望能有大牛级人物来个较详细的详解。

vdeam 发表于 2015-3-30 23:50:12

同样表示好奇~

alcohol 发表于 2015-3-31 08:22:16

不是大牛,懂点系统的东西:

这个最简单的,我认为可以做分片的或调度的算法,到了时间片或允许非协议栈运行,中断之。

cnshibo 发表于 2015-3-31 08:39:46

之前研究过,不过有点忘了。调用 stack其实是通过一个中断过去的。他这样做的好处是把stack模拟成 外设了。

cumtgao 发表于 2015-3-31 09:10:58

cnshibo 发表于 2015-3-31 08:39
之前研究过,不过有点忘了。调用 stack其实是通过一个中断过去的。他这样做的好处是把stack模拟成 外设了。 ...

我刚特意去看了两个工程的启动代码,在启动代码里没有看到你说的中断。
如果模拟成外设,应该在中断向量表里有相应的中断。

sunicecream 发表于 2015-3-31 11:15:21

我也是这块搞不清楚,哪位高人来讲讲

cumtgao 发表于 2015-3-31 15:59:22

alcohol 发表于 2015-3-31 08:22
不是大牛,懂点系统的东西:

这个最简单的,我认为可以做分片的或调度的算法,到了时间片或允许非协议栈运 ...

再次仔细看了官方提供的代码,确实是通过中断进去的。

cnshibo 发表于 2015-4-1 13:08:02

cumtgao 发表于 2015-3-31 09:10
我刚特意去看了两个工程的启动代码,在启动代码里没有看到你说的中断。
如果模拟成外设,应该在中断向量 ...

软件中断。

abbott 发表于 2015-4-1 14:25:49

知道一个办法,不知道是否可以!可以将函数的指针定义在程序固定位置,APP访问这些函数指针即可!

muniao 发表于 2015-4-1 14:41:22

nrf是有6个SWI(Software Interrupts)的

eye 发表于 2015-4-16 13:07:23

请转到S110头文件nrf_svc.h,就知道答案了。
页: [1]
查看完整版本: NRF51822如何调用协议栈提供的API函数?