作为两家BLE芯片大厂之一,nordic不像TI那么开放,nordic的开发资料是很难找的。

今天有幸得到nordic的BLE芯片nRF51822的SDK,看了一下。
 
首先,nordic号称协议栈(称为SoftDevice)和应用完全分开,是怎么实现的呢?
TI的协议栈以库的形式提供,用户应用在链接时和库链在一起形成最终的机器代码,TI提供库和头文件供用户使用
nordic用了不同的方式:SoftDevice,这样协议栈和用户应用可以单独编译和链接。实现BLE的SoftDevice似乎叫S110,由nordic提供。我猜nordic应该只提供S110的机器码,应该不会提供源代码。
看了nRF51 SDK,里面确实没有BLE的库,所有sd_打头的函数都是SoftDevice相关的。比如:sd_ble_gap_adv_data_set
这个函数是这么定义的:
SVCALL(SD_BLE_GAP_ADV_DATA_SET, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen));
这个SVCALL在使用MDK时是这么定义的:
#define SVCALL(number, return_type, signature) return_type __svc(number) signature
似乎是使用了Cortex-M0的SVC机制实现Softdevice。
(题外话,我在想Nordic会把自己的协议栈绑在一种CPU架构上吗?不是的,代码里有一个开关SVCALL_AS_NORMAL_FUNCTION可以让上面的SVCALL宏定义变成普通的函数声明。当然在没有源代码和库的情况下打开这个开关会出现找不到函数实现的链接错误)
 
总体来说我觉得softdevice就是nordic一种封闭协议栈核心代码的方式,和TI提供库文件的方式没有区别。
nordic号称自己的协议栈可以配合其它的RTOS,但是如果RTOS也用了相同的SVC呢?
我不关心nordic或者TI的协议栈核心代码实现,就算给我源代码我也懒得看,但是我觉得TI用库提供协议栈的方式更直接和通用;nordic这种方式太取巧了,某些时候会给用户带来一些限制。
当然51822还是有一些优势的,至少封装比较小。
 
至于怎么在nRF51822上开发应用我还没来得及看,没办法和TI的架构比较

nRF51822 SDK初体验的更多相关文章

  1. OPhone SDK初体验

    OPhone SDK初体验 write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 背景说明 中国伟大的垄断龙头,世界上也是顶尖的中移动最 ...

  2. 实时人流量监测——海康威视sdk初体验

    本文主要是博主使用海康SDK进行人流量统计的摸索过程,在这里简单记录一下. 查询文档,能实现人流量统计大概有两种方式,报警或者监听, 这边我选择了监听方式,NET_DVR_StartListen_V3 ...

  3. 【阿里云产品公测】消息队列服务MQS java SDK 机器人应用初体验

    [阿里云产品公测]消息队列服务MQS java SDK 机器人应用初体验 作者:阿里云用户啊里新人   初体验 之 测评环境 由于MQS支持外网访问,因此我在本地做了一些简单测试(可能有些业余),之后 ...

  4. Apache Beam入门及Java SDK开发初体验

    1 什么是Apache Beam Apache Beam是一个开源的统一的大数据编程模型,它本身并不提供执行引擎,而是支持各种平台如GCP Dataflow.Spark.Flink等.通过Apache ...

  5. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  6. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  7. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

  8. iOS AR技术初体验,使用EasyAR示例程序的小白指南

    QQ前两天的传递火炬,是我第一次直接接触到AR.(虽然之前听同事说过,因为他喜欢玩游戏,PS.3DS等等都玩过,这个技术最开始就是从这里出现的).所以感觉很有趣,就想自己也试着搞一下玩玩...下面是我 ...

  9. Android开发学习之路--百度地图之初体验

    手机都有gps和网络,通过gps或者网络可以定位到自己,然后通过百度,腾讯啊之类的地图可以显示我们的地理位置.这里学习下百度地图的使用.首先就是要申请开发者了,这个详细就不多讲了.http://dev ...

随机推荐

  1. 黑马程序员_Java面向对象_包

    7.包 7.1包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称是:包名.类名. 包也是一种封装形式. 利用命令行自动生成文件夹格式:D:\jav ...

  2. CSS flex让所有灵活的项目都带有相同的长度,忽略它们的内容:

    .flexbox {     display: -webkit-box;     display: -webkit-flex;     display: -ms-flexbox;     displa ...

  3. puppet foreman

    服务器(物理机器和虚拟机)多了以后需要工具来管理,经常登陆系统后不知是在虚拟机上还是在物理机上?如果在虚拟机上这个虚拟机运行在哪个服务器节 点(host)上?如果在物理机上运行在什么配置的物理机上?运 ...

  4. Android——自定义Actionbar左侧覆盖不全的解决方案

    今天遇到一个很蛋疼的问题,就是在自定义Actionbar的时候,setCustomView中,自定义的view怎么也覆盖不了整个视图,左侧一直留有一个空白,看下图: 所写的部分代码如下: protec ...

  5. 第18讲- UI常用组件之EditText

    第18讲UI常用组件之EditText 三.文本输入框EditText EditTex类继承自TextView.EditText是接受用户输入信息的最重要控件.在html当中,相当于<input ...

  6. jQuery获取select option

    jQuery的一些方法理出一些常用的方法: //获取第一个option的值 $('#test option:first').val(); //最后一个option的值 $('#test option: ...

  7. Python 中文报错 SyntaxError: Non-ASCII character解决办法

    只需要在最顶部的位置加上 #-*- coding:utf-8 -*- 就行了. 如果还是没有好,打开设置并搜索file encoding并作如图修改便好.

  8. how tomcat works 读书笔记(一)----------一个简单的webserver

    http协议 若是两个人能正常的说话交流,那么他们间必然有一套统一的语言规则<在网络上server与client能交流也依赖与一套规则,它就是我们说的http规则(超文本传输协议Hypertex ...

  9. [Redux] Extracting Presentational Components -- Footer, FilterLink

    Code to be refactored: let nextTodoId = 0; class TodoApp extends Component { render() { const { todo ...

  10. 随着时间的推移:构造SDK路径错误(An error occurred while automatically activating bundle com.android.ide.eclipse.adt)

    在进行Android应用的开发过程中,有时候在配置SDK路径的时候(Windows->Preferences->Android).会出现例如以下报错:An error occurred w ...