一、前言
在STM32CubeIDE实现了将变量定义到指定内存,当使用Keil时,方法又不一样了。
STM32H743+CubeIDE-将变量定义到指定的内存
RAM:0x20000000 ~ 0x20020000 ,尺寸128KB。这个就是DTCM内存。
安富莱的建议:
二、Keil
2.1、Target
让Keil只管理DTCM内存,不要管理其他内存。
2.2、Linker
从ST官方手册RM0433可以查到,STM32H743的Flash首地址是0x08000000,DTCM(紧密耦合内存)的首地址是0x20000000。
.sct文件,最开始跟Target配置的ROM与RAM一一对应的。接下来,我们需要增加.sct的内存。
在.sct文件添加其他内存的描述。
RW_IRAM2 0x24000000 0x00080000 { ; RW data - 512KB AXI SRAM
*(.RAM_D1)
}
RW_IRAM3 0x30000000 0x00048000 { ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
*(.RAM_D2)
}
RW_IRAM4 0x38000000 0x00010000 { ; RW data - 64KB SRAM4(0x38000000)
*(.RAM_D3)
}
接着,这一步非常重要,必须点击rebuild整个工程,不然会报错。如果编译的时候出现警告的话,不用管。出现警告的原因是你还没有在那些刚定义的内存里定义变量而已。
三、代码
分别在段RAM_D1,RAM_D2,RAM_D3定义一些数组与变量。
建议使用ALIGN_32BYTES的方式声明变量,这个标识符使得变量以32bit对齐,方便Cache的API操作。
四、DEBUG
进入DEBUG模式后,将数组放到Watch窗口上。
看到数组AXISRAMBuf所在的内存地址是0x24000000,等于刚才.sec文件所定义的.RAM_D1段。