TASKING中文网站 > 新手入门 > TASKING怎么配置多核AURIX工程 TASKING多核工程启动顺序异常如何排查
教程中心分类
TASKING怎么配置多核AURIX工程 TASKING多核工程启动顺序异常如何排查
发布时间:2026/08/27 15:18:44

  AURIX多核项目在TASKING中不只是把TC0、TC1、TC2代码一起编译。工程还要选择正确的多核配置,加入各核启动文件,在Startup Configuration里允许TC0拉起其他核心,并通过LSL安排各核代码、数据和栈。工程可以正常生成ELF,却出现TC1不启动、TC2比预期提前执行、某个核心停在启动代码或多核初始化一直等待时,可以从工程模式、启动开关、入口地址和核间同步几个位置检查。

  一、TASKING怎么配置多核AURIX工程

 

  创建工程时先确定使用一个All cores工程,还是给每个核心建立独立工程。一个应用统一管理多个核心时,可以直接选择【All cores】;各核心需要独立代码、main函数和数据空间时,则可以建立Core 0、Core 1等独立工程并建立项目引用。

 

  1、创建All cores多核工程

 

  ①进入【File】→【New】→【TASKING TriCore C/C++Project】。

 

  ②选择【TASKING TriCore Application】下需要使用的工程类型。

 

  ③进入【TriCore Project Settings】。

 

  ④在【Processor selection】中选择实际使用的AURIX型号,例如TC3xx系列对应器件。

 

  ⑤在【Multi-core configuration】中选择【All cores】。

 

  ⑥勾选【Add startup file(s)to the project】。

 

  ⑦勾选【Add linker script file to the project】。

 

  ⑧完成创建后检查工程中是否已经加入各核心对应的【cstart】启动文件。

 

  ⑨检查工程目录中的【.lsl】文件是否已经生成。

 

  【All cores】会让链接器按照多核环境处理程序,但它并不会自动表示TC1、TC2一定会在运行时被拉起。其他核心是否启动,还要继续配置Startup Configuration。

 

  2、在Startup Configuration中启动其他核心

 

  ①选中工程,进入【Project】→【Properties for】当前工程。

 

  ②展开【C/C++Build】。

 

  ③打开【Startup Configuration】。

 

  ④切换到【core tc0】页面。

 

  ⑤找到【Start TC1】。

 

  ⑥项目使用TC1时勾选【Start TC1】。

 

  ⑦继续勾选需要使用的【Start TC2】【Start TC3】等核心。

 

  ⑧检查各核心页面中的【Initialize user stack pointer】和【Initialize interrupt stack pointer】。

 

  ⑨检查【Initialize and clear C variables】等启动初始化项目是否符合当前工程。

 

  ⑩点击【Apply and Close】,再执行一次完整重建。

 

  AURIX多核工程由TC0负责启动其他TriCore核心。即使创建项目时选择了All cores,TC1、TC2对应的Start选项仍可能没有打开,这也是多核工程只运行TC0时要先检查的位置。

 

  3、检查LSL中的各核内存布局

 

  ①进入工程属性,打开【C/C++Build】→【Settings】。

 

  ②找到【Linker】→【Script File】。

 

  ③确认实际使用的是当前工程的【.lsl】文件。

 

  ④打开LSL,检查TC0、TC1、TC2对应的PSPR、DSPR和栈区域。

 

  ⑤确认各核心的【ustack_tc0】【ustack_tc1】【ustack_tc2】没有发生地址重叠。

 

  ⑥检查核私有代码是否放入对应核心可以执行的存储区域。

 

  ⑦共享变量需要被多个核心访问时,检查其是否按照共享数据处理。

 

  ⑧重新链接工程后打开【.map】或【.mapxml】文件,检查各Section的实际地址。

 

  TASKING还支持【share】【private n】【clone】等Code Core Association和Data Core Association。分配核心私有代码或数据时,要同时确认编译阶段的Core Association和LSL最终定位结果。

 

  二、TASKING多核工程启动顺序异常如何排查

 

  多核启动异常时,可以先从TC0开始跟踪。TC0自己的初始化正常,但TC1、TC2始终没有进入对应启动入口,更偏向Start选项或入口配置;其他核心已经启动,却一直卡在等待位置,则继续检查各核初始化进度和同步条件。

 

  1、TC1或TC2完全没有启动

 

  ①进入【C/C++Build】→【Startup Configuration】。

 

  ②切换到【core tc0】。

 

  ③重新检查【Start TC1】【Start TC2】是否勾选。

 

  ④检查工程中是否存在目标核心需要的【cstart_tc1】【cstart_tc2】启动代码。

 

  ⑤打开链接Map文件。

 

  ⑥查找TC1的启动入口【_start_tc1】。

 

  ⑦使用TC2时继续查找【_start_tc2】。

 

  ⑧确认这些入口已经被链接到有效代码地址。

 

  ⑨在【_start_tc1】和【_start_tc2】附近设置断点重新启动。

 

  ⑩如果TC0已经运行,而目标入口始终没有命中,再回到TC0启动代码检查核心启动动作。

 

  TASKING默认启动代码会从TC0引用其他核心的启动入口,所以入口符号不存在、启动文件没有加入或Start开关没有启用,都可能让从核保持未启动状态。

 

  2、从核启动后一直停在初始化阶段

 

  ①分别在【_start_tc1】【_start_tc2】设置断点。

 

  ②从复位状态重新运行程序。

 

  ③确认每个核心都能进入自己的启动代码。

 

  ④查看各核心【PC】和【SP】。

 

  ⑤检查SP是否落在本核心配置的User Stack范围。

 

  ⑥继续单步检查C变量初始化、CSA、Trap Vector和Interrupt Vector设置。

 

  ⑦某一核心停在等待循环时,查看它正在等待哪个共享标志。

 

  ⑧切换到其他核心,检查负责修改该标志的代码是否已经执行。

 

  ⑨核对共享标志所在内存是不是各核心都能访问的区域。

 

  多核启动代码中加入同步后,如果某个核心没有启动或共享数据被错误放入Core Private区域,其他核心就可能一直停在等待条件里。

  3、TC1、TC2执行顺序和设计不一致

 

  ①先确认程序是否真的要求TC1必须晚于TC2或TC2必须等待TC0完成某项初始化。

 

  ②不要只依赖各核心被启动指令调用的先后顺序控制业务执行。

 

  ③在TC0完成系统级初始化后设置明确的共享状态标志。

 

  ④让TC1、TC2在进入本核业务代码前检查对应同步状态。

 

  ⑤检查该同步对象是否使用共享内存。

 

  ⑥确认编译器不会把核间同步变量当成普通不变数据处理。

 

  ⑦检查Cache和内存访问方式是否与当前同步实现一致。

 

  ⑧重新运行后分别在各核业务入口设置断点,检查实际放行顺序。

 

  多核CPU被释放运行以后,各核心执行进度会受到当前指令、内存访问和中断影响。涉及严格先后关系时,应通过明确的核间同步控制,而不能只根据“先启动哪个核心”推断后续执行顺序。

 

  三、启动配置正常但多核仍异常怎么继续检查

 

  Startup Configuration没有发现问题后,可以继续看代码和数据的Core Association、链接结果以及调试器状态。尤其是从单核工程改成多核工程时,旧LSL和本地RAM分配很容易留下不适合多核运行的设置。

 

  1、检查代码和数据的Core Association

 

  ①进入【C/C++Compiler】→【Allocation】。

 

  ②查看当前【Code core association】。

 

  ③检查【Data core association】。

 

  ④多个核心共同执行的代码确认使用共享方式。

 

  ⑤只允许某一个核心执行的代码检查是否被配置为对应【private n】。

 

  ⑥各核需要独立实例的数据检查是否应该使用【clone】。

 

  ⑦检查共享控制变量有没有错误进入某一核心的Private数据区。

 

  ⑧重新Build后用Map文件确认实际Section位置。

 

  代码被分给TC1,实际却由TC0执行,或者同步变量被放入只有某一个核心正常使用的本地数据区域,都可能表现成启动后Trap、数据不一致或同步失败。

 

  2、检查自定义LSL和旧工程配置

 

  ①确认当前TASKING版本。

 

  ②检查项目是否沿用了旧版本工具链中的自定义LSL。

 

  ③和当前器件默认LSL对照TC0、TC1、TC2内存定义。

 

  ④检查各核心User Stack和Interrupt Stack定义。

 

  ⑤检查启动入口相关符号是否仍然存在。

 

  ⑥较新TriCore工具链使用栈估算时,再检查其他核心对应的Entry Points。

 

  ⑦重新生成一份当前版本默认LSL进行对照。

 

  ⑧只把项目真正需要的内存修改逐项迁回自定义LSL。

 

  工具链升级后直接继续使用较早版本的LSL,有时会遗漏后来增加的栈入口或多核定义。遇到升级后才出现的多核异常,可以优先做一次默认脚本对照。

 

  3、逐核断点确认最终启动路径

 

  ①在TC0启动入口设置断点。

 

  ②在【_start_tc1】和【_start_tc2】分别设置断点。

 

  ③再给每个核心的业务入口设置断点。

 

  ④执行目标板复位。

 

  ⑤确认TC0先进入自身启动代码。

 

  ⑥继续运行并观察TC1、TC2是否进入对应启动入口。

 

  ⑦记录每个核心停止时的【PC】【SP】和当前调用位置。

 

  ⑧找到第一个没有按照设计继续执行的核心,再检查这一核心对应的Startup Configuration、LSL和同步条件。

 

  总结

 

  TASKING配置AURIX多核工程时,选择All cores只是建立多核编译和链接环境,其他核心是否实际启动还取决于TC0的启动配置。出现启动顺序异常后,可以从各核启动入口开始逐级跟踪,再结合LSL内存布局、Core Association和核间同步判断问题来源。对执行顺序有明确要求的功能,应由同步机制控制各核心进入业务代码的时机。如需进一步了解TASKING AURIX多核工程配置、多核启动与核间同步异常排查方法,欢迎联系咨询。

135 2431 0251