多核ECU运行流程(简单介绍)

一、参考

浅析多核ECU运行流程

二、如何对多核核心分别编程

  • 对每个核心,都有一个对应的CPUn_main函数的C文件与之对应如下图所示:
    在这里插入图片描述

三、每个核如何找到自己对应的main函数

在这里插入图片描述

  • ECU上电后的启动流程如下图所示。上电之后其实也就三步:“运行ROM的启动函数——跳转到FLASH中的Startup函数——跳转到main函数”。所以Flash里的Startup函数其实才是最先执行,且是用户可以修改的函数,只是一般是被封装好的。

注意:bootlooader即在Startup函数基础上的修改。(boot启动函数----> boot main函数----->应用程序启动函数------>应用程序的main函数)

  • 启动函数如下所示。函数在初始化核心的其他资源之后,在最后一行跳转到了自己的main函数“__non_return_call(core0_main)
    在这里插入图片描述

四、编译器如何知道"_Core0_start(void)"是core0的启动函数 (以下以TC27x为例)

  • 通过调用层次结构可知,_Core0_start(void) 实际上由 _START(void) 调用
    在这里插入图片描述
  • 而_START()的地址在linker file文件里面已经是固定好的,如下所示
    在这里插入图片描述
  • 追溯到boot工程中的main函数,由boot跳转至APP即跳转至_START()函数
    在这里插入图片描述

五、多核之间的主从关系

  • 虽然CPU之间多个核心可以自由开闭,但显然在某个时间点上至少需要有一个核在运行。以TC377为例,在官方提供的startup函数里面【绝大部分情况你都不会需要去改官方的startup函数,最多调一下flag】,只有core0是默认开启的,从这个角度上来讲,core0是主核心。
    -展开core0_main函数的调用层次结构如下,_START()函数最终调用的为核0的主函数
    在这里插入图片描述
  • 由于核0默认开启,在函数 __StartUpSoftware_Phase6(void) 中,开启了核1,如下图所示
    在这里插入图片描述
    -同样展开core1_main主函数的调用层次结构如下
    在这里插入图片描述

-在函数 __Core1_start(void) 中,开启了核2,如下图所示
在这里插入图片描述

  • 所以以此类推,之后核2又会去启动核3……,可以确保核心按照0,1,2,3,4,5的顺序依次启动,不会发生随机性。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值