我在使用ixmrt1170的开发板,因为程序操作片内ROM去的大小,有7兆左右,现在想把代码段放到SDRAM中,如何处理?
原来开发板的ram.icf示例为:
define symbol m_interrupts_start = 0x00000000;
define symbol m_interrupts_end = 0x000003FF;
define symbol m_text_start = 0x00000400;
define symbol m_text_end = 0x0003FFFF;
现在已知SDRAM的起始地址是0x80000000,如何进行分配,以使程序烧录后,能正确运行
已解决! 转到解答。
当代码 RO 段全部链在 SDRAM 时,这时候在 IDE 里无法将工程直接下载进 Flash 离线启动,需要借助额外工具(比如 MCUBootUtility)做下载(下载过程还要使能 DCD)。
在原 IDE 工程里只能在 SDRAM 调试(仿真器直接将二进制下载进 SDRAM 运行),这种方式断电程序会丢失。调试前 SDRAM 需要单独初始化,如下脚本里都包含了 SDRAM 初始化操作
\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\iar\evkmimxrt1170_connect_cm7.mac
\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7\evkmimxrt1170_connect_cm4_cm7side.jlinkscript
目前是用MCU BootUtility烧录,配置如下:
其中DCD bin的路径为\NXP-MCUBootUtility-3.5.0\NXP-MCUBootUtility-3.5.0\src\targets\MIMXRT1176\evkmimxrt1170_xip_boot_header_dcd.bin
使用的例程是\SDK_2.12.0_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world
链接文件为MIMXRT1176xxxxx_cm7_sdram_txt.icf
点击"ALL-In-One-Action",显示:
如果你是想工程全部 RO 代码都放在 SDRAM,可以使用 SDK 包里的 \SDK_2.12.0_MIMXRT1170-EVK\devices\MIMXRT1176\iar\MIMXRT1176xxxxx_cm7_sdram_txt.icf 链接文件。如果你想工程二进制能下进 Flash 里离线启动,需要做如下修改:
define symbol m_interrupts_start = 0x80002000;
define symbol m_interrupts_end = 0x800023FF;
define symbol m_text_start = 0x80002400;
define symbol m_text_end = 0x801FFFFF;