1 概述
英飞凌新一代的AURIX™ TC4x系列芯片是一个异构多核芯片,最多可搭载6个增强型TriCore™ V1.8P内核,支持虚拟化,主频400MHz,个别型号可达500MHz;具有一个基于新思ARC内核的并行处理单元PPU,在处理快速向量运算、基础神经网络算法及一些其它复杂算法上有着巨大优势;具有一个基于TriCore1.8内核的信息安全实时模块CSRM,GTM的版本升级到4.1,仍然保留了基于8051架构的SCR内核(详见图 1)。
图1英飞凌TC4x芯片架构
TASKING SmartCode是市面上最早推出的可以全面支持TC4x系列所有内核架构的编译器工具集,符合信息安全和功能安全的需求,可获得功能安全和信息安全标准的认证。ADS(AURIX Development Studio)Limited是英飞凌基于SmartCode进行精简定制的非商用版本,性能上做了裁剪,内核方面仅支持TriCore主核和PPU。
图2 SmartCode的架构图
随着英飞凌TC4x系列芯片的推广,不少工程师拿到了Demo板和基于ADS limited的代码,代码移植到SmartCode的过程中经常会遇到代码编译报错的问题。为解决此类问题,方便工程师专注于应用程序的开发,本文总结了代码移植过程中的必要操作,以及可能的报错和解决方法。
2 工程移植
TASKING SmartCode和ADS Limited虽然同出一源,但在细节上有些不同,因此ADS的工程如果直接导入到SmartCode会报错。工程移植,实际上需要新建一个TASKING SmartCode的工程,然后将ADS Limited工程中的源文件和链接脚本文件(.lsl文件)添加到新建工程当中。以TriCore工程为例,具体的步骤如下:
2.1 新建工程
打开软件,点击“New” à选择“TASKING TriCore C/C++ Project”(见图 3),然后弹出如图 4所示的窗口。在“Project name”栏目内填写名字,工程类型选择“Empty Project”,然后点击“Next”进行下一步。
图3 选择“TASKING TriCore C/C++ Project”
图4 工程创建窗口
切换到如图5所示窗口。在这个窗口中,选择芯片类型,去除“Actions”的所有选项,不使用默认的启动文件和链接脚本文件,多核配置项根据需要可选择“All cores”,然后点击“Finish”完成工程的创建工作。
图5 工程设置
此时这只是一个空白工程,需要将ADS工程中的源文件和LSL文件添加到新建的工程中。方法:选定文件进行复制,然后在TASKING SmartCode的工程窗口中右键点击目标工程,然后选择“Paste”,将文件都添加到工程中去。这里注意,只复制源文件和TASKING格式的lsl文件,即红框选取的部分。一定不要选择TASKING_Debug文件夹下的内容。
图 6 从ADS工程复制到SmartCode工程的必要文件
接下来展开Libraries文件夹(见图7),可以见到PPU(ArcEV)和SCR的代码。SmartCode中,PPU和SCR代码需要用不同的编译器去处理,我们新创建的TriCore工程只能使用TriCore的代码,删除库中所有ArcEV和Scr的代码。
图7 展开Libraries文件夹
2.2 工程配置
接下来需要对工程属性进行配置,完成最基本的配置,工程才可以正常的进行编译。打开Properties选择C/C++ Build à Setting,打开编译器的设置选项,按步骤设置以下几个必须配置项。
2.2.1 添加头文件的路径
TASKING SmartCode仍然是手动配置头文件,给用户一个灵活的选择。在编译器的选项中找到“Include Paths”,点击(见图8)小红框内的加号图标,添加头文件。之后会弹出一个小窗口“Add Directory path”,然后点击“Workspace”,选定好工程,展开头文件所在的每一个文件夹,如果电脑有小键盘,可以使用“ * ”键(乘号键),一次性展开。
图8 头文件包含路径添加
选择好每一个展开的文件夹,保证没有遗漏(见图9)。注意,如果已经尝试编译过,不要选取“Debug”文件夹,也不要选取“.ads”文件夹。
图9 文件夹选择
打开Linker选项,找到选择“Script File”添加脚本文件.lsl的路径,点击“Browse”添加.lsl文件路径。建议,添加之后将绝对路径修改成相对路径,使用“..”代替工程所在的绝对路径。
图10 添加LSL文件
如果没有在工程中添加.lsl文件,在链接的阶段会出现如图11所示的报错:
图11 没有链接脚本文件的报错
2.2.3 设置用户模式
在ADS Limited工程的代码当中,启动文件调度了Ifx_Ssw_Infra.c文件中的一个函数void Ifx_Ssw_disableVirtualization(void),这个函数操作了虚拟机。所以必须使能TC4x芯片的虚拟机特性,用户模式要设置成Hypervisor模式。如需了解更多细节,请阅读用书册的相关内。如图12添加“--user-mode=hypervisor”。
图12 配置Hypervisor用户模式
假如没有将用户模式配置成Hypervisor,工程进行“Build”之后,会出现如图13所示的报错。
图13 没有配置Hypervisor报错信息
2.2.4 添加C++的库
TASKING SmartCode在工程中没有任何C++代码时,不会加载C++的库,而代码中调用了C++的初始化,在Linker选项中手动添加“--munch -lcxxx_fpu -lcpx_fpu”,否则也会引发报错。
图14 添加C++的库
图15 无C++库报错信息
2.2.5 小结
Copyright © 2022 恒远润通 京ICP备2024092605号