i.MX RT117x 与 RT10xx 系列相比,一个很明显的区别就是多了一个 M4 的内核,从而是多核协作成为可能。多核操作一般的做法是在各自独立的程序数据空间运行,通过一块共享的内存空间进行通讯,例如官方的 SDK 例程中,M7 的代码运行在 Flash 里面,而 M4 的代码则运行在 SRAM 里面,这样可以确保performance 的最大化,不过在开发阶段,客户也许需要把 M7 和 M4 的代码放在外部的 SDRAM 里面调试,这样虽然会影响一部分 performance,但是不会对flash 进行过多的擦写操作,也有一定的现实意义。下面就对如何把一个 dual core 的 project 加载到 SDRAM 上调试进行详细的解说。下面的样例来自与官方的 dual core rpmsg_lite_pingpong demo。
因为默认系统是从 M7 core 启动,所以通常的做法是通过 M7 实现 M4 代码的加载,然后 M7 启动 M4。所以大部分的设置都是在 M7 project 里完成。具体
步骤如下:
1. M7 project 的设置
a) 添加 BOARD_SDRAM 和 SDRAM 两个内存空间定义,其中 BOARD_SDRAM 是给 M7放代码数据用的,而 SDRAM 则是给 M4。这里需要注意的是BOARD_SDRAM 的位置要紧挨这 BOARD_FLASH。
b) 添加宏定义,使能 SDRAM 初始化代码
c) 选中下列选项,把原本放入 BOARD_FLASH 的应用代码放入 BOARD_SDRAM。
d)在多核设置中,将 M4 的代码位置设为前面定义的 SDRAM 空间。
e)在 debugger 配置里替换启动脚本为带 SDRAM 初始化的版本。
并添加下列这个调试选项:--cachelib libm7_cache.so
f) 最后在代码里更新 M4 core 启动地址为前面定义的 SDRAM 的起始地址:
2. M4 project 的改动则简单的多。
a)添加 SDRAM 内存空间定义,起始地址和大小与 M7 project 里的 SDRAM 空间定
义保持一致。
完成上述步骤后,你就可以在 SDRAM 里同时调试 M7 和 M4 的代码啦!