ADS2.2(ARM REALVIEW 2.2/RVDS2.2)中的连接与ADS1.2不兼容问题
高手们好!本来在ADS1.2中的连接(LINK)是正常的,在ADS2.2中却是连接出错。经研究,是中断向量的几个标号连接出错,请教哪位高手,如何解决?! 把出错信息传上来
你仔细看看帮助 关于连接部分*.s文件为引导文件 是不是你的连接没有找到着个文件
你可以常试着从新添加到你的工程里. 请看附件:
点击此处打开armok01100546.xls 1楼的那位高手不是说好帮忙的吗?! 请哪位高手帮帮忙解决一下?!先谢谢啦!如果在珠海的话,请客也行啊。 现在忙好久没有来了
我在沈阳离你那里太远了
我真服你了,AMR编译后入口指针你知道是什么吗,如果不知道 建议你在ADS里仿真看看第一句是什么,连入口都定位不了,连接后就是绝对地址,而不是编译时的虚地址。那些中断当然就出错了,入口指针和中断函数都是在一个文件里 用那个就给那个添加中断处理功能块
就象51复位的第一条指令在0一样
在一个就是更换了环境,看RVDS帮助,里边有汇编和C语法的变更。在RVDS工程管理里设置编译的器件,
我建议你先找个好的例子看看
一般是*.S文件
AREA Init,CODE,READONLY 看看汇编吧建议 当然不会花你很多时间。但是你必须知道才能作好
ENTRY 这个就是入口
b ResetHandler;for debug 复位后B指令 跳到这里 你在ResetHandler里添加
复位处理 不加也可以
b HandlerUndef;handlerUndef 着几个就是中断函数 你在函数声明里加处理功能
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved
b HandlerIRQ
b HandlerFIQ 哈哈
刚仔细看了才 你肯定是在移植周立功开发板的例子了
他们的风格就是有STARTUP.S文件 和 IRQ.s 两个组成地层驱动
那里说的很详细的
看样子ADS你肯定熟悉了,问题是RVDS你不熟悉了 还是先看看工程设置 先谢谢啦!
我看过了,在Startup.s里有下面两行:
CODE32
AREA vectors,CODE,READONLY
再次请教,是不是直接把vectors改成Init就OK吗?!我也奇怪这个文件怎么不用
AREA Init,CODE,READONLY
呢?!
看来dazuieyu对周立功开发板的例子很熟悉啊,再次请高手指教指教. 如果我去了沈阳的话,一定请客,不过机会很少.我不喜欢出差或到外面旅游. AREA Init,CODE,READONLY
//Init这是这个段的名字 你想怎么叫都可以 主要是方便明了。Init 初始化
ENTRY 关键字 自己去查 看看解释
b ResetHandler;for debug 复位后B指令,B指令寻址范围你查查看
ResetHandler 函数名字 复位后C语言入口
ResetHandler 到这个函数里添加复位后的处理
建议你在里边做个无限循环,直接死机,看看好玩不。
哈哈哈
b HandlerUndef;handlerUndef 着几个就是中断函数 你在函数声明里加处理功能
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved
b HandlerIRQ
b HandlerFIQ 类同ResetHandler
建议你先把周立功的代码看懂在来学移植吧一点基础都没有 基础才是最重要的
世界上有1000重以上潜入试处理器
但是只要你弄懂了一个 其他的就会触类旁通了 必须简单的了解ARM的体系和指令(宏汇编) 要不然学习这些一点意义都没有当然了如果就是为了找点乐子我不反对你这样去学习。不要总是提一些愚蠢的问题自己多想多实验 实在不懂在寻找帮助 我真的不是很懂,不过上面这段代码我理解。
不过您老大能否针对周立功的代码和那些连接出错的指示作一一对应的说明和作出改正措施?对BOOTLOAD我还是了解一些。
谢谢先。 等写日子得 我在做新项目快要完了
完了我可以休息一个月那时在说了 你要坚持住啊哥们 哈哈 哥们,没事。哥们在做什么工作?新项目完了可以休息一个月的?羡慕!我一个月要上26天班的啊?!
先谢谢! 除dazuieyu外再没有高手了吗? 可是我不是高手,帮不了你。
不过,楼主的行为令人有点不爽。
在公共论坛上,没人能强求别人一定要帮你解决问题。 Sorry! 这个问题应该自己就能解决,虽然ADS文档不是很好,但是还是可以找得到这个问题的描述(1月25日到2月21日)。
回到正题:
第一个问题dazuieyu提到了,在startup.s中有一个ENTRY,在link时需要用-entry指出这个ENTRY的绝对地址。在RVDS2.2的连接器选项中有这个设置,或者直接输入 --entry 0指定入口地址为0。
第二个问题是ADS1.2升级到RVDS2.2固有的问题。问题的起因是因为使用LDRD和STRD双字传输指令。可能(猜测)RVDS2.x的C编译器使用了这些指令,因此要求你现有的汇编文件和库文件明确使用8byte对齐栈(见rvds编译器参考手册的3.1.6),所以,你应该在汇编文件中加上“PRESERVE8”来定义,而这个在zlg的文件中是没有定义的。 非常谢谢mored!
有空我会试一试,毕竟RVDS2.2比ADS1.2的界面好多了! mored,好象RVDS2.2没有“PRESERVE8”这个汇编修伪指令呀?
您再看看这个编译错误文件,它究竟是错在哪里呢?
点击此处打开armok01103490.xls 我的也一样,也是这样的错误. 习惯了1.2还不知这个2.2是怎么用得好了.
Error : armlink: L6238:Vectors.o(Startup) contains invalid call from '~PRES8' function to 'REQ8' function FIQ_Exception. JTAG以前的也不行,算啦,还是换回1.2 了. 非常谢谢mored!
原来PRESERVE8是伪操作,我在每个后辍为S的文件中加上,果然OK。
也谢谢MyAVR的忠告;但我已经知道怎么处理了,谢谢。 mored说的ADS文档是指ADS自带的帮助文件吗?关于编译器,它可是什么都没说。 mark
我还是没懂,光看见教训人了! 学习一下!!! 不是说1.2 后就不更新了吗? mark,感谢16楼 MARK mored 发表于 2006-2-22 10:43 static/image/common/back.gif
这个问题应该自己就能解决,虽然ADS文档不是很好,但是还是可以找得到这个问题的描述(1月25日到2月21日) ...
怎么都说16楼,我明明看到的就是17楼,学习了,我的问题解决了。太感谢了!
页:
[1]