IAR编译器的常见问题
先编译看看自己的程序用了多少ram,在看看总共有多少ram。
然后Project ——> Option ——> Linker ——> List选择生成LIST文件,并包含stack选项,如下图所示。
在./Debug/list目录下,得到.map(可能是.lst等其他格式)文件,用记事本打开,找到以下内容:
****************************************
* *
*CALL GRAPH*
* *
****************************************
->Sub-tree of type: Interrupt function tree that does not make
: indirect calls
CSTACK
| Stack used (prev) : 00000000
01 int_T0_OV
| Stack used (prev) : 00000000
| + function block : 0000000C
......(省略N行)
01 main
| Stack used (prev) : 0000003A
| + functionblock: 00000000
<-Sub-tree of type: Function tree
| Stack used : 000000E2
找到最大的Stack used,我的就是000000E2,这就是用到的最大的堆栈空间,保守一点,我设置成0x100字节,没有超过剩余RAM,再重新编译,运行,仿真器没有堆栈不足警告,程序也能正常运行了。
如下图所示:
4. 查看汇编
相信一个优秀的单片机软件工程师都多多少少会去看看编译器的汇编代码,看看有没有什么问题或者看看编译器有没有自作聪明的做些什么
Project ——> Option ——> C/C++ complier ——> List,勾选output assembler files,编译后则生成离线汇编代码文件
此时在工程目录下的Debug-->List即可看到所有参加编译的C文件对应的汇编文件,后缀名为*.s90
评论