需要先烧写softDevice,当然烧写什么样的你自定。
然后你的程序是跟在softDevice后面的,但是keil并不知道这点。所以需要手动设置
先来到options fof target----target
接下来说下原理,我们的程序要紧跟在softDevice后。softDevice有一定的大小(我一直试着找到那篇文档里面有说各个版本的softDevice的ROM RAM占用大小,但是我还没找到,要是你知道了,我还不知道,请告诉我)。这里给出两个数据。
S110两个版本的ROM占用
6.0.0--------80K
7.0.0--------84K 或者88k(也可能是80k)参照某文档
RAM我还不知道,根据某文档的话,s110 ROM都是80k , RAM都是8K。可以根据这个配置,反正我这样配可以用
所以,现在的目标是要设置好这些,你的程序放在哪?你的程序用哪的内存?
我们刚才已经打开了options fof target----target
可以看到下面的IROM1 和 IRAM1前面已经勾上,这就是设置ROM / RAM空间的地方。
我们假设现在要烧写的是使用 80K ROM 和 8K RAM的softDevice。
NRF51822的ROM为256K ,RAM为16K,RAM基地址0x20000000
其中RAM有基地址,也就是操作内存位置=基地址+被操作内存序数
那么,我们放程序的地方就是 80K ROM开始的地方,RAM就是8K RAM开始的地方
ROM的计算: 起始位置(dec 80)*(dec 1024)=(dec 81920)=(hex 14000)
大小计算((dec 256)-(dec 80))*(dec 1024)= (dec 180224)=(hex 2C000)
RAM的计算:
起始位置(dec 8)*(dec 1024)+基地址=(dec 8192)=(hex 2000)+基地址 =0x20002000
大小计算((dec 16)-(dec 8))*(dec 1024)= (dec 8192)=(hex 2000)
所以根据计算填入就OK了。
如图:
在官方的文档中还有一些设置,我并没有关注,原因是不按他们的设置也能用,可能是我个人还有一些东西没有发现,还没调到。如果出现问题,请以官方文档为主