[ZLG-ARM] 一个分散加载的问题

[复制链接]
2970|5
 楼主| luowei1970 发表于 2007-3-3 10:35 | 显示全部楼层 |阅读模式
以下是我的分散加载文件,编译提示:No&nbsp;section&nbsp;matches&nbsp;pattern&nbsp;EmcTell.*o(RW)。<br />EmcTell.c文件中定义的数据无法定位。芯片是LPC2214,其它的都正常,程序也能运行,请高手指教。<br />ROM_LOAD1&nbsp;0x0003a000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_DATA&nbsp;0x0003a000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EmcTell.o&nbsp;(+RW)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />ROM_LOAD&nbsp;0x0<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(MyStacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;HEAP&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Heap)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS&nbsp;0x40003fc0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Stacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
luhuaren 发表于 2007-3-3 11:07 | 显示全部楼层

RE

ROM_LOAD1&nbsp;0x0003a000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_DATA&nbsp;0x0003a000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EmcTell.o&nbsp;(+RW)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />请问你&nbsp;EmcTell.o(+RW)这段数据怎么加载&nbsp;&nbsp;&nbsp;&nbsp;<br />你的意思是把EmcTell.o&nbsp;的RW段加载到0x0003a000&nbsp;&nbsp;执行域为0x0003a000.....<br />
lcyong 发表于 2007-3-3 11:53 | 显示全部楼层

顶一下,我也遇到这样问题

我也想分散加载把NVRAM.C文件中的数据存放在片外RAM&nbsp;0X83000000开始的地址,编译提示的问题和LZ一样。<br /><br />ROM_LOAD&nbsp;0x80000000<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x80000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IRAM&nbsp;0x40000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(MyStacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS_BOTTOM&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(StackBottom)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;STACKS&nbsp;0x40004000&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Stacks)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ERAM&nbsp;0x80040000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RW,+ZI)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HEAP&nbsp;+0&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(Heap)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;HEAP_BOTTOM&nbsp;0x80080000&nbsp;UNINIT<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(HeapTop)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SRAM&nbsp;0x83000000&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NVRAM.o&nbsp;(+RW)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br /><br />ZLG的工程师给帮帮忙呀!
zlgARM 发表于 2007-3-5 11:33 | 显示全部楼层

RE

您是想把一个数组放到内部FLASH里?方法很多,提供一个供您参考。<br /><br />如何烧写到内部flash?<br />Startup.s里的代码,是如何被告知给连接器需烧写进FLASH的?<br />答:是通过分散加载机制实现的。请看下面:<br />“<br />&nbsp;&nbsp;&nbsp;&nbsp;ROM_EXEC&nbsp;0x00000000<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Startup.o&nbsp;(vectors,&nbsp;+First)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;(+RO)<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />”<br />观察这段代码,我们发现,除了vectors段之外,startup.s里其它属性为只读的段也被通知烧写进内部FLASH了。<br /><br />那么,现在就可以得出思路:<br />只要把某数组放到startup.s里的一个段里,这个段的属性为只读就可以把它烧写到内部FLASH了。<br /><br />注意!这里所说的“段”、“段的属性”等概念,您只要阅读一下分散加载文件里的各个段名和属性以及startup.s里的段名和属性就清楚了。<br /><br />最后的实现代码,它们都位于startup.s里。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;&nbsp;&nbsp;DataPT&nbsp;&nbsp;&nbsp;;声明数组的指针变量给main函数。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;array,CODE,READONLY<br />DataArray&nbsp;SPACE&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;留出空间供放置数组<br />DataPT&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataBuf1;声明指针变量用以指向数组里的元素&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />DataBuf1&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;30,23,46,34,67;用这些值初始化数组<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;……<br /><br />main函数里对该数组的使用方法如下:<br />volatile&nbsp;uint32&nbsp;temp;<br />extern&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;*DataPT;<br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;*(DataPT+4);&nbsp;//&nbsp;读取下标为4的数组元素<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />由于涉及到ARM汇编指令,建议用百度搜索一下完成布衣的《ARM常用指令集及汇编》。<br /><br /><br /><br /><br /><br /><br /><br /><br />用百度搜索一下“宛城布衣”,找他的“常用ARM指令集及汇编”文档阅读<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />
jackiezeng 发表于 2007-3-6 18:12 | 显示全部楼层

请教周工,我不用您的模板怎么才能做一个程序啊?

周工,您好!<br /><br />&nbsp;&nbsp;&nbsp;我购买了你的LPC2131开发板&nbsp;,用您的模板到是很容易就可以做一个实验。<br />我也仔细看了启动代码,部分明白。<br /><br />&nbsp;&nbsp;&nbsp;但是,如果我不用您给的模板,不用什么分散加载文件(因为搞不懂),只用一个简单的启动文件,一个简单的程序,点亮一个LED&nbsp;呢?&nbsp;<br /><br />您有这样的例子&nbsp;吗&nbsp;?&nbsp;我只想很简单的,能编译&nbsp;,&nbsp;能运行的&nbsp;程序。<br />我看您的摸板实在很难理解。
youngerger 发表于 2007-4-11 22:15 | 显示全部楼层

楼注的问题,我也考虑过

没有什么问题,只是理解问题<br />编译提示:No&nbsp;section&nbsp;matches&nbsp;pattern&nbsp;EmcTell.*o(RW)。<br />表明分散加载文件的RW为0,即你的整个工程没有RW数据。&nbsp;非ZI的RW数据可以。<br />你可以定义一个初始化为非零的数组,然后在程序中使用一下(没有使用会被优化)。就不会RW=0;也就不会出现上述警告。<br /><br />也可以修改Codewarrior的设置。如下图:<br />https://bbs.21ic.com/upfiles/img/20074/2007411221445986.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

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