搜索
bottom↓
回复: 13

请教马老师,关于can128的twi中断编译出现的错误提示问题!

[复制链接]

出0入0汤圆

发表于 2008-5-15 23:28:06 | 显示全部楼层 |阅读模式
在编辑中只要使用了#pragma interrupt_handler TWI_isr:iv_TWI就会出现以下错误,请问是怎么回事?
我用的是iccavr6.31a,芯片选择atmega128/can128
!E debug.o(79): Code address 0x8e already contains a value
!E debug.o(79): Code address 0x8f already contains a value
!E debug.o(81): Code address 0x8c already contains a value
!E debug.o(93): Code address 0x8c already contains a value
以下是源程序

#include <ioCAN128v.h>
#include <macros.h>

unsigned char T0=0;
// 延时子程序
void delay (int time)//0.25*(7*ticks+18)us for 4MHz
{
  while(time--)WDR();//喂狗;
}

//定时器1初始化
void InitT1(void)
{
  TCCR1A=0x00;
  TCCR1B=0x03;//set T1's clock=CK/64,8uS 4MHz
  //1,2,3,4,5分别为1,8,64,256,1024分频6,7由T0引入,下降沿/上升沿触发
  TIMSK1|=(1<<TOIE1);//T1中断使能
  TCNT1=64285;//加1250则溢出
}

#pragma interrupt_handler TWI_isr:iv_TWI
void TWI_isr(void)
{
  WDR();
}

//T1中断
#pragma interrupt_handler T1IntServer:iv_TIMER1_OVF
void T1IntServer(void)//0.01s%0
{
  TCNT1=64285;//加1250则溢出
  T0++;//定时器T0计时器,用于闪灯时间定时
}

//初始化硬件子程序
void InitDevicd(void)
{
  DDRD=0XFF;
   
}

//运行处理程序
void RunProcess(void)
{
  if(T0>50)//0.5s后变换输出
  {
     T0=0;//定时器T0计时器,用于闪灯时间定时
         DDRD^=0XFF;
  }
}

//主函数
void main(void)
{
  InitDevicd();//初始化硬件子程序
  InitT1();//初始化定时器1
  WDTCR=0x1f; //看门狗定时器为2048K周期(每周期为1uS),共2.1s
  SEI();//enable interrupts=> enable UART interrupts
  while(1)
  {
    RunProcess();//运行处理程序
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2008-5-16 16:21:04 | 显示全部楼层
!E debug.o(79): Code address 0x8e already contains a value  
!E debug.o(79): Code address 0x8f already contains a value  
!E debug.o(81): Code address 0x8c already contains a value  
!E debug.o(93): Code address 0x8c already contains a value  

这里不是有提示的吗?

出0入0汤圆

 楼主| 发表于 2008-5-16 21:55:30 | 显示全部楼层
但是这个地方究竟是什么东西占据了呢?
如果我把这个中断去掉就不会了。

出0入296汤圆

发表于 2008-5-17 11:26:06 | 显示全部楼层
你用的是ICC吧?
首先,你确认你的版本已经破解了。(你的问题可能不在这里)
其次,确认你在Compiler Option里面选择了正确的芯片型号。

出0入0汤圆

发表于 2008-5-17 19:20:21 | 显示全部楼层
79,81,93处是什么语句?

出0入296汤圆

发表于 2008-5-17 20:18:56 | 显示全部楼层
马老师的问题提醒了我,好像你的错误提示,不是成串而连续的。——姜还是老的辣哈
我也想知道“9,81,93处是什么语句? ”

出0入0汤圆

发表于 2008-5-17 20:36:17 | 显示全部楼层
作者自己删除掉.

出0入0汤圆

 楼主| 发表于 2008-5-17 23:13:43 | 显示全部楼层
其实我也很想知道究竟里面是什么东西,但是不知道在debug.o里面怎么看,没研究过

出0入0汤圆

 楼主| 发表于 2008-5-17 23:27:57 | 显示全部楼层
现在的程序已经最简,芯片选择atmega128/can128,其余的都是默认的,编译时还是出现以下错误,不知道究竟是什么东西占据了这个区域。我以为你们研究毕竟深入,所以提问,谢谢回答。
以下是我的程序,希望碰到过的朋友知会一下,非常感谢!
其实在can128中不止是TWI中断会出现类似的错误,还有最后几个中断都是这样,只要将下面的中断向量更改就会出现类似的错误。

#include <ioCAN128v.h>
#include <macros.h>

#pragma interrupt_handler TWI_isr:iv_TWI
void TWI_isr(void)
{
  WDR();
}

//主函数
void main(void)
{
  DDRD=0XFF;
  SEI();//
  while(1)
  {
    ;
  }
}

出0入0汤圆

发表于 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楼我讲的有区别,抱歉了.

出0入0汤圆

 楼主| 发表于 2008-5-18 17:33:40 | 显示全部楼层
非常感谢马潮老师,我其实也在网上查到了类似的东西,就是不知道如何修正,以为是可以将就用的,看来这回是非换编译环境不可了!

出0入0汤圆

发表于 2008-5-18 17:42:32 | 显示全部楼层
如果系统中不使用36,37中断,可以将就使用.

出0入0汤圆

 楼主| 发表于 2008-5-18 22:36:50 | 显示全部楼层
其实我是在业余学习用的,现在买了片can128,想玩玩can,而且用了一片eeprom,想趁机一起用一下
我已经在网上找到了icc7的破解版软件,已经编译过去了
谢谢马老师!

出0入296汤圆

发表于 2008-5-21 13:36:54 | 显示全部楼层
一起跟着学习到了。can128没有用过……看了这个帖子,以后会更加注意了……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 04:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表