打印

keil转iar遇到点问题~百思不得其解~得求帮助

[复制链接]
5457|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yixin1937|  楼主 | 2010-7-27 12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近从keil转到了iar(其原因不为重点)
大多问题都一一攻下,但当小弟编译过去后,并且能下载进去仿真的时候,出现了点问题~百思不得其解~
问题是:我在中断设置不了断点~,所有的中断中都设置不了断点~定时~串行~等等
而且我只要运行初始化的时候
定时器3
//中断注册 29
ENABLE_IRQ(TIMER3_IRQ_VECTOR);
程序就死了~
不知道是什么原因~
这个程序在keil中没有问题~一直在用~
我没有改动什么~
我不知道是不是iar和keil中断哪里有什么区别~
十分郁闷~
我用iar5.30.1
有高手指点我一下~
小弟不胜感谢
沙发
janeslee| | 2010-7-27 16:01 | 只看该作者
我刚转过来的时候也是不能设置断点,后来好像是设置了options->debugger->Jlink->Breakpoints->Catch exceptions那些都打勾,就好了。
注册中断死可能是startup设置有问题,IAR有自己的runtime library,如果用户没声明自己的__vector_table,IAR会在中断向量处放一个默认的vector_table。

使用特权

评论回复
板凳
yixin1937|  楼主 | 2010-7-27 17:22 | 只看该作者
2# janeslee

谢谢你的帮助~
我现在不是设置不了断点~而是在中断中设置不了断点~
你能仔细说一下关于注册中断的那个地方吗?
再次感觉你的帮助

使用特权

评论回复
地板
janeslee| | 2010-7-27 17:37 | 只看该作者
IAR是这样的,凡是设置不了断点的地方就是被优化掉了,根据你的情况,可能是中断程序没有调用,检查一下你的Startup.s,看看你的中断服务程序的函数名是否与__vector_table内的那些一致。
可以在LINK之后的map文件搜索你的中断函数名,看看是否使用了。

使用特权

评论回复
5
stm8s103| | 2010-7-27 22:01 | 只看该作者
楼上正解,先检查向量表。

使用特权

评论回复
6
yixin1937|  楼主 | 2010-7-28 10:26 | 只看该作者
问题已经解决~
原因是:keil与iar 的向量表不同 。
这段时间我编译IAR for ARM工程的时候出现了上述标题出现的错误信息,void __program_start(void);没有声明
解决:
void __program_start(void);
修改成:
void __iar_program_start(void);

编译已经通过,但是到下载程序的时候报错: User error: Base address of vector table has incorrect alignment. Vector base addr = 0x0800AD3C  
后又解决方法:
IAR4.42的中断向量表跟IAR5.XX的有一些区别,其中IAR4.42的中断向量表里有一句“#pragma location = "INTVEC"”,在5.xx下应该改为“#pragma location = ".intvec"”。这非常可能是造成下载报错的原因。
至此KEI转IAR进入另一个阶段~

使用特权

评论回复
7
yixin1937|  楼主 | 2010-7-28 10:26 | 只看该作者
谢谢以上帮助我的朋友

使用特权

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

本版积分规则

个人签名:用我的一生!来追求人生的高峰!

24

主题

185

帖子

0

粉丝