赞
踩
笔者来聊聊AMP和SMP架构理解(多核下系统)。
笔者经常听到ARM架构时,谈到SMP的架构或者AMP的架构,今天特意来了解一下,主要是针对多core处理,对于常见的MCU应用场景,可以比较少,往往是需要较强的性能或者应付复杂的场景,会碰到多核的场景。
故名思意,
主要Core的运行方式特点有如下:
运行的指令集相同,架构相同
运行的OS相同
使用项目的内存空间和地址映射
共享相同的地址空间(物理以及虚拟)
符号表相同
上图绘制了一个SMP的示例图,其每个core的内存空间相同,都可以访问程序中的每个函数,即符号表是共享的,那么OS则也是运行的相同的,指令集是相同的。
内存空间相同,每个core看到的地址和函数都是一样的地址,比如使用指针函数获取地址时,获取同一个函数地址都是相同的,也可以正常执行, 如果地址空间不同,则需要注意,不能直接获取地址执行。
再来说说符号表,ARM学习(7) symbol 符号表以及调试,笔者之前介绍过一次,就是所有的符号都可以搜索到,可以正常编译,主要就是(全局变量,函数,链接器生成的一些符号等)
指令集就不做过多介绍,ARM学习(6) 指令集学习,这个可能体现的不那么明显,用户往往看不到,看汇编指令或者异常架构时会学习到这个,比如启动,中断向量表等。
栈和core内的cache就不多说了,肯定是各自独立的,当然也有共享的cache,比如L2 L3这种cache
Trace32加载时,选择一个elf文件即可,可以同时看到多个core的寄存器信息(寄存器这些数量等都是相同的),包括当前Pc的位置等
可以随便切换core,看到其他core在执行函数的位置。
主要Core的运行方式特点有如下:
再来看看AMP的架构,core之间的内存空间独立,架构或者指令集可能不一样,符号表都是属于各自的,通信可以通过共享的内存进行通信,但是通信的地址和外部设备的地址可能不同,也可能相同。
core之间地址独立,意思可能双core的地址空间独立编址,比如有部分空间都是从0地址开始,所以地址即无法访问对方的空间,这也不是完全绝对的,有些地址空间也可以通过总线映射,让对方访问,不过各自的core在自己的视野里看到对方的core的地址会不同。
elf文件各自独立,即需要两次编译 两次链接形成各自的可执行文件,所以相关的宏以及符号表都会有所不同,当然运行的OS也会不同,
地址不同,带来的编程方式也不同,各自core视野地址不同,则无法使用地址来进行内存空间访问。
Trace32 需要开启两个窗口分别进行debug,然后分别选择对应core的elf文件。
AMP 双core Cortex-R5的架构芯片
AMP STM32MP153 (dual CortexA7 + CortexM4)
SMP 6core的Cortex-A53架构芯片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。