谁能讲讲,GNU ARM下,如下代码怎么实现?多谢了

[复制链接]
2735|5
 楼主| lelee007 发表于 2009-6-20 19:40 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALIGN<br /><br /><br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;RamData,&nbsp;DATA,&nbsp;READWRITE<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS&nbsp;;_ISR_STARTADDRESS&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;0x33ffff00,其中^为MAP伪指令,MAP指令是在教科书中数据定义伪操作中讲述<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;I该指令为定义一块结构华内存表的首地址,后面跟着该块内存表内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;问题:经过该定义的内存表,如何实际放到物理内存中去?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br /><br />HandleReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleUndef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleSWI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandlePabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleDabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleReserved&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />HandleFIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4
etual 发表于 2009-6-22 16:44 | 显示全部楼层

GCC的话你要折腾链接脚本了

这堆东西说到尾就是从地址&nbsp;0x33ffff00&nbsp;连续分配RAM空间<br />而且每个入口都有一个标号。<br /><br />GCC处理的话基本思路是,这部分独立一个段,我叫&nbsp;vector&nbsp;段,然后在连接脚本的地方指定这个段的运行地址(gcc叫&nbsp;virtual&nbsp;memory&nbsp;address)为&nbsp;0x33ffff00&nbsp;就OK了。<br /><br />可能需要动手能力强一点,具体参考&nbsp;ld&nbsp;的文档学习&nbsp;ld&nbsp;script&nbsp;怎么用吧。<br />
 楼主| lelee007 发表于 2009-6-23 03:31 | 显示全部楼层

能不能这样?

单独弄个段单独放这个vector,然后指定一个存储地址和一个运行地址<br /><br />在初始化的时候,将这个段从存储地址直接copy放到运行地址了?<br /><br />试试看<br /><br />谢谢LS
 楼主| lelee007 发表于 2009-6-23 03:35 | 显示全部楼层

前面试过将vector段直接存储在高地址,并在高地址运行

结果直接编译出个64M的东西来,当时就傻眼了,而且程序也有问题,跑不了<br /><br />当时头脑热着,没仔细想,后来就放弃这个办法了<br /><br />经你这么一提,哈哈,醍醐灌顶阿<br /><br />不过行不行,还不知道<br /><br />先试试看了
 楼主| lelee007 发表于 2009-6-26 09:38 | 显示全部楼层

试了,用数据段不行,还是用text段

才开始的时候把堆栈设置错了,没发现,也没有仿真,直接DOWN到SDRAM里边去跑<br /><br />结果miicom里边显示个STARTING&nbsp;APPLICATION什么的,然后就不动了,郁闷坏了<br /><br />还没跑到main就停了,反汇编的开始是正确的,后面的也没仔细分析到底跑哪儿了<br /><br />今天回头来检查head.s时看到堆栈设置的时候,才发现,不知道什么时候原来正确的堆栈设置被改过了,而且改的莫名其妙,感觉不是我改的,因为设置的空间就不在SDRAM的映射空间内,崩溃阿<br /><br />改过来后试用数据段定义表,没进中断,而且程序开**不久便停下来,很明显中断来了,但是没找到入口<br /><br />然后还是放到text段里边,然后copy到高端地址,结果居然可以动态配置。<br /><br />前面堆栈设错的时候,用动态配置,就没进main,才开始,第一反应是,text段是不能写的,由于往里边写了,导致程序出错。这下知道了,是可以写的,哈哈<br /><br />现在外部中断入口可以动态配置了,想怎么玩都可以了
Fe_ARM 发表于 2009-6-26 22:44 | 显示全部楼层

上面的代码不全吧

请参考下面的内容:<br /><br />.macro&nbsp;HANDLER&nbsp;HandleLabel<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sp,sp,#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;sp!,{r0}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,=HandleLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[sp,#4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;&nbsp;sp!,{r0,pc}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />.endm<br /><br /><br />.align&nbsp;&nbsp;&nbsp;<br />HandlerFIQ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleFIQ<br />HandlerIRQ:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleIRQ<br />HandlerUndef:&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleUndef<br />HandlerSWI:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleSWI<br />HandlerDabort:&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleDabort<br />HandlerPabort:&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandlePabort<br /><br />....<br />&nbsp;&nbsp;&nbsp;&nbsp;.align<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleReset,&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleUndef,&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleSWI,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*2<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandlePabort,&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*3<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleDabort,&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*4<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleReserved,&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*5<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleIRQ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*6<br />.equ&nbsp;&nbsp;&nbsp;&nbsp;HandleFIQ,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS+4*7<br />.............<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

8560

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部