# 使用 IAR 开发 # ## 安装 IAR ## IAR 工具链包含的许多功能不在本文档的讨论范围之内,更多信息和文档可以在[ IAR.com ](www.iar.com)找到。 查看 BLE5-Stack 1.00.00 的发行说明,弄清楚需要使用的 IAR 版本和一些要求的工作环境。与 CCS 生成的目标代码相比,IAR 生成的目标代码的大小和性能可能不同。 关于如何下载安装 IAR 、搭建开发环境在[ CC2640R2 BLE5.0 开发环境搭建](http://docs.leconiot.com/doku.php?id=cc2640r2f:get_started:development_environment_set_up:development_environment_set_up)中有详细描述,这里不再赘述。 建议在编译过程中显示所有编译输出消息以便获得完整的详细信息。在 IAR 的** Tools -> Options **中将** Show Build Messages **设置为** All **来设置此功能。(请参见图1) 图1.在 IAR 中显示所有编译消息 ![](http://www.leconiot.com/md_res/cc2640r2f/cc2640r2f_architecture/iar/images/image15.png) ## 打开 IAR 项目 ## >**注意**:TI-RTOS 驱动程序和内核示例文件是导入到 IAR 中的,而不是作为预配置的 IAR 工作区文件提供的。有关如何创建这些项目的说明,请参见:[ Creating TI-RTOS (driver/kernel) Applications in IAR Embedded Workbench ](http://processors.wiki.ti.com/index.php/Creating_TI-RTOS_Applications_in_IAR_Embedded_Workbench) 本节以 `simple_peripheral` 工程为例介绍如何打开和编译现有项目。开发套件中包含的所有 BLE5-Stack 例程项目都具有相似的结构。 1. 首先打开 IAR 。 2. 打开一个 IAR 工作区工程:** File -> Open -> Workspace... ** * 对于 `simple_peripheral` 示例,请选择 `\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral \tirtos\iar\ble5_simple_peripheral.eww`(是低功耗蓝牙 SDK 的存放路径) 图2. IAR 工作区窗格 ![](http://www.leconiot.com/md_res/cc2640r2f/cc2640r2f_architecture/iar/images/iar_workspace_pane.png) 该工作区的文件用的是 `simple_peripheral` 工程。在选择后,与工作区相关联的文件在屏幕左侧的“工作区”窗格中可见。参见图 2 。 通过单击工作区窗格底部相应的工程选项卡来激活任一工程。图 2 中如果选择了 Overview 选项卡,此选项卡会同时显示两个工程的文件结构。在这种情况下,请使用工作区窗格顶部的下拉菜单来选择激活相应的工程。这里的每个工程都会生成一个单独的可下载对象。`simple_peripheral` 项目实现了一个基本的低功耗蓝牙外围设备,包括有 GATT 服务的 GATT 服务器。该项目可用作开发外围相关应用程序的框架。 ## BLE5-Stack IAR 工程编译配置 ## 该工程以及所有的 BLE5-Stack 工程在工作区都包含了不同的工程以及编译配置,如表 1 所示。`*_StackLibrary` 编译配置会将协议栈编译为库的形式供应用程序调用,如[软件架构](http://docs.leconiot.com/doku.php?id=cc2640r2f:cc2640r2f_architecture:software_and_hardware:software:software_architecture)中的**协议栈编译成库文件配置**所述。由于协议栈工程与应用程序工程是分开的,为了使这两个工程编译后能够在一起正常的工作,连个工程的编译配置需要对应好,具体的编译配置对应关系如表1所示。 表1.可用的 IAR 编译配置 |工程类型|工程的编译配置|兼容的对应工程的编译配置| |:-----|:-----|:-----| |Application|FlashROM|Stack-FlashROM| |Application|FlashROM_StackLibrary|Stack-FlashROM_StackLibrary| |Application|FlashROM_StackLibrary_RCOSC|Stack-FlashROM_StackLibrary| |Application|FlashROM_OAD_ImgB|Stack-FlashROM| |Application|FlashROM_OAD_Offchip|Stack-FlashROM| |Stack|FlashROM_Library|Application-FlashROM_Library| |Stack|FlashROM|Application_FlashROM| ## 编译和下载 ## 对于所有编译的配置,协议栈工程必须要在应用程序工程之前进行配置编译。 对于将协议栈编译成库的形式: 1. 编译协议栈库工程。 * 选中协议栈工程,在工作区顶部的下拉菜单中选择 FlashROM_Library * 选择** Project -> Make **编译协议栈。 2. 编译应用程序工程。 * 选中应用程序工程。 * 选择** Project -> Mak e**编译应用程序。 3. 下载整个应用程序 * 下载并调试:选择** Project -> Download and Debug ** * 只下载,无需调试:选择** Project -> Download -> Download Active Application ** >**注意**:以库形式使用协议栈的应用程序工程没有严格的镜像边界了。初始化编译之后,如果协议栈工程未被修改,只需要重新编译下载应用程序工程即可。 对于协议栈和应用程序是镜像分离(而不是库)的工程: 1. 编译协议栈工程。 * 选中协议栈工程,在工作区顶部的下拉菜单中选择 FlashROM * 选择** Project -> Make **来编译协议栈。 2. 编译应用程序工程。 * 选中应用程序工程。 * 选择** Project -> Make **编译应用程序。 3. 下载协议栈工程。 * 选择** Project -> Download -> Download Active Application **来下载协议栈工程。 4. 下载应用程序工程。 * 下载并调试:选择** Project -> Download and Debug ** * 只下载,无需调试:选择** Project -> Download -> Download Active Application ** >**注意**:协议栈工程定义了在应用程序工程中使用的 Flash 和 RAM 的边界参数。对协议栈项目的任何修改都需要重新编译下载协议栈工程,然后再重新编译下载应用程序工程以便使用新的边界设置。请参阅** Frontier Tool Operation **。 >初始编译后,如果协议栈工程未被修改,则只需要重新编译下载应用程序工程。 >当应用程序下载(即 Flash 编程)之后,您可以选择** Project -> Debug without Downloading **在不重新刷新设备的情况下进行调试。 >**警告**:不要在工程设置中修改 CPU 变量,所有示例项目都配置了 CPU 类型,更改此配置(在这里就是 CC2640R2F )可能会导致编译错误。 要实现空中下载( OAD )固件更新功能的示例应用程序需要编译** Boot Image Manager ** ( BIM )项目。有关更多的详细信息,请参阅[ OAD ](http://docs.leconiot.com/doku.php?id=cc2640r2f:oad:oad_concept:oad_concept)部分。 ## 访问预处理器符号 ## 对于不同的工程级别各种 C 预处理器符号可能需要设置或调整。以下过程描述了如何访问或修改预处理器符号。 1. 打开** Project -> Options **选择** C/C++ Compiler **。 2. 打开** Preprocessor **选项卡。 3. 查看** Defined symbols **框(见图 3 )。 4. 可在这里添加或编辑预处理符号。 图3. IAR 定义的符号框 ![](http://www.leconiot.com/md_res/cc2640r2f/cc2640r2f_architecture/iar/images/image38.jpeg) ## 访问链接器符号 ## 链接器符号可能需要在项目级别进行设置或调整,以便控制生成的镜像的内存布局。以下过程描述了如何访问和修改链接器符号。 1. 打开** Project -> Options **并选择** Linker **类别。 2. 打开** Config **选项卡。 3. 查看** Configuration File symbol definitions **框(参见图 4 )。 4. 可在这里添加或编辑预处理符号。 图4. IAR 定义的符号框 ![](http://www.leconiot.com/md_res/cc2640r2f/cc2640r2f_architecture/iar/images/iar_linker_opts.png) ## 在 IAR 中复位 CC2640R2F ## Debug界面下,从** Reset (back arrow) Debug **下拉框中选择** Board Reset **选项,进行复位。 图5. IAR 板复位 ![](http://www.leconiot.com/md_res/cc2640r2f/cc2640r2f_architecture/iar/images/image182.png) ## 加入我们 ## 文章所有代码、工具、文档开源。加入我们[**QQ群 591679055**](http://shang.qq.com/wpa/qunwpa?idkey=d94f12d37c3b37892af4b757c6dc34bea140f3f3128a8d68e556a3d728148e85)获取更多支持,共同研究CC2640R2F&BLE5.0。

CC2640R2F&BLE5.0-乐控畅联 © Copyright 2017, 成都乐控畅联科技有限公司.