|
发表于 2008-5-18 02:37:01
|
显示全部楼层
正好我的系统中也有ICC6.31a,所以帮你试了一下.问题确实存在,应该是ICC 6.31.A的BUG.ICC最新版为7.x的.
测试下来,是CAN128的中断36,37出问题.问题是M128本身中断到35.34是TWI中断.而M128CAN比M128多了两个中断:36(TWI)和37.
但编译系统还是按M128生成代码,在35号中断向量后面的FLASH中,从0X8C开始放入初始化代码.
而M128CAN的36号中断向量为 8C 8D 8E 8F,37号中断向量为 90 91 92 93.所以当你使用中断36和37时,编译报错,说8C 8D 8E 8F处已经有代码了.
帮你查了ICC的更新日志:
V7.00C - May 3rd, 2005
Under some conditions, the command line compiler was not licensed.
IDE
- network dongle DLL was incorrect
- starting address for CAN128 was incorrect =============================>>这里!!
Compiler
- obscure register allocation bug may cause some programs to fail
- When generating ISR save/restore sequence, the compiler was incorrectly
not save/restore R0/R1 some times for reading flash 16 bit variables
for enhanced mode targets (e.g. M128 and other newer Megas).
可见,在ICC的7.00C版,修正了这个错误.
解决方案:
1.使用更新版的ICC
2.如果不使用CAN的功能,换M128
3.换个编译系统,如CVAVR,iar等.如我现在使用的CVAVR1.25.8支持AT90CAN128.
另外,你这种情况同上面6楼我讲的有区别,抱歉了. |
|