博士
最后登录1970-1-1
在线时间 小时
注册时间2019-4-17
|
首先呢,大家在使用H743 的时候,在keil或者iar中,有一个内存的勾选,如图1,IROM1表示flash的内存地址,h743是2M,所以,大小自然是2M,起始地址可以在参考手册中找到,如图2,这个比较容易理解,程序就是从这开始运行。
其次,是RAM,743内部有1M,那么这1M怎么分的呢,直接说结论,从地址0x2000 0000开始到(0x3880 0000+64k)结束,加起来是1M,问题来了,为什么我们配置的时候要用0x2400 0000开始的512k呢?不知道大家看参考手册看的怎么样,开头讲了ram 的分配,1M的RAM,分成了5大类,TCM、AXI 、SRAM1/SRAM2/SRAM3/SRAM4、BACK,他们所在的区域不同,TCM包含ITCM和DTCM,地址0x2000 0000的128K,位于D1域,ITCM主要用来存取程序代码,也就是执行命令,DTCM用于数据存取。先把所有的内存分配做个总结再说。
{
1、TCM分为ITCM(运行代码)和DTCM(数据存取)
2、速度400MHZ
3、DTCM地址:0x2000 0000,大小128KB
ITCM地址:0x0000 0000,大小64KB
}
AXI SRAM 区
{
1、位于D1域,挂在AXI总线
2、速度200MHZ
3、地址:0x2400 0000,大小512KB
}
SRAM1,SRAM2,SRAM3 区
{
1、位于D2域,挂在AHB总线
2、速度200MHZ
3、SRAM1地址:0x3000 0000,大小128KB
SRAM2地址:0x3002 0000,大小128KB
SRAM3地址:0x3004 0000,大小32KB
}
SRAM4区
{
1、位于D3域,挂在AHB总线
2、速度200MHZ
3、地址:0x3800 0000,大小64KB
}
Backup SRAM区
{
1、位于D3域,挂在AHB总线
2、速度200MHZ
3、地址:0x3880 0000,大小4KB
}
ok,还是原先的问题,为什么要用0x2400 0000开始做程序的主RAM呢,原因在于,如果用户使用了SDMMC1,也就是比如SD卡的dma功能,或者其他用到了SDMMC1的话,该主设备只接AXI RAM,不能使用其他RAM读取,可以不用,声明变量的时候使用at section指向AXI地址也是可以的。
其他几个RAM,需要跟BDMA用的时候进行区分,有些是不支持BDMA的。剩下的就没啥了,其他内容可以看下参考手册第二章。
如果大家功能少的话,可以使用DTCM来当主RAM,毕竟速度最快,但是用到了相关DMA的话,还是换成AXI吧。野火的代码里面默认是使用这个。
|
-
图1
-
图2
|