与Instant Contiki相比,在Windows的IAR下开发可以在线仿真,下载也更方便,因此我想把BLEach的工程移植到IAR下。弄了好几天总算编译并且下载成功了,参考了[这篇TI的wiki][1],过程中的error和warning都是查google一个个改的,过程记录难免会有一些疏忽,欢迎讨论和指正。

软硬件环境:

  • 系统: Win10
  • IDE: IAR for ARM 7.4
  • driverlib 版本:cc26xxware_2_24_02_17393(包含在tirtos_cc13xx_cc26xx_2_20_01_08中)
  • Contiki: 3.0.5 包含BLEach https://github.com/spoerk/contiki

1.创建新工程Project->Creat New Project, Tool chain 选ARM, 建一个新工程:

然后选择工程目录并起名字,我的工程叫cc26xx-BLE-server-demo。

2. 右击工程名 Add->Add Group(可以看作创建文件夹),根据本工程的实际情况创建如下Group:

3. 添加源文件(仅添加本工程编译和链接过程中必须的文件)

application:

core:

core下的net目录:

cpu:

platform

4. 设置设备:

5. 设置编译器的include目录:

这步需要根据编译时产生的"file xxx not found"错误来添加,下面是本工程的include内容:

$PROJ_DIR$\contiki\core
$PROJ_DIR$\contiki\core\sys
$PROJ_DIR$\contiki\core\lib
$PROJ_DIR$\contiki\core\net
$PROJ_DIR$\contiki\examples\cc26xx\cc26xx-ble-server-demo
$PROJ_DIR$\contiki\platform\srf06-cc26xx
$PROJ_DIR$\contiki\platform\srf06-cc26xx\srf06\cc26xx
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx\lib\cc26xxware\driverlib
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx\lib\cc26xxware
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx
$PROJ_DIR$\contiki\platform
$PROJ_DIR$\contiki\core\dev
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx\dev
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx\lib\cc26xxware\inc
$PROJ_DIR$\contiki
$PROJ_DIR$\contiki\cpu\cc26xx-cc13xx\rf-core\api

这里建议都用$PROJ_DIR$写成相对路径的形式,方便我们更改工程路径。

6. 设置链接器

这里需要填写TI的开发库cc26xxware driverlib的路径,我的是:..\contiki\cpu\cc26xx-cc13xx\lib\cc26xxware\driverlib\bin\iar\driverlib.lib

此处一定注意driverlib的版本,我使用旧版本出现了no definition for _iar_program_start的error。

本文中的driverlib是从tirtos_cc13xx_cc26xx_2_20_01_08提取出来的,该软件包可以从TI官网下载,其默认安装目录为C:\ti\tirtos_cc13xx_cc26xx_2_20_01_08\products\cc26xxware_2_24_02_17393

如果是其他工程,需要根据链接产生的错误从第3步逐步添加所需要的文件,如果不好定位链接器error中找不到的函数名,可以用source insight新建一个工程来定位函数具体在哪个文件中。

7. 设置宏

在IAR中我们并不使用Makefile,因此需要将一些宏定义显示写在如下窗口:

具体需要根据各级Makefile,..\contiki\platform\srf06-cc26xx\contiki-conf.h和..\contiki\examples\cc26xx\cc26xx-ble-server-demo\project-conf.h设置,本工程中的宏如下:

CONTIKI_WITH_RPL=0
CONTIKI_WITH_IPV6=1
AUTOSTART_ENABLE
MODE_IEEE802_15_4=1
MODE_BLE=2
MODE=MODE_BLE
BUTTON_SENSOR_CONF_ENABLE_SHUTDOWN=0
BOARD_CONF_DEBUGGER_DEVPACK=1
PACKETBUF_CONF_SIZE=1280
QUEUEBUF_CONF_NUM=1
UIP_CONF_BUFFER_SIZE=1280
CC26XX_CONF_RADIO_MODE=CC26XX_RADIO_MODE_BLE
NETSTACK_CONF_RADIO=ble_cc2650_driver
NETSTACK_CONF_RDC=ble_null_par_driver
NETSTACK_CONF_MAC=ble_l2cap_driver
RTIMER_CONF_MULTIPLE_ACCESS=1
BLE_MODE_CONF_INIT_PEER_ADDR=0x000000000000
SICSLOWPAN_CONF_MAC_MAX_PAYLOAD=1280
SICSLOWPAN_CONF_COMPRESSION=SICSLOWPAN_COMPRESSION_HC06
SICSLOWPAN_CONF_COMPRESSION_THRESHOLD=0
SICSLOWPAN_CONF_FRAG=0
SICSLOWPAN_FRAMER_HDRLEN=0
UIP_CONF_ROUTER=1
UIP_CONF_ND6_SEND_NA=1
UIP_CONF_ND6_SEND_RA=1
UIP_CONF_IP_FORWARD=0

一定注意不要有空格,否则会出现编译错误。

至此,编译器和链接器已经设置好了。

本工程源代码因为是Linux下的gcc编译的,在IAR中编译难免会有一些ERROR和WARNING,我记录了其中几个:

Error[Pe018]: expected a ")" D:\
xxx\contiki\cpu\cc26xx-cc13xx\rf-core\ble-hal\ble-hal-cc26xx.c 720

这是因为IAR编译器不支持0b开头的二进制,我们把这些变量改为0x的16进制就可以了。

Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once)

这是因为linux和windows的换行符编码不一样,可以如下设置以不显示这个警告,

Error[Pe852]: expression must be a pointer to a complete object type

这是因为源码中对(void*)类型的指针进行了加减运算,比如ble-hal-cc26xx.c的line 1180, 通过查找这个变量的类型,我们将其改成

      memcpy(((uint8_t *)packetbuf_dataptr() + packetbuf_datalen()), &rx_data[header_offset], len);

8. 设置Debugger并下载

设置XDS,我使用的是XDS100V3,

Debugger

9. 下载可能会遇到如下错误

Wed Feb 07, 2018 22:31:07: Fatal error: Failed to connect to the XDS emulator (connect ICEPick)... (Error -241 @ 0x0) A router subpath could not be accessed. A security error has probably occurred. (Emulation package 5.1.641.0)

这是因为Flash Programmer2给程序上锁,我们需要用它擦除CC2650的FLASH,然后就可以下载和在线调试了。

更多内容请关注本博客后续文章。

[1] http://processors.wiki.ti.com/index.php/Contiki-IAR

在IAR下移植CC2650 contiki工程的更多相关文章

  1. STM32F407VET6之IAR之ewarm7.80.4工程建立(基于官方固件库1.6版本)

    今天把stm32F407的工程之IAR建立完成了,特此记录下. 下载官方固件库,STM32F4xx_DSP_StdPeriph_Lib_V1.6.1,V1.8.0版本的同理.新建以下几个文件 src放 ...

  2. 痞子衡嵌入式:JLink Script文件基础及其在IAR下调用方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink Script文件基础及其在IAR下调用方法. JLink可以说是MCU开发者最熟悉的调试工具了,相比于其他调试器(比如DAP ...

  3. 痞子衡嵌入式:浅析IAR下调试信息输出机制之硬件UART外设

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设. 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地 ...

  4. 痞子衡嵌入式:浅析IAR下调试信息输出机制之半主机(Semihosting)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我 ...

  5. [OpenCV][ARM9下移植OpenCV]

    [OpenCV][ARM9下移植OpenCV]   安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3. ...

  6. tomcat下部署两个工程时,只有一个可以访问,另一个出现404错误,该如何解决

    tomcat下部署两个工程时,只有一个可以访问,另一个出现404错误,该如何解决 在开发新项目的时候,有时候为了省时,直接把曾经做过的项目工程A拷贝成改名为B工程,然后再在B工程上进行功能的开发, 此 ...

  7. zju(11)在IAR中移植ucos到msp430

    准备材料 1.在TI官网上下载430的固件库,我用的是msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib 地址http://www.ti.com/tool/msp-exp430 ...

  8. 在IAR平台建立STC8ASK64S4A12单片机工程

    转载:http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=168481&page=1#pid737250  一般我们使用STC单 ...

  9. 解决将龙邱oled库移植到野火工程里,oled汉字无法显示问题

    第一,检查oled是否和单片机控制引脚正确相连. GND VCC CLK:时钟信号 miso RST: DC:DATE COMMAND/CONTROL CS:CHIP SELECT 第二,检查工程里是 ...

随机推荐

  1. Gym 101667I Slot Machines

    原题传送门 题意:给定n(n≤106)个数,要求将它化为混偱环小数的形式,即前k个数不参与循环,之后所有数以p为循环节长度进行循环.求k和p,要求k+p尽量小,k+p相等时要求p尽量小. 样例1 输入 ...

  2. 【WC2013】糖果公园

    Candyland 有一座糖果公园,公园里不仅有美丽的风景.好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园玩. 糖果公园的结构十分奇特,它由 nn 个游览点构成,每个游览 ...

  3. c++(hash表)

    hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash ...

  4. 小白的Python之路 day5 模块XML特点和用法

    模块XML的特点和用法 一.简介 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今 ...

  5. js object 常用方法总结

    Object.assign(target,source1,source2,...) 该方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身 ...

  6. linux中的两个命令setfacl和chmod有什么区别

    setfacl命令可以用来细分linux下的文件权限.chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 比较常用的用法如下:setfacl ...

  7. mysql中OPTIMIZE TABLE的作用

    转载▼ 1.先来看看多次删除插入操作后的表索引情况 mysql> SHOW INDEX FROM `tbl_name`; +----------+------------+----------- ...

  8. ThinkPHP模板IF标签用法详解

    投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-07-01 我要评论 这篇文章主要介绍了ThinkPHP模板IF标签用法,需要的朋友可以参考下 ThinkPHP的IF标 ...

  9. phpstudy 虚拟主机域名配置注意问题

    第一步:hosts文件中添加对应:127.0.0.1+空格+你的域名 第二部:在D:\phpStudy \Apache\conf\vhosts.conf中禁用470行 第三部:配置域名和引入程序地址

  10. ico图标在谷歌浏览器中如何显示?

    http://www.zen-cart.cn/forum/topic266117.html 版主: shaning 发表回复 2 篇帖子 • 分页: 1 / 1  ico图标在谷歌浏览器中如何显示? ...