在IAR下移植CC2650 contiki工程
与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
最新文章
- hdu 5017 模拟退火
- BZOJ3589 : 动态树
- ssh: Could not resolve hostname gitcafe.com: nodename nor servname provided, or not known
- http://www.swoole.com/
- HDU 3756 Dome of Circus
- Windows API 之 GetStartupInfo 、CreateProcess
- phpcms通过URL传参
- MySQL 如何使用索引 较为详细的分析和例子
- Jenkins结合.net平台综合之完整示例项目
- 二、Windows 下 ShellCode 编写初步
- centos7 rocketmq 4.2.0
- 『转』android官网翻译好的蓝牙API接口说明
- Pycharm的常用快捷将
- maven官方教程
- my normal Header
- 通过切换iframe来定位元素(用于Python+selenium自动化测试)
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
- UOJ#172. 【WC2016】论战捆竹竿
- C# 解决窗体闪烁
- MiniHttpServer