mac os 编译 linux.,Mac OS X & Linux下搭建Nrf51822开发环境与编译过程

不知道为什么Nordic官方不提供Mac的开发工具以及开发文档,也不知道国外有那么多的教程,为何都是让你绕圈子。官方推荐的IDE是Keil μVision4,这款软件是7年前开发的几乎没有更新过,体验极差。。非常影响写代码心情,所以花了点时间折腾,现在终于可以在Mac或者Linux上面开发了

首先购买开发板,否则下面的都是废话,可以找万能的taobao

Step1 下载SDK

下载地址:http://developer.nordicsemi.com/

当前最高版本是V10

解压zip包到某个项目目录

Step2 下载交叉编译工具

即GCC ARM Embedded

下载地址

我解压到了/usr/local/gcc-arm-none-eabi-5_2-2015q4/

Step3 下载Jlink工具

下载地址

下载的是

0e64da26bbebcd4341911195dddcb0d7.png

Step4 配置编译工具路径

打开/..../nRF51_SDK_10.0.0_dc26b5e/components/toolchain/gcc/Makefile.posix

改为:

GNU_INSTALL_ROOT := /usr/local/gcc-arm-none-eabi-5_2-2015q4

GNU_VERSION := 4.9.3

GNU_PREFIX := arm-none-eabi

编译例程代码

进入demo目录

...../nRF51_SDK_10.0.0_dc26b5e/examples/ble_peripheral/ble_app_template/pca10028/s110/armgcc

make

烧录

如果安装了上述的segger的Jlink工具,那么在命令行中实际上可以直接使用JlinkExe进行烧录,稍微麻烦点,github有很多脚本。但是Nordic官方也提供了nrfjprog实际上是JlinkExe的封装。

下载地址

5f38baab7e73dc40ca4a02dca21a59f7.png

清空数据

nrfjprog --eraseall

烧录hex文件

nrfjprog --program /path-to-hex-file.hex

出现以下表示烧录成功

Parsing hex file.

Reading flash area to program to guarantee it is erased.

Checking that the area to write is not protected.

Programing device.

也可以使用Makefile中提供的方法

#烧录 softdevice

make flash_softdevice

#烧录application

make flash

Flash与RAM空间分配问题

因为不同版本的sdk以及不同的Nrf芯片协议栈softdevice的空间可能不同,所以在烧录application的时候,要指定的起始也不同

#makefile片段

nrf51422_xxac_s110: OUTPUT_FILENAME := nrf51422_xxac_s110

nrf51422_xxac_s110: LINKER_SCRIPT=ble_app_template_gcc_nrf51.ld

引入了ble_app_template_gcc_nrf51.ld

/* Linker script to configure memory regions. */

SEARCH_DIR(.)

GROUP(-lgcc -lc -lnosys)

MEMORY

{

FLASH (rx) : ORIGIN = 0x18000, LENGTH = 0x28000

RAM (rwx) :  ORIGIN = 0x20002000, LENGTH = 0x2000

}

SECTIONS

{

.fs_data_out ALIGN(4):

{

PROVIDE( __start_fs_data = .);

KEEP(*(fs_data))

PROVIDE( __stop_fs_data = .);

} = 0

}

INCLUDE "nrf5x_common.ld"

其中FLASH与RAM的区段要根据实际情况来设置,共计四个数值,ram起始与结束以及flash起始于结束.

根据s110_nrf51822_8.0.0_migration_document.pdf文档的信息:

ed0d7b48a8e8c4a6c75ed60d341648be.png

我们可以知道对于10.0的SDK即softdevice版本8.0的协议栈长度为0x18000,因为总长度为16 kB (0x40000),所以Application地址起始为0x18000,然后最大长度为:

0x40000 - 0x18000 = 0x28000

the flash size of the device is assumed to be 256 kB (0x00040000) and the RAM size of the device is assumed to be 16 kB (0x00004000). RAM is always located from execution address 0x20000000. The example will assume SoftDevice B described above will be used. The range of flash from 0 to 0x00020000 (128 kB) is used by the SoftDevice protocol stack. The range of RAM from 0x20000000 to 0x20002000 (8 kB) is used by the SoftDevice protocol stack.

内存从0x20000000开始分配,16kb空间总长度为0x00004000,SoftDevice 协议栈使用了8k(0x00002000)内存,所以Application的RAM起始为:

0x20000000 + 0x00002000 = 0x20002000

剩余可用RAM长度为8kb 0x2000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值