FSL之深入理解ARM:Cortex核MCU Region Table存储格式是什么?
本帖最后由 sunnyqd 于 2014-8-26 11:47 编辑Region Table即位图中红色圈圈内的的一部分,另一部分是压缩后的数据,由Region Table指向
FLASH中,const和代码(.text)存放在图中绿色圈圈里
我想知道图中红色圈圈的存储格式是什么,因为分散加载到内存中的时候,有一个复制或解压缩过程
我尝试的是在KL02下做的仿真
Region Table的范围是
Region$Table$Base 0x0000070c Number 0anon$obj.o(Region$Table)
Region$Table$Limit 0x0000073c Number 0anon$obj.o(Region$Table)
Region Table为
0000 073C
1FFF FC00
0000 03F4
0000 03BA
0000 0750
2000 0000
0000 0014
0000 0104
0000 0764
2000 0014
0000 0264
0000 0120
Region Table里面的格式应该是4个字一组
第一个word表示:源地址
第二个word表示:目的地址
第三个word表示:长度或其他值?
第四个word表示:应该是指定word1和word2位置的数据存储和压缩类型,可能是个结构体
上面没有找到官方的说明,一个老外问过http://www.keil.com/forum/19386/,但也没有人解答
问我为什么这样用,楼主只是想了解一下内部详细的实现方式,以后或许会用的到
希望了解的来告知一下,大家有兴趣的话,也可以谈谈想法
附Keil MDK工程
楼主,能否标出你楼上的图片出处? FSL_TICS_ZJJ 发表于 2014-8-26 11:49
楼主,能否标出你楼上的图片出处?
Keil帮助文档里,或ARM Linker文档里也有,路径
Linker User Guide: Type 2 image, one load region and non-contiguous execution regions
这个Table是C RTL初始化代码内部使用的,即RVCT的输出Image的部分内容与C RTL初始化代码是紧耦合的。换个RVCT的版本,含义可能会产生变化。。。
尤其是RVCT的数据搬运可能会用压缩格式压缩数据。
如果非要弄明白字段的含义,编译完成以后,单步跟踪进__main,开始的一段就是数据搬运,很容易弄明白干啥的。那个压缩格式很简单…… dr2001 发表于 2014-8-26 11:59
这个Table是C RTL初始化代码内部使用的,即RVCT的输出Image的部分内容与C RTL初始化代码是紧耦合的。换个RV ...
单步调试过,__scatterload()函数,但没有很容易的弄明白是干啥的。。 dr2001 发表于 2014-8-26 11:59
这个Table是C RTL初始化代码内部使用的,即RVCT的输出Image的部分内容与C RTL初始化代码是紧耦合的。换个RV ...
官方这方面有文档吗?我找了一遍官网,没有找到呢 感觉楼主研究得好深入,这种问题简直闻所未闻,值得学习。 sunnyqd 发表于 2014-8-26 12:20
官方这方面有文档吗?我找了一遍官网,没有找到呢
没文档,如果有兴趣研究,就只能反汇编。关键是研究这个没太大价值。。。
实际上和IAR的引导代码类似。 dr2001 发表于 2014-8-26 13:31
没文档,如果有兴趣研究,就只能反汇编。关键是研究这个没太大价值。。。
实际上和IAR的引导代码类似。 ...
比较好奇,只是想了解一下 顶一下 只能帮你顶 qwert1213131 发表于 2014-8-29 17:35
只能帮你顶
估计很少有人搞过,多谢~ sunnyqd 发表于 2014-8-29 21:10
估计很少有人搞过,多谢~
你这个太深入了,一般人都是做普通的开发应用,很少会去关心这些的 不明白,帮顶 http://blog.csdn.net/dickydicky117/article/details/38638465
http://blog.csdn.net/dickydicky117/article/details/38638465
view plaincopy
<span style="font-size:18px;"></span>
这样的利用主要有两个原因,第一在进行stm32开发时没有了code这样的关键字 将数据放入代码段,第二stm32f4 具有ccm ram 这段ram地地址不是连续的,并且只能有内核访。所以就要涉及到散列文件的修改了。
有两种方法可以做到。先介绍最简单的,但是却又最不好用的一种
view plaincopy
<span style="font-size:18px;">#include “absacc.h”
char CCMRAMBUF__at (0×10000000) ;</span>
这样可以分配绝对地址给这个缓冲区,但是如果有多个数据块需要放置,你就必须人工分配地址,保证不会有重叠。
第二种方法需要简单的配置下项目的属性
这时候代码编辑区有如下代码
view plaincopy
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00080000{ ; load region size_region
ER_IROM1 0x08000000 0x00080000{; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00020000{; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 0x00010000{
.ANY (+RW +ZI)
view plaincopy
}
view plaincopy
}
修改如下:
view plaincopy
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x08000000 0x00080000{ ; load region size_region
ER_IROM1 0x08000000 0x00080000{; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
<span style="background-color: rgb(255, 0, 0);"> .ANY (CODE)
</span>}
RW_IRAM1 0x20000000 0x00020000{; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 0x00010000{
<span style="color:#000000;background-color: rgb(255, 0, 0);"> .ANY (CCMRAM)
</span>}
}
注意红色的段: 之后需要放置在CCMRAM的内容这样修饰
view plaincopy
#include "absacc.h"
//vu8 Graph_FB__at(0x10000000); //Òº¾§ÏÔʾ»º³åÇø
vu8 Graph_FB__section("CCMRAM"); //Òº¾§ÏÔʾ»º³åÇø
放置到CODE段的内容
view plaincopy
const u8 Ascii5x8E[]__attribute__ ((section("CODE")))= // ASCII
{
0x00,0x00,0x00,0x00,0x00, // - -
0x00,0x00,0xFA,0x00,0x00, // -!-
....................................................................
}
虽然查看RW ZI 段的大小没有变化,但是实际在使用时已经有了不同,比如:
richards 发表于 2014-8-29 21:47
http://blog.csdn.net/dickydicky117/article/details/38638465
http://blog.csdn.net/dickydicky117/artic ...
我问的不是.sct的事情,不过还是多谢啦 学习了~~~ 楼主还没解决吗? abszy 发表于 2014-8-30 17:11
楼主还没解决吗?
没有呢 顶一下再 帮顶。。。。。。romram在一个空间内?这是普林斯顿结构?不太懂。。。只是今天上课老师讲了下一个和哈佛结构。。看到那个图有点好奇。。 湛泸骏驰 发表于 2014-9-3 16:03
帮顶。。。。。。romram在一个空间内?这是普林斯顿结构?不太懂。。。只是今天上课老师讲了下一个和哈 ...
ROM和RAM可以放在一个同一个空间,Cortex有三条总线,D、I、S,挂载到I、S的都可以执行指令(貌似是,但我不确定)。。啥啥结构的,书上的东西太老了,甭管 sunnyqd 发表于 2014-9-3 16:06
ROM和RAM可以放在一个同一个空间,Cortex有三条总线,D、I、S,挂载到I、S的都可以执行指令(貌似是,但 ...
喔。还有待学习。。谢谢。 湛泸骏驰 发表于 2014-9-3 16:09
喔。还有待学习。。谢谢。
好好学呢,架构这东西看起来挺有意思的 找到了部分线索,以后用到的时候再详细了解吧
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0206h/Bhccgbbe.html
顶一下{:smile:}
页:
[1]