英飞凌 AURIX Development Studio工程移植到Hightec的方法

本文详细介绍了如何将AURIX Development Studio中的AURIX TC2XX/TC3XX单片机项目移植到Hightec编译器,包括新建Hightec工程、复制源码、配置头文件路径、选择启动文件和链接脚本等步骤,旨在帮助开发者在不同环境中顺利迁移项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 软件简介

AURIX™ Development Studio是英飞凌针对AURIX TC2XX/TC3XX系列单片机推出了一款免费的软件,集成了iLLD库,内置Tasking compiler和Tasking Debugger,但这两个模块只能用于非商业用途,可供学习和试用。iLLD库是英飞凌为TC2XX和TC3XX Tricore系列单片机提供的底层驱动库,有完善的使用手册,和较好的移植性。

Hightec是一款可以用来开发Aurix系列单片机的编译器,有免费版,可商用,集成GCC编译器,可用UDE进行调试。下载链接见官网:
https://free-entry-toolchain.hightec-rt.com/index.php

Hightec编译器不自带iLLD库,所以我们可以用AURIX DevelopmentStudio(后文简称ADS)来新建一个带iLLD库的工程,再移植到Hightec。

本文就来介绍一下具体的移植方法。

2. 移植方法

(1)新建一个ADS工程

以TC377为例,新建好的工程如下图所示:
在这里插入图片描述
简要介绍下各个文件夹所包含的内容:

  • Configurations:包含了一些芯片启动配置代码,如BMHD等
  • Debug:以Debug模式编译时生成的文件夹,包含生成的.o文件、hex文件、map文件等
  • Libraries:这个文件夹就是官方提供的库文件,包含了iLLD底层驱动库、启动代码SSW、寄存器定义,以及官方提供的一些常用系统接口函数,如延时、CRC等
  • CupX_Main.C就是各个CPU的main函数,MCU上电先由CPU0执行SSW中的启动代码,再依次启动其它CPU,跳转到各自的main函数。
  • *.lsl:这两个就是连接脚本,带Tasking的是ADS和Tasking编译器用的,带Gnuc的是GCC用的,一会我们一直到hightec的时候用的连接脚本就是Lcf_Gnuc_Tricore_Tc.lsl。

(2)新建一个Hightec工程

新建一个Hightec工程,选择TC377系列,勾选“Create Empty Project”:
在这里插入图片描述
新建好的Hightec工程如下图所示:
在这里插入图片描述

(3)复制源码

把源码从ADS文件夹复制到Hightec工程文件夹:

在这里插入图片描述
把工程主路径下的三个main.c文件复制到src文件夹下,测试的时候发现放到主目录下无法编译:
在这里插入图片描述
打开Hightec工程,点击F5可刷新工程,刷新后就可以看到复制过来的文件:
在这里插入图片描述

然后设置工程包含复制过来的文件,从ADS复制过来的源码文件和文件夹默认是不包含在工程里面的,也就是不进行编译,在复制过来的源码文件夹或文件上点击右键,选择“Exclude Form Build”,全部都取消勾选,再点击OK即可包含源码。
在这里插入图片描述

(4)添加头文件路径

点击“Project-Properties”,打开工程属性设置框,在如下位置添加包含源码的所有文件夹路径:
在这里插入图片描述

(5)配置启动文件

如下图所示,勾选不使用Hightec自带的启动代码,因为iLLD中集成了SSW启动代码,勾选之后可以从iLLD的_START函数启动。
在这里插入图片描述

(6)选择使用从ADS工程复制过来的链接脚本

在如下位置填写:"$ {workspace_loc:/$ {ProjName}/Lcf_Gnuc_Tricore_Tc.lsl}",以选用从ADS复制过来的链接脚本。【注意两个$ 后面有个空格,不然优快云网页显示会有错误,复制的时候注意删除
在这里插入图片描述
到此就完成了工程移植的所有必要步骤,下面再介绍一些可选的配置。

3. 其它配置项

(1)配置为ROM编译

Hightec工程默认是RAM编译,即编译到RAM中,我们要想让编译后的代码在Flash中运行,就需要配置为ROM编译,方法如下:
在这里插入图片描述

在这里插入图片描述
【注意:更改编译方式后,需要重新设置上文所述的头文件路径、链接脚本路径以及启动文件,头文件路径比较多可以从RAM复制过来】

(2)设置生成Hex文件

在图中位置可以添加PreBuild 步骤和PostBuild步骤,在PostBuild步骤中就有生成Hex文件的选项。添加后编译即可在编译文件夹下生成Hex文件:
在这里插入图片描述
此外还有一种方法:
在下图中的位置处输入:tricore-objcopy.exe -O ihex ${BuildArtifactFileBaseName}.elf ${BuildArtifactFileBaseName}.hex,也可以生成Hex文件:
在这里插入图片描述

(3)提高Hightec编译速度的两个方法

工程大了之后,Hightec的编译速度非常慢,有以下两种方式可以提高编译速度:

① 配置并行编译

在如下路径处可以开启多核编译,开启后编译速度能有效提高:
在这里插入图片描述

② 取消自动生成Makefile文件

在如下路径处可以取消自动生成MakeFile文件的勾选,这个选项勾选的话每次编译Hightec都会为每个源文件生成Makefile文件,会花费大量时间,取消勾选后不会重新生成,只进行编译。但需要注意的是,添加或删除源文件,或更改编译选项后,需要重新打开Makefile文件的生成至少一次,否则不会编译的时候还会用原来的Makefile文件。
在这里插入图片描述

<think>嗯,用户想了解如何将FreeRTOSSMP移植到InfineonTC397处理器上。首先,我需要回忆一下FreeRTOSSMP的基本概念和TC397的特性。FreeRTOSSMP是指支持对称多处理的操作系统版本,可以在多核处理器上运行任务。TC397英飞凌Aurix系列单片机,多核架构,通常有多个TriCore核,比如六个核,可能分为不同的类型,比如性能核和普通核。移植步骤的话,首先应该确认硬件和开发环境。用户需要安装合适的编译器,比如HighTecTasking,以及Infineon的开发工具包,如AURIXDevelopmentStudio。然后需要获取FreeRTOS的源代码,特别是SMP版本,因为标准版可能不支持多核。接下来,可能需要配置FreeRTOS的端口层,针对TC397的架构进行调整,包括上下文切换、中断处理、核间通信等。 注意事项方面,TC397是多核的,所以需要考虑任务调度在不同核上的同步问题,比如使用核间中断(ICR)或者共享内存。内存管理也很重要,每个核可能有自己的内存区域,需要正确配置堆栈和共享资源。此外,外设驱动可能需要适配,特别是与多核相关的部分,比如定时器、中断控制器等。调试时可能比较复杂,需要确保各个核之间的协调,避免竞争条件和死锁。用户可能需要更详细的步骤,比如具体的代码修改部分,如何配置任务优先级,如何分配任务到不同核心,启动流程是怎样的。另外,TC397的具体核间通信机制,比如使用消息队列或者信号量,需要如何实现。还有,是否有一些英飞凌提供的库或文档支持FreeRTOS的移植,可能需要查阅相关应用笔记或参考设计。 可能还需要考虑编译器相关的设置,比如链接脚本、启动文件,确保每个核的入口正确,初始化流程正确。中断向量表的配置也可能需要调整,以支持多核的中断分发。此外,FreeRTOS的调度器需要支持SMP,可能需要检查FreeRTOS的配置宏,如configNUMBER_OF_CORES,以及任务分配策略。用户可能遇到的问题包括核间通信的效率问题,任务迁移的开销,或者资源竞争导致的系统不稳定。这时候需要注意使用合适的同步机制,比如自旋锁或者互斥锁,并合理设计任务分配策略,避免频繁的核间任务迁移。同时,电源管理在多核系统中的协调也可能需要注意,特别是TC397的某些低功耗特性。最后,测试和调试阶段可能需要使用调试器同时监控多个核的状态,或者使用日志输出到不同的通道,帮助诊断问题。可能还需要性能分析,确保多核利用率合理,没有某个核成为瓶颈。 总结一下,步骤大概包括环境准备、获取源码、端口层适配、核间通信实现、驱动适配、配置调整、编译与调试。注意事项集中在多核同步、资源管理、调试方法等方面。需要确保用户按照步骤逐步进行,并参考英飞凌和FreeRTOS的官方文档解决具体问题。</think>### FreeRTOS SMP移植到Infineon TC397的详细步骤 #### 1. 硬件与开发环境准备 - **编译器选择**:推荐使用HighTec TriCore GCC或Tasking编译器,需配置多核编译选项[^2] - **开发工具**:安装AURIX Development Studio(ADS)或iLLD底层驱动库 - **调试工具**:使用DAP/JTAG调试器,支持多核同步调试 #### 2. FreeRTOS SMP源码获取 从FreeRTOS官网下载最新SMP分支代码: ```bash git clone https://github.com/FreeRTOS/FreeRTOS-Kernel --branch smp ``` #### 3. 多核启动配置 在`startup_tc397.c`中初始化所有CPU核: ```c void core1_main(void) { vPortStartFirstTask(); // 启动FreeRTOS调度器 while(1); } ``` 需在链接脚本中为每个核分配独立堆栈空间[^3] #### 4. 端口层适配 修改`port.c`实现以下功能: - 多核上下文切换(使用`MTCR`指令) - 核间中断(ICR)处理 - 原子操作实现(如`portATOMIC_SET()`) #### 5. 核间通信实现 使用AURIX的IPC机制: ```c #define IPC_CHANNEL 0 IfxIpc_sendMessage(IPC_CHANNEL, message); ``` #### 6. 驱动适配要点 - **定时器**:配置STM模块为系统时钟源 - **中断控制器**:设置SRI中断路由 - **内存保护**:配置每个核的DPR区域 ### 关键注意事项 1. **内存一致性**: - 使用`DCACHE_INVALIDATE()`确保数据缓存一致性 - 共享资源必须使用互斥锁: ```c xSemaphoreCreateMutex(); ``` 2. **任务分配策略**: ```c // 将任务绑定到Core2 xTaskCreateAffinitySet( task_func, "Task1", 512, NULL, 1, 0x04, &handle ); ``` 3. **调试技巧**: - 使用`DS-5 Debugger`同步观察所有核寄存器 - 在关键代码段插入跟踪标记: ```c __asm("debug"); // 触发调试事件 ``` 4. **性能优化**: - 通过`SPB`总线优化共享内存访问 - 设置`configUSE_CORE_AFFINITY`启用任务亲和性 ### 常见问题排查 | 现象 | 解决方法 | |-------|--------| | 核间任务不同步 | 检查IPC通道配置和中断优先级 | | 共享数据损坏 | 添加内存屏障指令`__ISYNC()` | | 系统时钟漂移 | 同步所有核的STM计数器 |
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值