【BLE进阶日记】⑦嵌入式应用程序开发_嵌入式蓝牙开发(1)

本文详细介绍了如何使用mbedBLEAPI和nRF51822开发低功耗蓝牙设备,涵盖了从工具链安装、高级API介绍到实际项目示例的全过程,包括如何在GNU工具链下构建心率监测应用。
摘要由CSDN通过智能技术生成

文章目录

前言

本专栏旨在提供对低功耗蓝牙的一个坚实的、实用的、高水平的理解:数据是如何组织的,设备之间如何相互通信,以及协议设计团队所
做出的关键设计决策和权衡。
1. 第1~4章提供了低功耗蓝牙技术的高级概述,解释了数据是如何组织的以及它的关键限制,同时也介绍了所有你在使用BLE时可能遇到
   的关键概念。
2. 第5~6章介绍用于开发或对支持ble的应用程序或设备进行测试的有用工具(包括硬件和软件)。这些章节集中在低成本,易于访问的
   工具,以帮助你开始低成本开发。
3. 第7章介绍了您可能为BLE使用的主要开发平台(用于产品设计和嵌入式硬件工程师的各种嵌入式电子平台)。
本专栏提供了示例代码,您可以免费在程序和文档中使用它。

本章介绍了编译嵌入式设备代码所需的工具。使用在第5章中讨论的nRF51822-EK,结合自由、开源的GNU工具链和ARM交叉编译器,你将创建一个心率监测示例,使其可以本地运行在nRF51822 SoC上。


一、BLE嵌入式开发简介

本章主要介绍了一些针对任何想要为蓝牙低能耗外围设备创建自定义固件的人可用的现成的和开源的嵌入式开发套件和平台。首先介绍了一个高级BLE API,该API利用了由ARM创建和维护的mbed开发平台。如果您对嵌入式开发不太熟悉,这是一个很好的选择,因为它不需要您熟悉如何自己配置嵌入式工具链或在最低级别上使用嵌入式硬件。大部分复杂的固件实现问题和设置问题都方便地隐藏在易于使用的在线工具和高级API中。

第二部分介绍了嵌入式工具链,即一组用于将标准源代码转换为在嵌入式处理器上运行的可执行二进制文件的工具集合。本节展示了如何在Windows、OS X或Linux上设置交叉编译工具链来构建ARM二进制文件。

本章的最后部分展示了如何在实际应用中使用这些工具和概念,利用Nordic的nRF51822片上系统进行示例项目,该示例项目可以使用标准的心率配置文件将心率数据传输到iOS或Android设备。

二、mbed BLE API

ARM和其合作伙伴公司为了使使用ARM Cortex处理器来开发嵌入式硬件尽可能简单,创建了一个开源的开发平台,称为mbed。mbed允许您编写可在多种支持的ARM处理器上运行,并利用构建在这些处理器之上的API和组件的可移植代码。

您也可以使用mbed与免费的在线协作开发工具以及各种离线商业和开源工具链和IDE。大量的工作已经投入到定义高级API上,这些API将大部分低级芯片细节抽象出来,这些细节可能会占用整体开发预算的大部分。这使得可以重复使用在社区中共享的开源软件组件,并使固件工程师能够更多地专注于项目特定的代码,而不是关于他们选择的微控制器(MCU)的低级实现细节。

对于本章的目的来说,与此相关的是,ARM最近在mbed平台中添加了一个BLE API,它允许您在几十行代码和几小时的工作中实现一个简单的GATT服务器,而无需考虑关于堆栈或芯片组的任何特定供应商细节。

mbed提供了一种简单的方法,可以让您快速启动一个概念验证产品,同时仍然使用一个可以后续转移到生产环境的平台(如果需要,可以将代码导出到离线编译器)。BLE周围的高级抽象意味着您不必花费很多时间学习有关您的BLE SoC或模块的具体细节。例如,实例化标准的BLE服务或特征只需一行代码:

GattService hrmService(GattService::UUID_HEART_RATE_SERVICE);
GattCharacteristic hrmRate(GattCharacteristic::UUID_HEART_RATE_MEASUREMENT_CHAR, 
2, 3, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
GattCharacteristic hrmLocation(GattCharacteristic::UUID_BODY_SENSOR_LOCATION_CHAR,
1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);

在编写本文时,mbed的BLE API仍处于测试版和积极开发中,但目前已经覆盖了大部分您可能需要的原型和概念验证产品的功能。有关mbed或其BLE API的更多信息,以及示例和更新,请参阅mbed项目网站。

三、嵌入式工具链

尽管mbed作为一种可行的嵌入式开发平台,从原型到量产都经过了明确的路径,但任何供应商中性的高级API或平台都必然会失去对低级实现细节的控制。通常,您会在代码和驱动程序的低级优化与易用性之间进行权衡。这种权衡在许多情况下都是有道理的,但显然不能适用于所有的嵌入式开发方法。

在产品设计领域,性能和控制往往比易用性更重要,许多工程师仍然更喜欢处理所有的实现细节,编写自己的低级驱动程序并设置自己的构建环境。编写自己的低级驱动程序显然需要更多的开发工作,但它也确保您对运行产品的代码具有最大的控制权。它还迫使您更加深入地了解处理器,并允许您更大程度上进行性能和成本优化。

对于嵌入式产品来说,能够完全优化代码的大小和性能非常重要。例如,优化代码大小可能允许您使用更小更便宜的处理器,从而节省2美元或3美元的物料费用,这轻松地可以转化为零售价格上的5美元到10美元甚至更多的差额。这样的节省可能会成为一个产品成功与否的关键,因为它可能会导致产品定价错误。控制最终代码大小和性能的最佳方法是完全控制您的编译器和构建环境,使您能够充分利用嵌入式处理器或SoC上的每个时钟周期。

为小型嵌入式处理器编译代码需要使用一种称为工具链的东西。顾名思义,工具链是用于构建可执行代码的一组工具,其中最重要的部分之一是交叉编译器。交叉编译器是在一个体系结构上运行(例如,使用x86指令集),但生成用于不同体系结构(例如,某个ARM变种)的代码。您可以选择商业和开源工具链中的多个商业和开源选项,但在本节中,我们将重点介绍一种开源解决方案。

近年来,GCC(作为GNU项目的一部分的免费开源编译器集合)在支持ARM方面取得了重大进展。这些进展大多与ARM在移动电话和平板电脑领域的统治地位有关(通常使用ARM Cortex-A处理器),但小型深度嵌入式处理器(例如ARM Cortex-M等)也受益于在这方面进行的巨大投资,因为指令集有重叠之处。

GCC广泛应用于各个行业,并且在任何现代操作系统和体系结构上都很方便使用。针对GCC的代码通常具有高度可移植性,您可以在Linux、OS X、Windows或几乎任何其他环境中构建相同的输出,而编译器输出几乎没有变化。后者是极其重要的,也是使GCC成为嵌入式开发的一个主要因素之一。GCC在当前ARM处理器上的表现非常出色,但某些商业编译器在某些任务上仍然表现更好。然而,没有商业工具链能够提供的是,您永远能够使用同一个编译器版本和依赖项重建固件的保证。如果商业工具链需要激活(因此需要激活服务器),但没有及时更新,它们可能无法保证在当前一代操作系统或个人电脑上运行。

如果您刚开始进行嵌入式开发,很容易忽视这个细节。嵌入式设备的寿命可能长达10年甚至20年以上,远远超过大多数软件包的寿命。您今天使用的商业工具和开发环境在10年后可能不存在,而且供应商可能在未来无法激活多年前您大量投资的过时产品。GCC为您提供了保证,您可以存档完整的交叉编译器源代码,包括任何库依赖项,以及您的固件代码,并知道您可以在未来的任何时间重新构建它们。

在非Linux PC上设置GNU工具链曾经是一项相当复杂的任务,但ARM现在通过提供预编译的、定期更新的GCC版本使其变得非常简单,包括易于使用的安装程序,可以处理许多混乱的细节。

设置ARM开发环境的第一步是下载最新的预构建GNU工具链。如下图所示,您可以下载适用于OS X、Windows和Linux的便捷安装程序,以及原始源代码和在其他平台上构建工具链的指南。

网站上提供的最新版本可能有所不同,但通常您应该选择最新的版本。ARM每个季度提供更新,通常将改进编译器和相关库,并生成更小或更高效的编译代码。

3.1、在OS X和Linux上安装GNU工具

如果您使用的是OS X或Linux,您只需要下载相应的安装程序并运行它。任何其他开发工具(如make、makefile中使用的各种命令等)很可能已经在您的开发机器上可用,或者很容易添加(在OS X上使用Xcode,在Linux上使用包管理器)。

您可以使用以下命令确认是否成功安装了GCC交叉编译器:

arm-none-eabi-gcc --version

在这里插入图片描述
您应该会得到以下类似的回应:

arm-none-eabi-gcc(GNU Tools for ARM Embedded Processors)4.8.3 20131129(发布)[ARM/embedded-4_8-branch revision 205641]
Copyright(C)2013 Free Software Foundation, Inc.

这是自由软件;请查看拷贝条件的源代码。没有任何保证,甚至没有适销性或特定用途的适用性。

如果看到这个输出,说明您的交叉编译器已经成功安装,您可以在开发机器上生成ARM二进制文件。

3.2、在Windows上安装GNU工具

如果您在Windows机器上进行开发,您需要下载适当的Windows安装程序,并以与任何其他安装包相同的方式运行它。

确保选择“将路径添加到环境变量”的后安装选项。这将确保工具链可以从任何地方访问,这通常在使用多个文件夹和文件位置时会更便捷。
在这里插入图片描述

如果一切都设置好了,类似于之前展示的OS X/Linux测试,你应该能够切换到命令行,并输入以下命令来查看你安装的GNU工具链的版本:

arm-none-eabi-gcc --version

与Linux和OS X不同,Windows通常不会拥有GNU工具链通常需要的一些附加命令行工具,比如make和一些*nix命令(如ls,cp等)来处理文件和目录。幸运的是,在Windows上安装这些附加工具很容易。GNU CoreUtils for Windows提供了你将需要的所有文件编辑命令的预编译版本。

下载完整的CoreUtils for Windows软件包(除源代码外),并运行安装程序。你还需要make,用来控制编译过程并把你的源代码转换成你可以在nRF51822上运行的有意义的东西。安装GNU Coreutils for Windows之后,下载并安装Make for Windows。

你可以通过切换到命令行并输入以下命令来测试make是否安装成功,这应该会得到一个版本号作为响应:

make --version

一旦这两个工具都安装好了,你应该拥有了在开发PC上交叉编译ARM代码所需的全部东西。现在,你可以开始使用nRF51822代码库和一个示例项目了。

四、nRF51822 GNU代码库和样例项目

在前一节中配置的ARM工具链可以让您为几乎任何使用ARM处理器的嵌入式设备构建二进制文件。但为了帮助您了解现实世界中与低级嵌入式开发相关的内容,以下简单项目是围绕Nordic的nRF58122-EK设计的,使用GCC和开源工具。虽然相同的原则和设计过程适用于任何其他嵌入式处理器,但您需要从芯片供应商或在线寻找启动代码和工具,以便与不同的微控制器或SoC一起使用。

代码库并不详尽,但它应该作为您自己项目的不错起点。它允许您在各种平台(Windows、OS X或Linux)上编译固件,并提供了一个基本的项目结构,应该易于理解和维护。

nRF51822 GNU代码库以及本书中的所有其他示例代码都托管在GitHub存储库中。值得看一下这个存储库,以获取最新的代码和在本书出版后可能添加的任何有关使用代码库的额外建议。

详细介绍Nordic的API和BLE协议栈超出了本章的范围,这值得单独编写一本书,但我们尽力保持示例代码尽可能简洁、清晰、精确和易于理解。下面的章节介绍如何设置您的PC,以及您需要开始使用此代码库的所有工具,并偏向使用易于安装的工具来构建一个简单的心率监测项目。

4.1、获取nRF51822 GNU代码库

nRF51822 GNU代码库可以在本书的GitHub仓库中找到,包括本书的所有示例代码。如果您使用的是Linux或OS X,您可能已经在命令行上拥有Git。要创建该代码库的本地副本,以便在代码库的更改时进行更新,只需执行以下命令:

git clone git@github.com:microbuilder/IntroToBLE.git

要获取代码的最新版本,请转到项目的根文件夹并输入以下命令:

git pull

如果您使用Windows,可以从预编译的二进制文件(例如msysgit)安装Git并运行上述命令。

如果您不喜欢使用Git或完全避免使用版本控制,也可以简单地在GitHub仓库中下载最新代码的压缩文件,然后点击“下载ZIP”。

4.2、nR51822 GNU代码库结构

一旦您拥有了nRF51822代码库的本地副本,您应该得到一个类似于下图的文件结构。
在这里插入图片描述

projects文件夹中包含示例项目。对于您基于此代码库创建的任何新项目,请在此处添加一个具有描述您项目的有意义名称的新文件夹。

为了帮助您入门,我们在hrm文件夹中包含了一个示例心率监测器项目。该项目实现了蓝牙SIG定义的标准心率服务。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值