打印
[AVR单片机]

一个困扰我好长时间IAR AVR的问题

[复制链接]
4888|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子尘埃|  楼主 | 2008-10-11 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AVR, IAR, ST, ck, se
Data stack(CSTACK) Size这个到底是怎么设置.我按默认的0x20编译通过一点报警提示也没有.写入芯片却出现希奇古怪的现象.用软件仿真出现这个问题:

Sat Oct 11 14:41:02 2008: The stack 'CStack' is filled to 100% (32 bytes used out of 32). The warning threshold is set to 90%.

Sat Oct 11 14:41:02 2008: The stack 'RStack' is filled to 100% (32 bytes used out of 32). The warning threshold is set to 90%.

后来我改到0x300才没有出现这个提示.运行是正常了.
可我后来又加了点代码.又出现了这个提示.这回我就没招了.
Error[e16]: Segment NEAR_Z (size: 0x30 align: 0) is too long for segment definition. At least 0xc more bytes needed. The  
...........

希望明白人给我指点一下呀.




相关帖子

沙发
电子尘埃|  楼主 | 2008-10-11 15:37 | 只看该作者

顶上

使用特权

评论回复
板凳
明智光秀| | 2008-10-11 15:40 | 只看该作者

up

使用特权

评论回复
地板
电子尘埃|  楼主 | 2008-10-11 16:42 | 只看该作者

楼上也有类似问题?

在另一个论坛都是让我再调节堆栈的大小.
难道IAR AVR这么笨呀?不会自动调节??

使用特权

评论回复
5
mxh0506| | 2008-10-11 22:56 | 只看该作者

程序员必须对堆栈用量心中有数

IAR中堆栈的位置和容量是可以任意指定的
你的堆栈消耗那么大,是不是局部变量用的太多了?

使用特权

评论回复
6
电子尘埃|  楼主 | 2008-10-13 10:47 | 只看该作者

定义了一个200个元素16位的数组

程序员必须对堆栈用量心中有数
是不是太绝对了呀.有个差不多就可以了吧.要不然还有C做什么呀,直接上汇编不就完了吗?

使用特权

评论回复
7
yewuyi| | 2008-10-14 08:46 | 只看该作者

~~

可能的原因:
1、你原来把CSTACK设置为0X20时编译不通过,可能是CSTACK空间太小了,不够用,所以出错,当你改大后,当然可以编译通过了。
2、当你改到0x300后,但你加入了其它一些代码后,这些代码需要用到别的地址空间,例如NEAR_Z,但可能你定义的CSTACK太大了,占用了NEAR_Z区域,所以,也报错了。

你应该是没有看懂XCL文件,打开那个文件好好看看,C相对ASM来说,只是写代码方便,但并没有说编译和连接比ASM方便哦,你别把C当作救命稻草,ASM中的编译是直接把ASM符号语言翻译成机器码,编译器基本没什么代码优化手段,ASM中连接也是靠程序员自己确定的,但C中的连接却需要连接器根据XCL文件确定,如果根据XCL文件连接出错,当然就要报错了。

使用特权

评论回复
8
mxh0506| | 2008-10-14 09:44 | 只看该作者

别说只用了C语言

就算是你借用了别人写好的代码,只要自己有改动,一样要明白占了多少堆,多少栈

使用特权

评论回复
9
avr| | 2008-10-15 13:52 | 只看该作者

自己安排堆栈的结构

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

444

帖子

0

粉丝