搜索
bottom↓
回复: 7

关于avr自编程的向量表的问题,谢谢!

[复制链接]

出0入0汤圆

发表于 2011-5-28 19:10:58 | 显示全部楼层 |阅读模式
main      :上次看了个马老师的关于M128的自编程的例子,马老师说,iccavr默认会把向量表自动迁移到引导程序区,所以最后退出引导程序的时候还要把 向量表迁回应用程序区:
question 1:可是自编程的时候应用程序是从0地址开始写入的,那向量表的迁回会不会把原来的应用程序的开头部分覆盖了呢?
         2:向量表本质上是什么啊?向量表和中断配合的机制是什么样的呢?
(我还是只不会飞的的菜鸟,图书馆有马老师的mega8手册,看了一些)

谢谢各位回答这样的菜鸟型的问题,麻烦了!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-5-30 22:10:44 | 显示全部楼层
“iccavr默认会把向量表自动迁移到引导程序区”我在那里说的?前后是讲什么的?

出0入0汤圆

 楼主| 发表于 2011-6-1 17:15:31 | 显示全部楼层
回复【1楼】machao  
-----------------------------------------------------------------------
是老师讲IAP的一个帖子讲的,可是我看不明白,主要就是向量表这个概念很纠结,老师能不能深入的描述一下呢,谢谢老师!

出0入0汤圆

 楼主| 发表于 2011-6-2 17:25:43 | 显示全部楼层
回复【1楼】machao
-----------------------------------------------------------------------

马老师,请问:向量表中的东西是什么时候写进去的?是不是icc编写程序的时候程序中就有,还是怎么回事啊?那应用程序区和boot去都写程序的时候是不是两边都有向量表,只是只执行了一个,还是只有一个?迁移向量表是怎么做到的,把向量表再写一遍马?



问题好像有点多了。但主要就是向量表的问题啊!不知道老师能不能有时间看一下我的问题,先谢谢马老师了!

出0入296汤圆

发表于 2011-6-2 18:14:07 | 显示全部楼层
楼主,这里的所谓移动并不是拷贝然后覆盖,而是认定某个地址作为向量表的起始地址……
也就是说,ICC会自动设置芯片,让芯片认定boot区的首地址作为向量表的首地址;马老师
书中说要手工把向量表挪回去,意思是设置寄存器,让芯片“认定”0地址作为向量表的首地址,
而不是把原来boot区向量表里面的内容拷贝到0地址起始的区域里面……

出0入0汤圆

发表于 2011-6-10 17:50:55 | 显示全部楼层
回复【楼主位】zhyscout
main      :上次看了个马老师的关于m128的自编程的例子,马老师说,iccavr默认会把向量表自动迁移到引导程序区,所以最后退出引导程序的时候还要把 向量表迁回应用程序区:
question 1:可是自编程的时候应用程序是从0地址开始写入的,那向量表的迁回会不会把原来的应用程序的开头部分覆盖了呢?
         2:向量表本质上是什么啊?向量表和中断配合的机制是什么样的呢?
(我还是只不会飞的的菜鸟,图书馆有马老师的mega8手册,看了一些)
谢谢各位回答这样的菜鸟型的问题,麻烦了!
-----------------------------------------------------------------------

4楼的解释LZ基本不会理解的。从他问的问题看,其所掌握的基础知识还达不到学习自编程的阶段,更不要说理解向量表迁移这个更深的概念。

回答LZ的2个问题:
2。建议学习微机原理中关于中断的概念。这些内容不是几句话能说明白的。
1。应用程序是从0地址开始的,但0地址通常是一条转移指令,这样就把后面的空间是让出作为中断向量区,哪怕不用中断,这些地方通常也是空着不用,或者使用中断返回语句填充,提高代码的可靠性。另外向量表的迁移本身并不会改变中断向量区中的内容。改动的是芯片内部指向中断向量区的一个硬件指针,这个指针在芯片内部,对程序员来讲是不透明的。程序员只能通过指令,改变它的指向,或者指向0开始,或者指向从BOOT开始。此中断迁移指令并不会改变任何FLASH中内容。

我说的,是从汇编角度出发的,对这些问题的了解也只能建立在MCU本身结构上,从汇编角度分析。如果没有这些基础知识,或者掌握不扎实,那么从C和编译器的角度是理解不到如此深的。

lz位把我的一段解释“Iccavr默认会把向量表自动迁移到引导程序区,所以最后退出引导程序的时候还要把 向量表迁回应用程序区”贴出,实际他并不知道这个到底是为什么。我再具体一下:

1。在ICCAVR中编写BOOT代码时,需要声明这个代码是BOOT代码,这样产生的HEX定位文件就不是从FLASH的0地址开始,而是从BOOT开始定位。ICCAVR的编译指定为BOOT代码过程中,会自动加上中断迁移的指令,将中断向量起始指向了BOOT区,这样保证了BOOT和BOOT中所使用的中断,以及其中断向量位置都在BOOT区中。这就把APP区彻底释放给用户的APP,不会造成矛盾和冲突。

2。用户的APP代码通常定位在从0开始,中断向量也是指向0开始地址。

3。所以当从BOOT回到APP的之前,需要把中断向量的指针从BOOT区迁移到APP区,然后再跳到APP开始执行,这样就能保证APP本身的独立完整和正确执行。再次强调,这个迁移没有该变FLASH中任何的内容。

出0入0汤圆

 楼主| 发表于 2011-10-19 19:26:11 | 显示全部楼层
回复【5楼】machao
-----------------------------------------------------------------------

最近考试很多,一直忙着学习了,都没顾着回复您了。上面的问题已经搞清楚了,我先学习了汇编,然后用protues,avr studio不断的调试,了解iccavr编译器生成的代码究竟是什么样的,了解了很多的细节,此时才体会到数据手册和各位前辈一些话语的精髓,当然最重要的还是最终弄懂了这个原理,真是谢谢马老师和 Gorgon Meducer 傻孩子
的耐心的指导,也谢谢论坛的很多的资料。体会就是:强大的数学功底和实践精神很重要,再次谢谢你们!

出0入0汤圆

 楼主| 发表于 2011-10-19 19:27:12 | 显示全部楼层
回复【4楼】Gorgon Meducer 傻孩子
-----------------------------------------------------------------------

最近考试很多,一直忙着学习了,都没顾着回复您了。上面的问题已经搞清楚了,我先学习了汇编,然后用protues,avr studio不断的调试,了解iccavr编译器生成的代码究竟是什么样的,了解了很多的细节,此时才体会到数据手册和各位前辈一些话语的精髓,当然最重要的还是最终弄懂了这个原理,真是谢谢马老师和 Gorgon Meducer 傻孩子
的耐心的指导,也谢谢论坛的很多的资料。体会就是:强大的数学功底和实践精神很重要,再次谢谢你们!
嘿嘿!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 09:55

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

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