![面向物联网的CC2530与传感器应用开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/726/25462726/b_25462726.jpg)
任务3 项目开发基本调试
本任务重点学习IAR for 8051的开发环境和在线调试,掌握CC2530开发环境的搭建和调试。
3.1 开发场景:如何进行项目开发
要驱动微处理器和相关接口硬件,需要相关的软件,并将软件编译后烧录到微处理器中,微处理器程序的编辑与烧录需要在集成开发环境(IDE)中进行。
CC2530微处理器使用的开发环境是IAR for 8051,可以在这个开发环境下创建CC2530微处理器工程,使用下载器将程序下载到微处理器中,使用IAR for 8051的程序调试工具实现CC2530微处理器程序的在线调试,通过在线调试得到逻辑功能正确的代码后就可以将代码编译为二进制文件并固化到微处理器中运行了。图3.1所示为开发平台调试工具,为无线节点提供调试接口,方便进行程序开发和在线调试。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0053_0001.jpg?sign=1738929618-e1gptZDaKUp09yDdoq1WTIgXTgXOsTAi-0-5625a5bf5e5cd028ec784e132502120d)
图3.1 开发平台调试工具
3.2 开发目标
(1)知识要点:IAR for 8051开发环境的工程创建;IAR for 8051开发环境的程序在线调试。
(2)技能要点:掌握CC2530微处理器工程的创建;掌握CC2530微处理器代码的在线调试;掌握IAR for 8051开发环境中的开发工具。
(3)任务目标:会使用IAR for 8051开发环境对CC2530微处理器工程进行在线调试;会使用IAR for 8051开发环境查看CC2530微处理器中每个寄存器的参数。
3.3 原理学习:软件开发环境
3.3.1 IAR for 8051开发环境
1.主窗口界面
IAR主窗口界面如图3.2所示,具体介绍如下。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0054_0001.jpg?sign=1738929618-jpSPxGG4NVE0V0NPF7IbjmoA3uomynn9-0-482ed7a95d1a867f361238bfc1e59205)
图3.2 IAR主窗口界面
(1)Menu Bar(菜单栏):包含IAR的所有操作及内容,在编辑模式和调试模式下存在一些不同。
(2)Tool Bar(工具栏):包含一些常见的快捷按钮。
(3)Workspace Window(工作空间窗口):一个工作空间可以包含多个工程,该窗口主要显示工作空间中工程项目的内容。
(4)Edit Window(编辑窗口):代码编辑区域。
(5)Message Window(信息窗口):包括编译信息、调试信息、查找信息等内容。
(6)Status Bar(状态栏):包含错误警告、光标行列等一些状态信息。
2.工具栏
工具栏上是主菜单部分功能的快捷图标按钮,这些快捷按钮之所以放置在工具栏上,是因为它们的使用频率较高。例如,编译按钮,这个按钮在编程的时候使用的频率相当高,这些按钮大部分也有对应的快捷键。
IAR的工具栏共有两个:主工具栏和调试工具栏。编辑(默认)状态下只显示主工具栏,进入调试模式后会显示调试工具栏。
主工具栏可以通过菜单打开,即“View→Toolbars→Main”,如图3.3所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0055_0001.jpg?sign=1738929618-B1B6W8BCI0jIkHTD6C8QSlfhi48E95aG-0-f11a76b83feccee40dd4ae9ba967f8a4)
图3.3 通过菜单打开工具栏
(1)主工具栏。在编辑状态下,只显示主工具栏,里面内容也是编辑状态下常用的快捷按钮,如图3.4所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0055_0002.jpg?sign=1738929618-59KqxiJICjlITc09sdzkVEHs2yCzPUrn-0-724773e6531eb1f44b7f9b3633b4ccab)
图3.4 IAR的主工具栏
● New Document:新建文件,快捷键为Ctrl+N。
● Open:打开文件,快捷键为Ctrl+O。
● Save:保存文件,快捷键为Ctrl+S。
● Save All:保存所有文件。
● Print:打印文件,快捷键为Ctrl+P。
● Cut:剪切,快捷键为Ctrl+X。
● Copy:复制,快捷键为Ctrl+C。
● Paste:粘贴,快捷键为Ctrl+V。
● Undo:撤销编辑,快捷键为Ctrl+Z。
● Redo:恢复编辑,快捷键为Ctrl+Y。
● Quick Search Text Box:快速搜索文本框。
● Find Previous:向前查找,快捷键为Shift+F3。
● Find Next:向后查找,快捷键为F3。
● Find:查找(增强),快捷键为Ctrl+F。
● Replace:替换,快捷键为Ctrl+H。
● Go To:前往行列,快捷键为Ctrl+G。
● Toggle Bookmark:标记/取消书签,快捷键为Ctrl+F2。
● Previous Bookmark:跳转到上一个书签,快捷键为Shift+F2。
● Next Bookmark:跳转到下一个书签,快捷键为F2。
● Navigate Backward:跳转到上一步,快捷键为Alt+左箭头。
● Navigate Forward:跳转到下一步,快捷键为Alt+右箭头。
● Compile:编译当前(文件、组),快捷键为Ctrl+F7。
● Make:编译工程(构建),快捷键为F7。
● Stop Build:停止编译,快捷键为Ctrl+Break。
● Toggle Breakpoint:编辑/取消断点,快捷键为Ctrl+F9。
● Download and Debug:下载并调试,快捷键为Ctrl+D。
● Debug without Downloading:调试(不下载)。
(2)调试工具栏。调试工具栏是在程序调试状态下才显示的快捷按钮,在编辑状态下,这些按钮是不显示的,如图3.5所示,各个图标说明依次如下。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0056_0001.jpg?sign=1738929618-rV4AU9BSO2P49iW9S9bwpyn3Vgy9apIP-0-ec146d182a496c3a5754b55e83fff401)
图3.5 调试工具栏
● Reset:复位。
● Break:停止运行。
● Step Over:逐行运行,快捷键为F10。
● Step Into:跳入运行,快捷键为F11。
● Step Out:跳出运行,快捷键为F11。
● Next Statement:运行到下一语句。
● Run to Cursor:运行到光标行。
● Go:全速运行,快捷键为F5。
● Stop Debugging:停止调试,快捷键为Ctrl+Shift+D。
逐行运行也称为逐步运行,跳入运行也称为单步运行,运行到下一语句和逐行运行类似。
3.3.2 IAR for 8051程序调试
1.IAR for CC2530工程创建
CC2530工程创建可分为三个步骤,分别是创建工程、添加源代码、项目工程配置,每个步骤又可分为几个小步骤。下面介绍CC2530工程创建流程。
1)创建工程
创建工程步骤可分为两个小步骤,分别是新建Workspace和创建New Project。Workspace是整个CC2530工程的总框架,CC2530的代码都是在Workspace下开发的。Project是Workspace下的子项目,Project可以是一个或多个,通过工程配置可实现一个工程下的多个微处理器程序开发。
(1)新建工作空间。打开IAR开发环境,在菜单栏中单击“File→New→Workspace”可完成新工程的创建,如图3.6所示。当Workspace创建完成后IAR将会产生一个空窗口,如图3.7所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0057_0001.jpg?sign=1738929618-EnwaIpgMPTNpROTC9w0PmEhAzuh1J4yN-0-88ff4c6e725d7fb11f56d14384d7941c)
图3.6 创建新的工作空间
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0057_0002.jpg?sign=1738929618-Af32zW2wPPi88aPaERYBI6eK1FmuhNdl-0-687600f1312f6904cf29c99f8b90fe6d)
图3.7 IAR产生的空窗口
(2)创建新项目。在创建的Workspace下单击“Project→Create New Project”,然后在“Tool chain”中选择“8051”内核微处理器,最后单击“OK”按钮即可创建一个新项目,设置文件名称后保存文件,如图3.8所示。当新项目建立完成后,IAR将会在File中产生的文件目录,如图3.9所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0058_0001.jpg?sign=1738929618-xikhZuHhbIiMEXHVeHPEyG7gqdzRKhrK-0-a53d27af775462fa9b0d25b57d11b110)
图3.8 创建一个新项目
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0058_0002.jpg?sign=1738929618-eCG2EqiA9Z4nzqO7nH42he1bNEcBYjRX-0-91440758b4e7d00e8f9cd4c8968bf954)
图3.9 在File中产生的文件目录
2)添加源代码
添加源代码是指在空的项目中添加对微处理器进行操作的代码。通常,开发微处理器的程序时使用的是C语言,因此添加代码文件时实际添加的是C文件。IAR添加代码实际上可分为三个步骤,分别是创建C文件、加入C文件到工程、将代码段加入C文件中,实际步骤如下。
(1)创建C文件。单击左上角的“New document”,代码框中会显示出一个空白的临时文件,如图3.10所示,单击空白的临时空间后单击“File→Save As”将文件保存到与之前保存工作空间(Workspace)的相同文件夹中,如图3.11所示,保存完成后临时文件将其更名为保存文件名。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0059_0001.jpg?sign=1738929618-rekxl0Q4279quecGWPURORMcKEGq4zjq-0-b9d588058fc38a275f77333b4d22a8ea)
图3.10 创建空白文件
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0059_0002.jpg?sign=1738929618-8Url0sGnaUho4MzZaAWczSzJaj2VKkVx-0-01ae7baf90617f38a9c244ebbb714164)
图3.11 创建完成后的空白文件
(2)加入C文件到工程。选择菜单“Project→Add→Add Files…”,找到创建好的C文件,单击该文件可将其加入工程中,如图3.12所示。当C文件添加完成后,Files框中就会显示加入工程中的C文件名称,单击C文件可以将其打开并加入工程的文件中,如图3.13所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0059_0003.jpg?sign=1738929618-hbGwYxEsSYn6P57lelMSrSbL5wlgZE3T-0-e45dbe70f86500f044bf2392ab8cf1c7)
图3.12 将C文件加入工程
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0060_0001.jpg?sign=1738929618-Pw5Wq8wk1ganJ255UlzqLQNB6oiDE5nC-0-f9053705067bda107d22d0126cdb22ee)
图3.13 打开C文件并将其加入工程的文件中
(3)将代码段加入C文件中。在C文件中加入关联文件和可执行的代码段并保存,即可完成源代码的建立,如图3.14所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0060_0002.jpg?sign=1738929618-41g47m4LRnvpN4pqMnLUMrR9b6EvQw7w-0-4e02c3f6067c2784bb94dc05d819672a)
图3.14 将代码段加入C文件中
3)项目工程配置
将代码加入工程中后,工程的建立并没有结束,代码的执行与微处理器的类型和资源是息息相关的。通常,同一个工程在不同微处理器上运行会产生不同的效果,因此工程需要对程序运行的平台,如微处理器类型、内存、编译工具、镜像文件等进行配置。工程配置分为四个步骤:芯片选择、堆栈配置、HEX文件配置、调试工具配置。
(1)芯片选择。选择菜单“Project→option”可进入工程配置页面,芯片选择“CC2531F256”,如图3.15所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0061_0001.jpg?sign=1738929618-s5cRyWqbhgIjfDyvuQFynK4VsjVeZIkx-0-e74055cb2532df233d4f65645d4cfc96)
图3.15 选择芯片型号
(2)堆栈配置。在Option界面中选择“Stack/Heap”后将“XDATA”的“0xEFF”配置为“0x1FF”,如图3.16所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0061_0002.jpg?sign=1738929618-ktrW4Zjey9vkI8aMkFhWFR1DAR4la7Bu-0-b882baac0293b0e7cf69c96d71abaa16)
图3.16 修改堆栈地址
(3)HEX文件配置。在Linker选项下选择“Extra Options”,然后在此处添加生成HEX文件的指令,如图3.17所示,配置指令为:
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0062_0001.jpg?sign=1738929618-EoUBtuwOg9LYVsQt569aXzMydVpO3s1c-0-0d137e4bb227752161719d3ae9ec0efc)
图3.17 添加HEX文件生成指令
-Ointel-extended, (CODE)=.hex
(4)调试工具配置。选择菜单“Debugger→Setup→Driver”,配置“Texas Instruments”调试工具,如图3.18所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0062_0002.jpg?sign=1738929618-g32FYxHiOTzONBNzCx9LlhBaJs7yVvuw-0-1099be10e08fc13fc770b9990029891c)
图3.18 选择芯片调试工具
最后单击“OK”按钮保存设置CC2530工程配置。
2.CC2530工程下载及调试
完成工程配置后,就可以编译下载并调试程序了,下面介绍程序的下载、调试等功能。
(1)编译工程。单击“Project→Rebuild All”或者直接单击工具栏中的“make”按钮,编译成功后会在该工程的“Debug\Exe”目录下生成led.d51和led.hex文件。
(2)下载程序。正确连接SmartRF04EB仿真器到PC和ZXBee Lite节点(第一次使用仿真器需要安装驱动“C:\Program Files(x86)\Texas Instruments\SmartRF Tools\Drivers\Cebal”,打开ZXBee CC2530开发平台电源(上电),按下SmartRF04EB仿真器上的复位按键,单击“Project→Download and Debug”或者直接单击工具栏的下载按钮将程序下载到CC2530开发平台。程序下载成功后IAR自动进入调试界面,如图3.19所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0063_0002.jpg?sign=1738929618-yH9fQYLmS69aPKrGdpwvh1MpHqOCYQpt-0-99b1cbaaedb8dea8485c6672b2536d77)
图3.19 调试界面
(3)调试程序。进入到调试界面后,就可以对程序进行调试了,IAR的调试按钮包括如下几个选项:复位按钮Reset、停止按钮Break
、逐行运行Step Over
、跳入函数按钮Step Into
、跳出函数按钮Step Out
、下一条语句Next Statement
、运行到光标行Run to Cursor
、全速运行Go
和停止调试按钮Stop Debugging
。
(4)查看变量。在调试的过程中,可以通过Watch窗口观察程序中变量值的变化。在菜单栏中单击“View→Watch”即可打开该窗口,如图3.20所示。打开Watch窗口后,在IAR的右侧即可看到Watch窗口,如图3.21所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0063_0012.jpg?sign=1738929618-FVcEsgcOvSIqqZrBBSRxNby0WZo7c2zf-0-b01798f28ed67bcb8735e66192b88eef)
图3.20 打开Watch窗口的方法
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0064_0001.jpg?sign=1738929618-4rjefD8EcYlEKP1Mor8yLPYfvRSFMtGl-0-5d85f59cc34c9251b9c06f08e132143a)
图3.21 Watch窗口
Watch窗口变量调试方法:将需要调试的变量输入Watch窗口的“Expression”输入框中,然后按回车键,系统就会实时地将该变量的调试结果显示在Watch窗口中。在调试过程中,还可以借助调试按钮来观察变量值的变化情况,如图3.22和图3.23所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0064_0002.jpg?sign=1738929618-VAbZCNBpZsoGMwDXg5lVQ44KPXjPRYwD-0-b71c45d5f8c6c322b6b11004623a3347)
图3.22 Watch窗口变量调试(1)
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0064_0003.jpg?sign=1738929618-vOXS4Ac8T3HnKLlonqusRuDpezMrxQ3C-0-59e39f7652c8632a1a0b2b9bbc802876)
图3.23 Watch窗口变量调试(2)
(5)查看寄存器。在嵌入式系统的程序开发中,很重要的调试功能就是查看寄存器的值,IAR支持在调试的过程中查看寄存器的值。在程序调试过程中,单击菜单“View→Register”即可打开寄存器窗口。默认情况下,寄存器窗口显示的是基础寄存器的值,单击寄存器下拉框选项可以看到不同设备的寄存器,如图3.24所示。
![](https://epubservercos.yuewen.com/8ED533/13916129903795406/epubprivate/OEBPS/Images/figure_0064_0004.jpg?sign=1738929618-8BvaxIWD0o8nAc8VGyoyCP5uJU5IupGW-0-1ae850da0224a7b124f599c85e04d6ea)
图3.24 寄存器窗口界面
3.4 任务实践:实现一个工程项目
3.4.1 开发设计
在开发过程中,需要使用IAR for 8051开发环境对CC2530微处理器的程序进行创建、编辑和调试,CC2530微处理器工程创建分为三部分:创建工程、添加源代码、工程配置。
CC2530微处理器工程完成后需要使用IAR for 8501开发环境的代码在线调试功能,在线调试功能又可分为三个方面,分别为:代码单步调试、查看代码变量参数、查看微处理器寄存器状态。
3.4.2 功能实现
本任务的驱动源代码如下。
#define D7 P1_0 //定义D7为P1_0口控制 #define D6 P1_1 //定义D6为P1_1口控制 void led_init(void); void led_test(void); void halWait(unsigned char wait); /**************************************************************************************** * 名称:main() * 功能:主函数 ****************************************************************************************/ void main(void) { led_init(); while(1) { led_test(); } } /**************************************************************************************** * 名称:void led_init(void) * 功能:LED初始化 ****************************************************************************************/ void led_init(void) { P1SEL&=~0x03; //P1.0和P1.1为普通I/O口 P1DIR|=0x03; //输出 D7=1; //关LED D6 = 1; } /**************************************************************************************** * 名称:void led_test(void) * 功能:LED闪烁函数 ****************************************************************************************/ void led_test(void) { D7=0; //D7闪烁 halWait(250); D7 = 1; halWait(250); D6=0; //D6闪烁 halWait(250); D6 = 1; halWait(250); } /**************************************************************************************** * 名称:void halWait(unsigned char wait) * 功能:延时函数 ****************************************************************************************/ void halWait(unsigned char wait) { unsigned long largeWait; if(wait == 0) {return; } largeWait = ((unsigned short) (wait << 7)); largeWait += 114*wait; largeWait = (largeWait >> ( CLKCONCMD & 0x07 )); while(largeWait--); return; }
3.5 任务验证
使用IAR开发环境打开任务设计工程,程序经过编译后,通过SmartRF下载器下载到CC2530微处理器中,执行程序后,开发平台上D1和D2两个LED不断地交替闪烁。
3.6 任务小结
通过本项目的学习和实践,可以掌握在IAR for 8051开发环境中创建CC2530微处理器代码工程,通过使用IAR for 8051开发环境可以对CC2530微处理器的代码进行在线调试,学会使用IAR for 8051开发环境的调试工具可以更为深入地了解CC2530微处理器代码的运行原理,以及CC2530微处理器程序在运行时内部寄存器的数值变化。
3.7 思考与拓展
(1)在IAR for 8051开发环境中建立CC2530微处理器工程需要配置哪些参数?
(2)IAR for 8051开发环境调试窗口的各个按键都是什么功能?
(3)如何将CC2530微处理器代码中的参数加载到Watch窗口中?
(4)如何打开IAR for 8051开发环境的寄存器查看窗口?