[nRF51822] 4、 图解nRF51 SDK中的Schedule handling library 和Timer library

简介:


 

 

: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~  



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/5092871.html,如需转载请自行联系原作者

相关文章
|
4月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
187 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
开发工具
如何使用webpack打包一个库library,使用webpack打包sdk.
如何使用webpack打包一个库library,使用webpack打包sdk.
189 0
|
开发工具 git
Mac执行命令code ./ 报错git: error: unable to read SDK settings for '/Library/Developer/CommandLineTools...
Mac执行命令code ./ 报错git: error: unable to read SDK settings for '/Library/Developer/CommandLineTools...
293 0
|
Web App开发 开发工具 Android开发
【视频云端SDK】关于安卓指令集的兼容,Library xxx.so not found
使用SDK出现找不到so,或者说loadLibrary的时候总是会出现找不到so的错误,为什么会总是出现这种情况呢?
2636 0
Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 10 declared in library
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smaller than version 10 declared in library [org.
2141 0
|
4月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
107 0
|
1月前
|
Java Linux API
Android SDK
【10月更文挑战第21天】
74 1

热门文章

最新文章