这里以ZYNQ 7000系列为例,处理器示意图如下:

关于arm处理器cortex-a9双核启动过程 独自运行裸机程序讲解_嵌入式硬件


注意:

编译阶段,编译参数加个宏有什么作用?

答:可以告诉编译器,对于所有源文件中,该宏就定义了,这个是全局的作用。通过这种方式,我们的代码中不需要自己定义该宏了,而且对每个源文件都有效,而且可以在编译器层面进行配置修改,很方便。如果不通过这种方式,那么我们得在一个头文件里定义该宏,然后每个用到该宏的源文件都得包含这个头文件,这样麻烦些。这样就可以控制我们代码哪些编译哪些不编译了。

上面说的两个程序中,cpu1上的程序app1编译时候 gcc 加一个编译宏 -DUSE_AMP,这样,app1中就知道这两个核是非对称运行模式(对称运行模式就是跑了操作系统,统一管理两个核协调运行),也就是独立运行,那么cpu1就不用L2 cache了(两个核共享的),免得和cpu1产生缓存不一致的问题。具体在app1的代码中,如下:

关于arm处理器cortex-a9双核启动过程 独自运行裸机程序讲解_arm_02