实验介绍
开发平台:官方STM32H743 NUCLEO板子
开发环境:MDK5.25正式版
软件版本:
(1)CMSIS软件包 V5.3.0
(2)H7的HAL库版本 V1.2.0
例程下载:
实验11:程序运行在ITCM,中断向量表和所有变量使用DTCM.7z
(1.08 MB, 下载次数: 778)
2018-4-14 17:31 上传
点击文件名下载附件
昨天有网友问了这个问题,今天就花了点时间研究了下,现在将其分享出来。实现方法比较简单,基于MDK的Option选项设置下即可,无需操作分散加载。使用分散加载的好处是灵活,在设置复杂工程的内存映射方面比较方便。
实现这个功能的关键是要把所有程序都下载到Flash,系统上电后让MDK中的库函数去将所需的程序加载到RAM里面,用户不要自己去加载,太麻烦。如果用户自己去加载就得搞个bootloader加载应用程序到ITCM。这里所说的库函数是MDK里面的__main封装起来了。
知识点普及:
TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于指令,DTCM用于数据,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。很多时候我们希望将需要实时性的程序和变量分别放在ITCM和DTCM里面执行。本帖就是解决这个问题。
1、添加ITCM空间
2、设置DTCM空间,前0x400大小的空间用于中断向量表,所以这里从0x20000400开始
3、右击所有MDK分组,选择使用ITCM,而进入main函数之前的所有代码,含main函数所在的文件main.c切不要设置,这个之前的代码我们都需要在flash里面执行。这些代码仅执行一次以后不会执行,所以不用管他们,之后的所有代码全部放在ITCM里面。
特别注意,直接右击分组选择设置
4、前面三步设置完毕后,将中断向量表从flash中复制到DTCM,主要存储的DTCM地址要0x200对齐。
通过上面四步就完成了此功能,是不是超级简单。 |