IAR 430大RAM系列单片机调试时找不到main函数
- 格式:pdf
- 大小:43.75 KB
- 文档页数:1
msp430 如何选择头文件?怎么添加?
使用iar,如果没有头文件,编译肯定通不过,更加不用说继续设计
了,本人使用IAR 进行msp430 开发,选择原因是因为ccs 所需内存太大
了,keil 已经无法满足MSP430 的某些功能了,对于IAR 集成开发环境,我
们从事一个项目开发,首先就是要添加头文件,头文件相信大家都不陌生,
使用C 语言开发的时候我们见到过无数的#include《》和#include 都可以添
加头文件,说明一下:放在自己工程目录下的头文件要用#include
msp430g2553.h ,系统目录下的头文件才用#include《iomsp430g2553.h》,当然你自定义的头文件可以在系统头文件库里面的。
再次使用时新版本的IAR5.31 时发现又不会添加头文件了,想想当时
用的时候也遇到过类似问题,最后也不知是如何解决的,在利用workspace
栏添加时,倒也能添加,只是不再main 分目录下,即便包含了xxx.h 文件,
编译时仍然会提示can no find xxx.h。
有关IAR 教程并总结出两种解决方法。
方法一:将头文件xxx.h 保存在当前工程目录下,通常和main.c 放在
同一个目录。
此时,无需在workspace 里面手工添加,只需要在main.c 或者
在对应的xxx.c 文件中#include xxx.h,编译成功完成后会自动出现在相应的.c。
使用IAR时遇到的一些Error、Waring/sendoc/blog作为菜虫,在使用IAR的时候编写CC2430、、Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新。
1Q:Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytesneeded. The problem occurred while processing the segment placement command"-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment ofplacement the available memory ranges were "XDATA:f1ff-fd53"Reserved ranges relevant to this placement:XDATA:f000-f1fe XSTACKXDATA:f1ff-fd53 XDATA_NBIT:0-7 BREGBIT:80-97 SFR_ANBIT:a8-af SFR_ANBIT:b8-c7 SFR_ANBIT:d8-df SFR_ANBIT:e8-ef SFR_ANA:其实这个问题并不是你的程序本身有问题,主要是因为你编写的程序太大了,超出了芯片本身的定义。
今天在群里学习了一招,就是将数组定义到code里,我们看一下例子。
我们定义一个5100个元素的数组,有以下两种方法:mermaid提出的方法是:typedef unsigned char const __code INT8U;extern INT8U shuzi[5100];文晶提出的方法是INT8U code shuzi[5100];这两种方法其实效果是一致的,定义完数组之后,调用的部分就是需要用指针来调用数组里面的数值了。
IAR编译错误清单Warning[Pe1665]: concatenation with "PDOR" in macro "PT" does not create a valid token E:\All learning files\IAR files\四轴\电调\VCANBLDC\Board\src\VCAN_NRF24L0.c 317警告:“PDDR”宏“PT”不创建有效的TOK级联未解1,错误:Error[Li005]: no definition for "__VECTOR_TABLE" [referenced from F:\k60 example\ E04 WOTCHDOG\Watdog\Debug\Obj\vectors.o]Error[Li005]: no definition for "__VECTOR_RAM" [referenced from F:\k60 example\E 04 WOTCHDOG\Watdog\Debug\Obj\vectors.o]Error[Li005]: no definition for "__BOOT_STACK_ADDRESS" [referenced from F:\k60 example\E04 WOTCHDOG\Watdog\Debug\Obj\vectors.o]错误原因(见下图):在linker里没有设置icf文件的路径。
说2,错误:Warning[Pe223]: function "LCD_Init" declared implicitly D:\All learning files\IA R files\exercise\Project\files\main.c 30files\exercise\Project\files\main.c 31Warning[Pe223]: function "LCD_P8x16Str" declared implicitly D:\All learning files\IAR files\exercise\Project\files\main.c 40Warning[Pe223]: function "LCD_P6x8Str" declared implicitly D:\All learning files\IAR f iles\exercise\Project\files\main.c 41Warning[Pe223]: function "LCD_CLS" declared implicitly D:\All learning files\IAR files\ exercise\Project\files\main.c 44Error[Pe020]: identifier "longqiu96x64" is undefined D:\All learning files\IAR files\exer cise\Project\files\main.c 45或者:Error[Pe101]: "uint8" has already been declared in the current scope (at line 72 of "D:\All learning files\IAR files\exercise\ D:\All learning files\IAR files\exercise\LI B\drivers\LQ12864\LQ12864.h 10Project\iar\..\..\LIB\cpu\arm_cm4.h")Error[Pe070]: incomplete type is not allowed D:\All learning files\IAR files\exercise\LI B\drivers\LQ12864\LQ12864.h 10Error[Pe065]: expected a ";" D:\All learning files\IAR files\exercise\LIB\drivers\LQ1286 4\LQ12864.h 10Error while running C/C++ Compilermain.cError[Pe101]: "uint8" has already been declared in the current scope (at line 72 of "D:\All learning files\IAR files\exercise\ D:\All learning files\IAR files\exercise\LIB\drive rs\LQ12864\LQ12864.h 10Project\iar\..\..\LIB\cpu\arm_cm4.h")Error[Pe070]: incomplete type is not allowed D:\All learning files\IAR files\exercise\LI B\drivers\LQ12864\LQ12864.h 10Error[Pe065]: expected a ";" D:\All learning files\IAR files\exercise\LIB\drivers\LQ1286 4\LQ12864.h 10Warning[Pe223]: function "LCD_Init" declared implicitly D:\All learning files\IAR files\e xercise\Project\files\main.c 30Warning[Pe223]: function "Draw_LibLogo" declared implicitly D:\All learning files\IAR files\exercise\Project\files\main.c 31files\exercise\Project\files\main.c 40Warning[Pe223]: function "LCD_P6x8Str" declared implicitly D:\All learning files\IAR f iles\exercise\Project\files\main.c 41Warning[Pe223]: function "LCD_CLS" declared implicitly D:\All learning files\IAR files\ exercise\Project\files\main.c 44Error[Pe020]: identifier "longqiu96x64" is undefined D:\All learning files\IAR files\exer cise\Project\files\main.c 45Error while running C/C++ Compiler注意:我这是把LQ12864.h中的void byte longqiu96x64[768];//void LCD_Init(void);//void LCD_CLS(void);//void LCD_P6x8Str(byte x,byte y,byte ch[]);//void LCD_P8x16Str(byte x,byte y,byte ch[]);//void LCD_P14x16Str(byte x,byte y,byte ch[]);void LCD_Print(byte x, byte y, byte ch[]);// void LCD_PutPixel(byte x,byte y);//void LCD_Rectangle(byte x1,byte y1,byte x2,byte y2,byte gif);//void Draw_LQLogo(void);//void Draw_LibLogo(void);看到没我都给注释了,然后出现这么多错误,最后又把本来是extern byte longqiu96x64[7 68];改成void byte longqiu96x64[768];于是出现了:Error[Pe101]: "uint8" has already been declared in the current scope (at line 72 of "D:\All learning files\IAR files\exercise\ D:\All learning files\IAR files\exercise\LIB\drive rs\LQ12864\LQ12864.h 10Project\iar\..\..\LIB\cpu\arm_cm4.h")Error[Pe070]: incomplete type is not allowed D:\All learning files\IAR files\exercise\LI B\drivers\LQ12864\LQ12864.h 10Error[Pe065]: expected a ";" D:\All learning files\IAR files\exercise\LIB\drivers\LQ1286 4\LQ12864.h 10Error while running C/C++ CompilerIAR 6.20编译错误清单1、①错误描述:Tool Internal Error:Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 007588A5 (reading from address 0x0)Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 007588A5 (reading from address 0x0)Error while running C/C++ Compiler②错误原因:High配置设置为Size,应该为Low2、①错误描述:Fatal Error[Pe1696]: cannot open source file "inc/hw_types.h" E:\StellarisWareM3_9D92\boards\dk-lm3s9b96\boot_demo2\boot_demo2.c 25②错误原因:C/C++ Complier(Assember)->Preprocessor->Additional include directories:$PROJ_DIR$\.$PROJ_DIR$\..$PROJ_DIR$\..\..\..3、①错误描述:Fatal Error[Pe1696]: cannot open source file "lwip/opt.h" E:\StellarisWareM3_9D92\utils\lwiplib.h 44②错误原因:C/C++ Complier-(Assember)>Preprocessor->Additional include directories:$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\apps$PROJ_DIR$\..\..\..\third_party\bget$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\ports\stellaris\include$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\src\include$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\src\include\ipv4$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\src\include\lwip$PROJ_DIR$\..\..\..\third_party4、①错误描述:Fatal Error[Pe035]: #error directive: Unrecognized COMPILER! E:\StellarisWareM3_9D92\boards\dk-lm3s9b96\drivers\set_pinout.h 59Error while running C/C++ Compiler②错误原因:C/C++ Complier-(Assember)>Preprocessor->Defined symbols: ewarm5、①错误描述:Error[Pe020]: identifier "ROM_pvAESTable" is undefined E:\StellarisWareM3_9D92\third_party\aes\aes.c 319②错误原因:6、①错误描述:Error[Li005]: no definition for "main" [referenced from cmain.o(rt7M_tl.a)]Error while running Linker②错误原因:定义函数:int main(void) { return (0); }7、①错误描述:Error[Li005]: no definition for "main" [referenced from cmain.o(rt7M_tl.a)]Error while running Linker②错误原因:如果是库是库函数,在:General Options->Output->Output file:选择:Library项4、①错误描述:Fatal Error[Pe1696]: cannot open source file "uip.h" E:\StellarisWareM3_9D92\third_party\uip-1.0\apps\dhcpc\dhcpc.c 37②错误原因:5、①错误描述:②错误原因:$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\apps$PROJ_DIR$\..\..\..\third_party\bget$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\ports\stellaris\include$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\src\include$PROJ_DIR$\..\..\..\third_party\lwip-1.3.2\src\include\ipv4$PROJ_DIR$\..\..\..\third_party$PROJ_DIR$\..\..\..\third_party\uip-1.0$PROJ_DIR$\..\..\..\third_party\uip-1.0\uip$PROJ_DIR$\..\..\..\third_party\uip-1.0\apps$PROJ_DIR$\..\..\..\third_party\\speex-1.2rc1\include$PROJ_DIR$\..\..\..\third_party\\speex-1.2rc1\include\speex$PROJ_DIR$\..\..\..\third_party\\speex-1.2rc1\stellaris6、①错误描述:Fatal Error[Pe035]: #error directive: You now need to define either FIXED_POINT or FLOATING_POINT E:\StellarisWareM3_9D92\third_party\speex-1.2rc1\libspeex\arch.h 65②错误原因:7、①错误描述:Fatal Error[Pe035]: #error directive: "Unrecognized/undefined driver for DISK0!" E:\StellarisWareM3_9D92\third_party\fatfs\port\dual-disk-driver.c 62Error while running C/C++ Compiler②错误原因:UART_BUFFEREDDISK0_DK_LM3S9B96DISK1_USB_MSCINCLUDE_BGET_STATS8、①错误描述:Error[Pe020]: identifier "ROM_pvAESTable" is undefined E:\SWM3_9D92(6.20)\third_party\aes\aes.c 359Error while running C/C++ Compiler②错误原因:10、①错误描述:Fatal Error[Pe035]: #error directive: You now need to define either FIXED_POINT or FLOATING_POINT E:\SWM3_9D92(6.20)\third_party\speex-1.2rc1\libspeex\arch.h 65Error while running C/C++ Compiler②错误原因:11、①错误描述:Error[Li005]: no definition for "ROM_SysCtlClockSet" [referenced from E:\SWM3_9D92(6.20)\boards\dk-lm3s9b96\safertos_demo\Debug\Obj\safertos_demo.o] Error[Li005]: no definition for "ROM_FlashUserGet" [referenced from E:\SWM3_9D92(6.20)\boards\dk-lm3s9b96\safertos_demo\Debug\Obj\lwip_task.o] Error[Li005]: no definition for "ROM_IntPrioritySet" [referenced from E:\SWM3_9D92(6.20)\boards\dk-lm3s9b96\safertos_demo\Debug\Obj\lwip_task.o] Error[Li005]: no definition for "ROM_GPIOPinTypeGPIOOutput" [referenced from E:\SWM3_9D92(6.20)\boards\dk-lm3s9b96\safertos_demo\Debug\Obj\led_task.o]Error[Li005]: no definition for "ROM_GPIOPinWrite" [referenced from E:\SWM3_9D92(6.20)\boards\dk-lm3s9b96\safertos_demo\Debug\Obj\led_task.o]Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x11e54 bytes in<[0x20000000-0x2000ffff]> (total uncommitted space 0x10000).Error while running Linker②错误原因:12、①错误描述:Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size of 0x11e54 bytes in <[0x20000000-0x2000ffff]> (total uncommitted space 0x10000).Error while running Linker。
2016新编MSP-FET430UIF仿真器使用说明MSP-FET430UIF仿真器使用说明1目录 1. 功能描述2. JTAG连接关系3. IAR开发环境的安装4. 仿真器驱动的安装5. 配置仿真器及仿真方法5.1 编译程序5.2 正确设置仿真器的参数5.3 如何用msp430仿真器调试程序5.4 第三方软件下载程序6. 注意事项7. 常见问题答解21. 功能描述a. 本仿真器为USB接口的JTAG仿真器。
USB口从计算机取电,不需要外接源,并能针对不同需求给目标板或用户板提供1.8V,3.6V(300mA)电源。
b. 对MSP430低功耗flash全系列单片机进行编程和在线仿真.c. 完全兼容TI德州仪器原厂MSP-FET430UIF开发工具。
d. 支持在线升级,烧熔丝加密。
e. 采用TI德州仪器标准的2×7 PIN(IDC-14)标准连接器。
f. 支持IAR430、 AQ430、 HI-TECH、 GCC 以及TI等一些第三方编译器集成开发环境下的实时仿真、调试、单步执行、断点设置、存储器内容查看修改等。
g. 支持程序烧写读取和熔丝烧断功能。
h. 支持JTAG、SBW(2 Wire JTAG)接口。
i. 支持固件升级功能。
2. JTAG连接关系仿真器与目标板上MSP430系列MCU的连接关系分为2线连接和4线连接,如下两图所示:(注意:JTAG 接口的定义描述也可以由下图得到)4 线连接关系示意图32 线连接关系示意图3. IAR开发环境的安装我以iar for msp430 5.5.为例,但是建议安装我们提供的iar for msp430 5.2;首先,运行“配套光盘:\ msp430软件\IAR安装软件及注册机iar for msp430 5.5.rar”解压并进行安装。
安装步骤如下图所示等待,直至出现如下图4点击“next”直至如下图点击“next”直至如下图运行“配套光盘:\IAR安装软件及注册机for msp430 5.5文件夹中的 IAR kegen PartA.exe 文5件来获取上图的 License#,如下图所示:将license number中的内容复制到License#中,点击next,获得如下图将注册机license key的内容复制到安装软件的license key中,安装目录默认。
转:C8051F 进不了main函数问题解决办法问题:在做C8051F380的一个程序,但在硬件仿真的时候一直进不了main函数。
使用的是Keil uV4开发环境,我在STARTUP.A51文件的198行设置断点,如下,可以run到该断点处,说明启动代码执行正常。
正常情况下该调整到main()函数执行C程序了,然而我现在全速(F5)执行,过一会程序再次停到该处。
并没有跳转到main()函数,(我在main()里的第一条语句处设置了断点)。
进入Debug模式后,首先全速执行到198行,然后在187行设置断点,全速执行,执行后的结果如下:这是为什么呢???这说明了什么???为什么又执行回去了呢?难道是看门狗导致的?对就是这条狗的问题。
下面进行分析。
----------------------------------------------------------------------------------------------由于程序稍微大了些:Program Size: data=35.4 xdata=1289 code=13929。
使用的开发环境是Keil uV4,Keil Option-->Target下的设置如下:由于程序中data比较大,所以在Memory Model下设置为Large模式。
程序编译通过,无错误,警告很多如下。
警告只要是两种类型,一种是 INCOMPATIBLE MEMORY MODEL型,估计是C8051Fxxx 的USB的库中选择Memory Model类型为SMALL格式,而我这里工程设置的为Large模式,所以Keil给出这个警告;另外一种是 UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS,这种警告是提醒定义了一些函数,因为整个程序就没有调用到,所以给了警告。
*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_API)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_CLOCK_START)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_SUSPEND)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (GET_INTERRUPT_SOURCE)MODEL: SMALL......*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?KEY_SCAN?HS6200_TEST_SYS*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?TIMER_INIT?HS6200_TEST_SYS*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?DELAY_50US?C8051F_DELAY......从上面的分析可以看出,程序几乎没有问题。
使用IAR时遇到的一些Error、Waring/sendoc/blog作为菜虫,在使用IAR的时候编写CC2430、、Z-Stack2006程序会遇到如下一些错误,当然随着学习的深入,我会持续更新。
1Q:Error[e16]: Segment XDATA_Z (size: 0x19a1 align: 0) is too long for segment definition. At least 0xe4c more bytesneeded. The problem occurred while processing the segment placement command"-Z(XDATA)XDATA_N,XDATA_Z,XDATA_I=_XDATA_START-_XDATA_END", where at the moment ofplacement the available memory ranges were "XDATA:f1ff-fd53"Reserved ranges relevant to this placement:XDATA:f000-f1fe XSTACKXDATA:f1ff-fd53 XDATA_NBIT:0-7 BREGBIT:80-97 SFR_ANBIT:a8-af SFR_ANBIT:b8-c7 SFR_ANBIT:d8-df SFR_ANBIT:e8-ef SFR_ANA:其实这个问题并不是你的程序本身有问题,主要是因为你编写的程序太大了,超出了芯片本身的定义。
今天在群里学习了一招,就是将数组定义到code里,我们看一下例子。
我们定义一个5100个元素的数组,有以下两种方法:mermaid提出的方法是:typedef unsigned char const __code INT8U;extern INT8U shuzi[5100];文晶提出的方法是INT8U code shuzi[5100];这两种方法其实效果是一致的,定义完数组之后,调用的部分就是需要用指针来调用数组里面的数值了。
问题一:IAR中如何做位定义,位操作以前在STVD中,使用如下语句做位定义_Bool L1 @PA_ODR : 6; //数码管个位, 低电平点亮_Bool L2 @PA_ODR : 5; //数码管十位, 低电平点亮_Bool L3 @PA_ODR : 4; //数码管百位, 低电平点亮但是同样的语句在IAR中不能用了,编译时报错。
后来,查看IAR中的头文件 "iostm8s207rb.h",看到如下语句/*-------------------------------------------------------------------------* Port A bit fields*-----------------------------------------------------------------------*/#ifdef __IAR_SYSTEMS_ICC__#define PA_ODR_ODR0 PA_ODR_bit.ODR0#define PA_ODR_ODR1 PA_ODR_bit.ODR1想想看:既然可以用PA_ODR_ODR1来指定某个位,那么我再将某个位用define重新定义为我想要的名字不就可以了吗?心动不如行动,于是写下如下语句:#define Sound_K PA_ODR_ODR6; //语音控制K原本以为十拿九稳,肯定能编译通过,结果现实狠狠地教训了我一下,报错!Error【Pe029】:expected an expression我百思不得其解,以为IAR不支持这种重复定义的方式,于是换用bool,_Bool, _bool, bit ......各种方法尝试,结果均以失败告终,事情似乎走到了尽头。
最后,抱着试一试的想法,我把原头文件中的语句#define PA_ODR_ODR6 PA_ODR_bit.ODR6换成#define Sound PA_ODR_ODR6 //语音控制K结果,编译通过了,我真是泪流满面啊,没想到问题解决了。
iar使用详细指南iar使用详细指南2009-12-05 10:02要:本应用笔记说明如何建立、构建和调试面向MAXQ?平台、以C语言编写的应用程序,并演示MAXQ2000的某些特性。
引言MAXQ平台得到了世界一流工具的支持,例如IAR专为MAXQ系列提供的“嵌入式工作台” (Embedded Workbench)。
本应用笔记说明如何建立、构建和调试面向MAXQ平台、以C语言编写的应用程序。
本文还将演示MAXQ2000的某些特性,MAXQ2000是MAXQ 系列的第一款微控制器。
本应用采用专用于MAXQ平台的1.12B版IAR编译器编写。
这些指令在后续版本的产品中仍会保留。
这些指令可以在MAXQ2000评估板上执行。
设置MAXQ2000评估板在开始编写代码前,首先连接MAXQ2000评估板。
该评估板应含有3块电路板,其中一个带有小型LCD屏。
最大的那个电路板(图1中连接了LCD子板的)就是MAXQ2000评估板。
我们将在本文后面讨论它的特性。
将LCD板连接至MAXQ2000评估板上标有J3的端子。
图1. 连接有LCD板的MAXQ2000评估板剩下的一块电路板是JTAG板。
MAXQ2000装载器和调试引擎采用JTAG协议通信。
由于很难找到通用的、用于个人计算机的商品化JTAG适配器,Dallas Semiconductor提供了一个串行至JTAG转换板。
评估板还包括了一个小型连接器。
如图2所示,使用该连接器来连接MAXQ2000评估板和JTAG板。
通过电缆将MAXQ2000评估板上标有J4的端子和JTAG电路板上标有P2的端子连接在一起。
注意,连接电缆的红边应在两个板子上的引脚“1”和“2”一侧。
图2. MAXQ2000评估板与JTAG板连接MAXQ2000评估板上有3个跳线。
跳线JU1、JU2和JU3上的引脚1和2应跳接在一起。
此外,确保晶体放置在Y1上(靠近板上的微处理器)。
本应用笔记的演示程序默认晶振频率为13.5MHz。