7143|13

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教高手关于GCC-AVR编译问题(C++) [复制链接]

最近放假做了个在AVR单片机上做了个控制板,用的是Atmega16.语言是C++.使用的编译器是WINAVR(GCCAVR) 20060421 .用AVR Studio 4.12 sp4 仿真(软件).
由于系统比较复杂,首先用VC++.NET 2005 开发,在PC测试全部通过后,使用GCC编译时出现了两个警告,调试时出现一个错误.请高手指教:
1.编译器警告
Queue.h:20: warning: ignoring packed attribute on unpacked non-POD field `CommandPackage Queue::cmd[1]
请教原因
2.编译器警告
buffer.h:12: warning: alignment of 'Buffer::_ZTV6Buffer' is greater than maximum object file alignment.  Using 1
3.调试器报错
AVR Simulator: Excessive stack overflow, stop sim

简单说明下程序的情况:
程序用了面向对象的设计,总共涉及了大约10+个类.其中报错了的是指令缓冲相关类.
Buffer继承出了E2PBuffer和CommBuffer,在类内部使用了一个CommandPackage(non-POD)类型组成的Queue类.其中Buffer及其两个子类还有Queue均报了以上两个警告.
我CommandPackage的大小是 10 Byte,缓冲队列最大数量是5,缓冲队列一共产生了6个实例.
由于编译器不支持new和delete,所有对象在全局实例化.并通过函数初始化函数将引用传进类内部.
调试器报错时,堆栈指针指向了043F,就是说堆栈的使用量根本没有过百.
这个程序已经写了N天了,现在从VC转到GCC不行我就全白干了~各位高手帮帮忙吧.

最新回复

你说"所有对象在全局实例化.", 你确定是在全局数据空间, 不是在栈上吗? 这里的错误是堆栈溢出,你的断下来看看callstack, 看在哪出问题? 或者把默认堆栈值调大些  详情 回复 发表于 2008-12-4 21:53
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没搞过
顶一下
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
buffer.h:12: warning: alignment of 'Buffer::_ZTV6Buffer' is greater than maximum object

这个说你的类能产生多个对象,不知道怎么定义的...

看看它的构造函数看看
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

4
 
先查看一下内存的分布是否有stack和heap交叠的情况。另外,有时候仿真器会乱报错。可以换个编译器或者仿真器试试看。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
不明白,按楼上说换个编译器瞧下。怎么选用了GCC呢?推荐CODE VISION,如果你是keil的用户,ok,code vision你一定很顺手。听说很多公司用GCC?!为什么?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
对于编译器,我觉得首先应该检查的还是自己的问题
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
10个类?? 估计是超了AVR的最大资源了,不建议用C++来开发单片机
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
不建议用C++来开发单片机 T16只有1K的内存 你用了10个内 简直是噩梦
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
不建议用C++来开发单片机 T16只有1K的内存 你用了10个内 简直是噩梦
真幽默,不过10个也太黑了,它是MCU呀,可不是PC
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

10
 
即使ARM系统也几乎没有用C++做软件的,重写吧,呵呵
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

11
 
我也是第一次听说用C++写单片机的,希望能学习一下更多GCC下c的例子!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 
帮顶
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

13
 
帮顶
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

14
 
你说"所有对象在全局实例化.", 你确定是在全局数据空间, 不是在栈上吗?

这里的错误是堆栈溢出,你的断下来看看callstack, 看在哪出问题?
或者把默认堆栈值调大些
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表