您现在所在位置:首页>>新闻中心>>常见问题

公司资讯

行业动态

常见问题

如何将AURIX TC4x工程从ADS Limited移植到SmartCode

发布日期:2024-11-21 07:37:24浏览次数:234

概述

   英飞凌新一代的AURIX™ TC4x系列芯片是一个异构多核芯片,最多可搭载6个增强型TriCore™ V1.8P内核,支持虚拟化,主频400MHz,个别型号可达500MHz;具有一个基于新思ARC内核的并行处理单元PPU,在处理快速向量运算、基础神经网络算法及一些其它复杂算法上有着巨大优势;具有一个基于TriCore1.8内核的信息安全实时模块CSRMGTM的版本升级到4.1,仍然保留了基于8051架构的SCR内核(详见图 1)。

7ecea059b98b68c137567f24b06e32ce.png

                                                       1英飞凌TC4x芯片架构

    TASKING SmartCode是市面上最早推出的可以全面支持TC4x系列所有内核架构的编译器工具集,符合信息安全和功能安全的需求,可获得功能安全和信息安全标准的认证。ADSAURIX Development StudioLimited是英飞凌基于SmartCode进行精简定制的非商用版本,性能上做了裁剪,内核方面仅支持TriCore主核和PPU

979c8c7cb9c2b23e5d2449ac8df9e656.png

                        2 SmartCode的架构图

  随着英飞凌TC4x系列芯片的推广,不少工程师拿到了Demo板和基于ADS limited的代码,代码移植到SmartCode的过程中经常会遇到代码编译报错的问题。为解决此类问题,方便工程师专注于应用程序的开发,本文总结了代码移植过程中的必要操作,以及可能的报错和解决方法。

工程移植

      TASKING SmartCodeADS Limited虽然同出一源,但在细节上有些不同,因此ADS的工程如果直接导入到SmartCode会报错。工程移植,实际上需要新建一个TASKING SmartCode的工程,然后将ADS Limited工程中的源文件和链接脚本文件(.lsl文件)添加到新建工程当中。以TriCore工程为例,具体的步骤如下:

2.1 新建工程

  打开软件,点击“New” à选择“TASKING TriCore C/C++ Project”(见图 3),然后弹出如图 4所示的窗口。在“Project name”栏目内填写名字,工程类型选择“Empty Project”,然后点击“Next”进行下一步。

a2180bd4c0c9de9a6c0447994d527816.png

                             图3 选择“TASKING TriCore C/C++ Project”

100a708bdc9df507e5255fa6c03a5578.png

                                              图4 工程创建窗口

   切换到如图5所示窗口。在这个窗口中,选择芯片类型,去除“Actions”的所有选项,不使用默认的启动文件和链接脚本文件,多核配置项根据需要可选择“All cores”,然后点击“Finish”完成工程的创建工作。

972a530ae6a0c438c7ac0f3fcbab6187.png

                    图5 工程设置

  此时这只是一个空白工程,需要将ADS工程中的源文件和LSL文件添加到新建的工程中。方法:选定文件进行复制,然后在TASKING SmartCode的工程窗口中右键点击目标工程,然后选择“Paste”,将文件都添加到工程中去。这里注意,只复制源文件和TASKING格式的lsl文件,即红框选取的部分。一定不要选择TASKING_Debug文件夹下的内容。

fe59b1e0de7a6c0bc60d09fb5d1954ea.png

      图 6 从ADS工程复制到SmartCode工程的必要文件

  接下来展开Libraries文件夹(见图7),可以见到PPUArcEV)和SCR的代码。SmartCode中,PPUSCR代码需要用不同的编译器去处理,我们新创建的TriCore工程只能使用TriCore的代码,删除库中所有ArcEVScr的代码。

02262d1ab39158da9a9403dc3e83ac91.png

                图7 展开Libraries文件夹

2.2 工程配置

   接下来需要对工程属性进行配置,完成最基本的配置,工程才可以正常的进行编译。打开Properties选择C/C++ Build à Setting,打开编译器的设置选项,按步骤设置以下几个必须配置项。

2.2.1 添加头文件的路径

      TASKING SmartCode仍然是手动配置头文件,给用户一个灵活的选择。在编译器的选项中找到“Include Paths”,点击(见图8)小红框内的加号图标,添加头文件。之后会弹出一个小窗口“Add Directory path”,然后点击“Workspace”,选定好工程,展开头文件所在的每一个文件夹,如果电脑有小键盘,可以使用“ * ”键(乘号键),一次性展开。

a26d52929a08191230f5d848d8c40ab5.png

                                                            图8 头文件包含路径添加

   选择好每一个展开的文件夹,保证没有遗漏(见图9)。注意,如果已经尝试编译过,不要选取“Debug”文件夹,也不要选取“.ads”文件夹。

73dffb49b7615a787630271912079918.png

                 图9 文件夹选择


2.2.2 添加链接脚本文件

   打开Linker选项,找到选择“Script File”添加脚本文件.lsl的路径,点击“Browse”添加.lsl文件路径。建议,添加之后将绝对路径修改成相对路径,使用“..”代替工程所在的绝对路径。

b92e43d63769a682b98f1c0c5bee9ca7.png

                                                 图10 添加LSL文件

  如果没有在工程中添加.lsl文件,在链接的阶段会出现如图11所示的报错:

4694a7be9210442eec4ac5250a8194d8.png

                     图11 没有链接脚本文件的报错

2.2.3 设置用户模式

   在ADS Limited工程的代码当中,启动文件调度了Ifx_Ssw_Infra.c文件中的一个函数void Ifx_Ssw_disableVirtualization(void),这个函数操作了虚拟机。所以必须使能TC4x芯片的虚拟机特性,用户模式要设置成Hypervisor模式。如需了解更多细节,请阅读用书册的相关内。如图12添加“--user-mode=hypervisor”。

d50888010c5c853fda2a59a28702a592.png

                                                                           图12 配置Hypervisor用户模式


   假如没有将用户模式配置成Hypervisor,工程进行“Build”之后,会出现如图13所示的报错。

2778114bf3ed3e98a8abde9de4ecb4c9.png

                            图13 没有配置Hypervisor报错信息


2.2.4 添加C++的库

      TASKING SmartCode在工程中没有任何C++代码时,不会加载C++的库,而代码中调用了C++的初始化,在Linker选项中手动添加“--munch -lcxxx_fpu -lcpx_fpu”,否则也会引发报错。

0ba88d9460cf38afeaf4df21d42e35f1.png

                                                            图14 添加C++的库

165c053e1ceec2dd42db77a3f5edd327.png

                                                           图15 无C++库报错信息

2.2.5 小结

   完成以上设置之后,工程可以正常进行编译,不会产生报错。软件工程师可以在此基础上使用TASKING Smart Code进行下一步开发或者评估的工作。

010-69284730