:nRF51822虽然是一个小型的单片机,但是能真正达到任意调用其官方驱动以及BLE协议栈的人还是奇缺的。据我所见,大都拿官方给的一个冗长的蓝牙低功耗心率计工程改的。之前我对于这个工程进行log跟踪,虽然理清了其大致流程,但还是达不到任意修改甚至是构建自己的框架的程度。本文接上一篇,继续理解library中的调度处理和定时器部分。

1、Schedule handling library

调度程序主要负责从中断上下文向main函数上下文传送执行命令。

在main函数中:

1.为每种期望的事件定义句柄

2.在进入main函数的循环前调用APP_SCHED_INIT()初始化调度程序

3.在main loop中每次因为事件(特别是sd_app_evt_wait()返回)而唤醒应用时调用app_sched_execute()

在中断中:

1.在中断句柄中调用app_sched_event_put将相应的参数和事件句柄传入。这样,会把一个中断事件插入到sched队列中。

2.app_sched_ececute函数将会取出该事件并在main中调用它的句柄。

ps:关于这个的例子在HID Mouse Application和HID Keyboard Application中有介绍,这些留着后面讲。

          图为:The high level design of the scheduler

Applications using the Scheduler

在示例中使用scheduler的事件流图

              图为:Receiving an event from the ble stack causing a service event

                      图为:The battery timer expires

Applications not using the Scheduler

不使用scheduler的事件流图(这个就是我们之前分析的hrs应用,采用ble_evt_dispatch将BLE协议栈层的消息在main中分配给各个模块来处理

          图为: Receiving an event from the ble stack causing a service event

                      图为:The battery timer expires

2、Timer library

你可以基于RTC1创建多个定时器实例。检查定时器是否timeout是在RTC1的中断中,定时器列表处理实在软中断(SWI0)中。这两个中断都是低优先级的。

Note

当调用app_timer_start()或者app_timer_stop()时,定时这两个器操作会在等待排队并且触发软件中断。他们实际上是在SWI0中断中被执行的。由于SWI0是低优先级,如果应用程序代码调用的定时器功能函数正处于APP_HIGH或者APP_LOW,start和stop操作将直到应用程序句柄返回才会被执行。

在APP_TIMER_INIT中使用使用USE_SCHEDULER参数来选择是否用scheduler。

@beautifulzzzz 2016-01-01 continue~ 

[nRF51822] 4、 图解nRF51 SDK中的Schedule handling library 和Timer library的更多相关文章

  1. [nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library

    :本篇是我翻译并加入自己理解的nRF51 SDK中按钮相关操作的库和先进先出队列库.虽然是nRF51的SDK,但是通过此文你将更多地了解到在BSP(板级支持)上层嵌入式程序或OS的构建方法. 1.按钮 ...

  2. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

  3. 如何解决Android SDK中离线文档打开慢的问题

    原文:http://blog.csdn.net/hansel/article/details/39268511 Android SDK中的离线文档虽然都是本地文件,但是有很多Javascript, C ...

  4. 在Salesforce中创建Schedule的Job去定时触发对应的Class

    在Salesforce中也存在着Job的概念,当然了我们可以创建Schedule的Job去定时触发对应的Class,来完成我们所需要定时处理的功能,比如:定时同步数据. 具体处理步骤如下所示: 1): ...

  5. CRM 2013 系统设置新功能一:界面自动保存 及 SDK 中 Xrm.Page.data.entity.save

    CRM 2013 界面会自动保存了..在系统设置中默认“是”,如果不需要可以调整. CRM实体记录在新建时会有出现“保存”按钮,非新建状态下,没有“保存”按钮只有“新建”按钮,系统将会自动为你保存最后 ...

  6. Microsoft SDK 中Sample案例之Amcap項目 的运行方法(转)

    http://blog.csdn.net/erick08/article/details/7194575 Microsoft  SDK 中Sample之Amcap 的运行方法      写这篇文章的由 ...

  7. 【IOS】在SDK中打开其他接入应用的解决方案

      在SDK中打开其他接入应用的解决方案 一直以来,在iOS的开发中,在程序中打开另外一个应用是不允许.后来有正义之士用class-dump在私有API中找到了这样的功能.那就是使用UIApplica ...

  8. Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?

    在做camera和SurfaceView做摄像头程序时,需要获取camera支持的相片大小,在低版本sdk中没有getSupportedPictureSizes函数,怎么办呢,请参阅下面的关键代码: ...

  9. 在SDK中使用Ubuntu仿真器

    Ubuntu仿真器是开发过程中非常有用,尤其是在没有任何Ubuntu设备时.在将仿真器附加到SDK后,你便可以在上面运行程序,安装点击数据包,等等,类似在物理设备上的操作一样. 在这里,您可以了解如何 ...

随机推荐

  1. Eclipse导入Maven项目,使用server 启动报错,class 找不到,

    问题发现: 1.导入maven 项目后,用server 启动,选择项中没有这个项目 解决: 说明server 没有把该项目当成web项目,需要设置 项目右键 properties  ---- proj ...

  2. cassandra指定数据库路径

    参考 https://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html 我们 ...

  3. python代码优化---就喜欢细节

    地址:http://www.codeproject.com/Tips/829060/Python-Code-Optimizations-Part-One 转发过来保存一下.喜欢精雕细琢,编程才有乐趣. ...

  4. com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败。

    com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'sa' 登录失败. at com.microsoft.sqlserver.jdbc.SQLSe ...

  5. 如何写出优雅兼备可读性的javascript代码

    即或是最简单的需求,不同的程序员也会写出不一样的代码: 需求:充值程序过虑不符合条件的充值金额,即只能充入100.200.500.1000金额,其它过虑: 1.菜鸟程序员可能会这样写,虽然可读性强,代 ...

  6. UI基础之UIButton相关

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 1.按钮透明效果 btn.alpha = 0.8; 2.按钮圆角处理 btn ...

  7. [UCSD白板题] Pairwise Distinct Summands

    Problem Introduction This is an example of a problem where a subproblem of the corresponding greedy ...

  8. 个人博客作业week2——代码复审

    1.代码规范 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 代码规范并不是从官僚制度下产生,它是为了提高项目团队开发效率而产生的一种工具,能够极大的增强代码可读 ...

  9. 剑指offer算法_位运算求和

    不用+,-,*,/运算求和,可以分成三步: 1.计算两个数字的异或值,相当于只计算每一位的和,不计算进位,得出结果sum: 2.计算两个数字的与值,相当于求出两个数字的进位,然后左移一位,相当于进位, ...

  10. Hyper-V初涉:功能的添加与虚拟机的创建

    Hyper-V是微软提供的一款高效率的虚拟化管理软件,在早期的Windows服务器中配备Hyper-V组件,Windows 8是首次将企业用Hyper-V集成在个人系统中,可见虚拟化技术的发展之迅速. ...