iar编译器的常见问题

iar编译器的常见问题

ID:15441970

大小:421.50 KB

页数:7页

时间:2018-08-03

iar编译器的常见问题_第1页
iar编译器的常见问题_第2页
iar编译器的常见问题_第3页
iar编译器的常见问题_第4页
iar编译器的常见问题_第5页
资源描述:

《iar编译器的常见问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、IAR编译器的常见问题       最近因为项目需要开始使用IARforAVR,我用的是5.40版本的,主要是5.40以上才包括了aTtiny87,至于安装文件和和谐文件,大家自己找吧,很好找的。       1.编译报错如图所示:很显然你没有使能寄存器的位定义。方法如下:Project——>Option——>GeneralOptions——>System(如下图所示),勾选EnablebitdefinitionsinI/O-Includefiles即可 2.MCU型号选择 如果和我一样都次都是以空工程创建的话,不过忘了第一步先进Project——>Option——>Gene

2、ralOptions——>Target选择所使用的MCU型号,不然编译免不了要报错,如下图所示。 3.堆栈大小 今天下午编译一个程序,0错误0警告,挺好,可一运行就跑飞,根本不能正常运行。 其实是我没有正常设置堆栈大小导致的这种问题,尤其是在写大工程时,这种错误出现的概率很高。GCC和IAR分配堆栈的方式不同,IAR先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC不用先分配堆栈,自动把RAM剩余空间作为堆栈空间,堆栈初始为RAM最高地址。先编译看看自己的程序用了多少ram,在看看总共有多少ram。然后Project——>Option——>L

3、inker——>List选择生成LIST文件,并包含stack选项,如下图所示。 在./Debug/list目录下,得到.map(可能是.lst等其他格式)文件,用记事本打开,找到以下内容:*******************************************               CALLGRAPH                     *******************************************->Sub-treeoftype:Interruptfunctiontreethatdoesnotmake:indirectcal

4、lsCSTACK

5、Stackused(prev):0000000001int_T0_OV

6、Stackused(prev):00000000

7、+functionblock:0000000C......(省略N行)01main

8、Stackused(prev):0000003A

9、+functionblock:00000000<-Sub-treeoftype:Functiontree

10、Stackused:000000E2找到最大的Stackused,我的就是000000E2,这就是用到的最大的堆栈空间,保守一点,我设置成0x100字节,没有超过剩余RAM,再重新编译,运行,仿真器没有

11、堆栈不足警告,程序也能正常运行了。 如下图所示: 4.查看汇编相信一个优秀的单片机软件工程师都多多少少会去看看编译器的汇编代码,看看有没有什么问题或者看看编译器有没有自作聪明的做些什么Project——>Option——>C/C++complier——>List,勾选outputassemblerfiles,编译后则生成离线汇编代码文件此时在工程目录下的Debug-->List即可看到所有参加编译的C文件对应的汇编文件,后缀名为*.s90 5.内联函数inline函数传统上只有C++支持,但IAREW也支持在C代码中使用inline.#pragmainline:建议编译器对紧

12、随其后的函数进行inline处理#pragmainline=forced: 强制编译器对紧随其后的函数进行inline处理/*****************************错误描述******************************************///tft.c中定义内联函数#pragmainline=forced//强制inlinevoidTFT_Write_Colour(constRGB_COLOUR*rgb){//...code....}//tft.h中声明函数voidTFT_Write_Colour(constRGB_COLOUR*rgb)

13、;//main.c中调用函数//编译报错:main中引用了未定义的外部函数TFT_Write_Colour。/*****************************解决办法******************************************///tft.h中“定义函数”#pragmainline=forced//在IAREW430中,这里必须用强制inline;用inline可能导致编译器忽略内联,而定义成普通函数而出错。voidTFT_Write_Colour(constRGB_C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。