CPU内核部件之:MMU、MPU、ITCM、DTCM、CCM、Cache

    最近了解到了很多关于CPU内核架构中的组件的相关知识,感觉受益颇丰,在这里总结分享下:

1.MMU:Memory Management Unit,即内存管理单元,主要工作就是进行虚拟内存地址和物理内存地址的映射,而进行映射的目的有两个:一个是解决物理内存不足以提供给程序运行时的问题,另一个是可以给操作系统的每一个进程提供一个单独独立的虚拟空间。

2.MPU:Memory Protection Unit,即内存保护单元,主要负责检查将要执行的内存访问操作是否存在违法/违规嫌行为,如堆栈溢出、数组访问越界、内存访问越界等,对于Cortex-M系列处理器来说,当MPU检测到违规操作时将产生MemManage_Handler或HardFault_Handler(如果MemManage_Handler中断没开的话)错误中断。

3.TCM:Tightly Coupled Memory,中文名:紧密耦合内存,内存中的一种,直接集成在CPU内核中,与普通SRAM相比的优点是存取速度快得多得多;TCM分为ITCM和DTCM,即指令紧密耦合内存和数据紧密耦合内存,顾名思义,ITCM就是用于存指令的,DTCM就是用于存数据的;合格优秀的程序应该将程序中需要快速执行的代码(如中断函数和算法)和经常访问的数据放到ITCM和DTCM中,以提高程序运行效率;由于栈中的数据是会经常使用和释放的,所以对于有DTCM的处理器来说通常都把栈放到DTCM中。另,DMA是无法访问TCM的。

    那么如何将指定的代码放到ITCM中呢?有两种方法,一种是利用gcc的的属性标签,将指定代码赋予ITCM属性,这样改代码就会被载入到ITCM中执行;另一种是将.c文件改成.itcm.c文件。

    将数据放到DTCM中:先给DTCM分配一个固定的映射地址,有了固定的地址后就可以用 __attribute__+at 编译器指令以及分散加载文件(.sct)等方式将指定变量放到DTMC中了;若是要将栈放入DTCM中,则可以在启动的汇编文件中更改栈地址到DTCM映射地址。

4.CCM:Core Coupled

猜你喜欢

转载自blog.csdn.net/u011764302/article/details/108195154