510
个编辑
更改
无编辑摘要
2.了解如何进行低功耗处理(main()函数中while循环的idle_state_handle空闲任务处理函数)。
LOG打印实验1.1_ble_central_log与2.1_ble_peripheral_log,LOG打印实验是在低功耗实验的基础上,新增了LOG打印部分。
{{Note|text=注意:我们的LOG工程,仅针对RTT部分,没有介绍UART,UART的使用大家可以查看基础实验部分|type=warning}}
我们打开J-Link RTT Viewer,选择我们的Jlink仿真器,可以看到log打印如下。
[[文件:Nrf rtt 11.png|边框|居中|无框|656x656像素]]
我们在工程中,新增加了nRF_Log与nRF_Segger_RTT分组,这两个分组中分别包含了log打印的相关函数,以及RTT的相关函数。
{{Note|text=使用RTT,可以从目标微控制器输出信息,并以非常高的速度向应用程序发送输入,而不会影响目标的实时行为。
默认实现每个方向使用一个通道,用于可打印的终端输入和输出。使用J-Link RTT Viewer,该通道可用于多个“虚拟”终端,允许使用一个目标缓冲区打印到多个窗口(例如一个用于标准输出,一个用于错误输出,一个用于调试输出)。例如,可以使用附加的up(到主机)通道来发送分析或事件跟踪数据。|type=info}}
log打印实验相对于前一章节的低功耗实验,新增的功能并不多,我们仅仅添加了LOG的RTT打印功能,这边我们首先还是看下mian函数。
</syntaxhighlight>
我们查看到log_init()函数,先调用NRF_LOG_INIT()函数初始化LOG,然后我们调用NRF_LOG_DEFAULT_BACKENDS_INIT()函数来决定LOG的底层调用。<syntaxhighlight lang="c" line="1" start="140">
//******************************************************************
</syntaxhighlight>
上面说明了如何去初始化LOG向RTT打印的功能,下面我们将给大家介绍一下LOG打印的函数,毕竟这个才是我们真正要用到的部分。
</syntaxhighlight>
从机部分与主机部分新增log功能相同,这边不再赘述。
LOG打印实验,大家需要掌握的三个要点如下:
3.要善于使用log功能,这样有利于我们程序的流程开发及异常问题的查找和处理。
通用扫描实验1.2_ble_central_scan_all与2.2_ble_peripheral_adv_all,给大家带来的是主机的扫描功能展示,以及从机的广播功能展示。
大家都清楚,低功耗蓝牙主从机间交互数据的方式一般来说是有两种,一种是连接之后通信(这个是蓝牙的主要功能),另一种就是本实验带来的主机扫描获取从机的广播数据。而上述的两种方式,不管是哪一种,都是需要扫描功能的,毕竟连接通信之前,我们的主机也是需要扫描到从机设备才可以发起连接。
主机log打印如下,先打印当前例程的名称'''1.2_ble_central_scan_all''',然后将会打印扫描到的从机设备的信息,格式如下:<syntaxhighlight lang="c">
Device MAC: 0x010203040506 // 从机设备MAC地址
[[文件:Nrf rtt 22.png|边框|居中|无框|656x656像素]]
相对于LOG打印的工程,我们新增了nRF_BLE分组,这个分组下包含的就是BLE协议相关的文件,我们在本实验中只使用了nrf_ble_scan.c下的扫描功能函数。
[[文件:Nrf group nrf ble.png|边框|居中|无框|296x296像素]]
//******************************************************************
// fn : main
</syntaxhighlight>
首先我们看一下我们的扫描功能的初始化函数,可以看到我们最终调用的是库函数中的nrf_ble_scan_init()去初始化我们扫描,在这个函数中,有两个参数需要我们关注,一个是init_scan(这个参数携带的我们对于扫描的设置),另一个是scan_evt_handler(当我们扫描到设备之后,将会由这个回调函数返回事件信息给我们)。<syntaxhighlight lang="c" line="1" start="155">
//******************************************************************