修改g_oalAddressTable,编印出错:error A0092

haiou_arm 2010-09-09 02:59:00
-----------------------------------------------
我很冤啊……
-----------------------------------------------
在g_oalAddressTable表下把
;DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
改为:
DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4 = TDA8007
后编译出现:
error A0092: no immediate rotate operand can be created: -1068 D:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\OALLIB\startup.s 555
的错误,错误指在:add r0, pc, #g_oalAddressTable - (. + 8) 处
1、在网上查了些相关的错误帖子,有说是汇编的立即数错误,这个应该可以排除,因为0x9A000000肯定是合法的立即数;
典型是这篇文章:http://www.cnblogs.com/walzer/archive/2006/02/05/325610.html
2、另外就是这些看完还不能明白的:
http://topic.csdn.net/u/20100510/22/4501b56e-69c0-4c9d-8cca-e45198a43754.html
http://topic.csdn.net/u/20091006/19/f0320e0c-aa13-46f5-b81b-2dc0800e6ac3.html
http://cotiy.cn/t6087372.html

...全文
295 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiou_arm 2010-09-16
  • 打赏
  • 举报
回复
这两天抽空看看汇编的知识,邓弄明白了再来交作业……
谢谢老贼啊,嘿嘿
FrankBIBI 2010-09-13
  • 打赏
  • 举报
回复
add r0, pc, #g_oalAddressTable - (. + 8)
这句改成LDR r0, =g_oalAddressTable
试试
paul_chao 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 haiou_arm 的回复:]
error A0092: no immediate rotate operand can be created: -1068 D:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\OALLIB\startup.s 555
[/Quote]

LZ 有興趣的話, 請參考
http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001m/QRC0001_UAL.pdf

ADD{S} Rd, Rn, <Operand2>
ARM: a 32-bit constant, formed by right-rotating an 8-bit value by an even number of bits.

Paul, Chao @ Techware
chinesedragon2010 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 haiou_arm 的回复:]
引用 7 楼 paul_chao 的回复:

LZ 的 StartUp.s 应该也有修改过吧, startup.s 内通常有下列两行

INCLUDE oemaddrtab_cfg.inc
...
add r0, pc, #g_oalAddressTable - (. + 8)

LZ 是不是在这两行中有加入一些什麽东西

Paul, Chao @ Techware


……
[/Quote]
这很奇怪啊!
shellgo 2010-09-12
  • 打赏
  • 举报
回复
啊,这样就可以搞定了,郁闷,
找个时间测试下,
haiou_arm 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paul_chao 的回复:]

LZ 的 StartUp.s 应该也有修改过吧, startup.s 内通常有下列两行

INCLUDE oemaddrtab_cfg.inc
...
add r0, pc, #g_oalAddressTable - (. + 8)

LZ 是不是在这两行中有加入一些什麽东西

Paul, Chao @ Techware
[/Quote]

有这个可能!
这个BSP来自开发板自带,而非官方。我可以肯定我自己没有动过这个StartUp.s,但不能保证开板半厂家动过!而我根本找不出哪句是加入的
不过我不明白的是为什么在这两行之间添加内容就会出现A0092的错误?而我却用下面的方法确编译通过了:
将INCLUDE oemaddrtab_cfg.inc移到了StartUp.s的最后,END语句的前面,却顺利编译通过了,而且总线地址访问正确。

这个问题到底是个简单的汇编语法问题?还是头文件的引用问题?为什么不能在那两句之间添加内容?
请大家一起分析下,把这个问题弄明白!
congyue123 2010-09-10
  • 打赏
  • 举报
回复
不懂,表示关注。。。
unsway123 2010-09-10
  • 打赏
  • 举报
回复
恢复你之前能编译版本,你不是认为你只是改动了这个地方吗?再排查吧
chinesedragon2010 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 paul_chao 的回复:]
LZ 的 StartUp.s 应该也有修改过吧, startup.s 内通常有下列两行

INCLUDE oemaddrtab_cfg.inc
...
add r0, pc, #g_oalAddressTable - (. + 8)

LZ 是不是在这两行中有加入一些什麽东西

Paul, Chao @ Techware
[/Quote]
有这个可能,楼主仔细检查一下吧。
paul_chao 2010-09-10
  • 打赏
  • 举报
回复
LZ 的 StartUp.s 应该也有修改过吧, startup.s 内通常有下列两行

INCLUDE oemaddrtab_cfg.inc
...
add r0, pc, #g_oalAddressTable - (. + 8)

LZ 是不是在这两行中有加入一些什麽东西

Paul, Chao @ Techware
haiou_arm 2010-09-09
  • 打赏
  • 举报
回复
Veabol的意思是从0x9A000000~0x9C000000(32M)的地址和别的重叠吗?应该没有,MMU相关的就这一张表,这张表我可以保证没有重复的
[Quote=引用 3 楼 veabol 的回复:]

地址有没有出现重复等现象?
[/Quote]
haiou_arm 2010-09-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chinesedragon2010 的回复:]

楼主的
“在g_oalAddressTable表下把
;DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
改为:
DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4 = TDA8007"没有改动吧,只是改动了后面注释的部分,这怎么可能到导致编译出错……
[/Quote]
哦,把原来的注释号“;”去掉了
博说医械研发 2010-09-09
  • 打赏
  • 举报
回复
地址有没有出现重复等现象?
chinesedragon2010 2010-09-09
  • 打赏
  • 举报
回复
楼主的
“在g_oalAddressTable表下把
;DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
改为:
DCD 0x9A000000, 0x30000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4 = TDA8007"没有改动吧,只是改动了后面注释的部分,这怎么可能到导致编译出错呢?麻烦楼主确认一下。
shellgo 2010-09-09
  • 打赏
  • 举报
回复
顶下,一直也没理解

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧