
本文作者:Di Wang 英飞凌科技大中华区 CAE 客户支持工程师
最近在新闻中,大家了解到英飞凌为其AURIX™ TC3x微控制器(MCU)添加了对FreeRTOS的支持。借助实时操作系统(FreeRTOS),功能强大的微控制器 AURIX™ TC3xx MCU能够高效管理硬件和软件资源,确保任务的及时和可靠执行。FreeRTOS作为硬件和应用软件之间的中介,使开发者能够专注于应用代码,无需处理硬件的复杂性,从而实现应用代码的可移植性和可重用性,并缩短上市时间。
本文介绍了在 AURIX™ TC3xx 单片机上移植 FreeRTOS 实时操作系统的操作步骤,读者可以使用 Triboard 开发板和免费的 ADS 开发平台,快速移植 FreeRTOS 到自己使用的 TC3xx MCU上,创建任务并实现 LED 的闪灯演示。
1、前言
FreeRTOS是一款广泛使用的开源实时操作系统(RTOS),具有轻量级、模块化和易用的特点,适用于资源受限的嵌入式系统开发。它支持多任务调度、任务间通信和同步,并提供丰富的中间件支持,便于开发者快速构建高效、可靠的应用程序。
英飞凌的AURIX™ TC3x MCU采用符合ASIL-D/SIL-3标准的设计,满足汽车和工业市场的严格要求。它基于高性能的TriCore™架构,具备实时能力、先进的功能安全特性和功能可靠性,是安全关键应用的理想选择。FreeRTOS的可用性使客户能够在成熟且功能丰富的开源环境中快速构建应用程序。将FreeRTOS集成到AURIX™ TC3x MCU中,不仅能够助力汽车和工业市场的广大客户快速进行功能评估,而且为在非AUTOSAR项目中快速迁移应用代码提供了可能。
2、参考链接
3、准备 ADS 开发环境
ADS (AURIX™ Development Studio)是英飞凌推出的一个免费的集成开发环境,内嵌 Tasking 编译器的免费版本,并集成大量AURIX™ TC3xx 微控制器的例子工程。用户可以快速上手,通过导入不同模块的例子工程,编译并下载到开发板中,进行功能评估和开发。(下载链接)
如图所示:

4、准备 Triboard 开发板
ADS 开发环境支持各种 AURIX™ TC3xx MCU的开发板,比如Lite Kit、ShieldBuddy、TFT Kit或Triboard。本文基于 TC399 Triboard,其板载有8个 LED 供测试使用,本文代码使用 P33.4和 P33.5引脚来控制最左侧的LED1和LED2,实现闪烁演示。在下载程序之前,请使用电源线给 Triboard供电,并使用mini USB线连接开发板到PC机,在 PC 机上开启 ADS 集成开发环境。
如图所示:

5、打开一个例子工程
安装完成之后,用户可打开 ADS平台,在 File 菜单中选择 Import 导入,之后在例子工程的代码库中找到名为 STM_Interrupt_1 的例子工程,点击 Finish 完成,即可导入第一个例子工程。(注:TC397的工程可以使用在TC399的开发板上)。
如图所示:

打开工程后,可以在工程上点击右键,选择 Set Active Project,之后点击 Build Project 进行编译。编译之后,点击 Debug菜单进行下载调试。如果在Debug Configurations中没有合适的配置,请首先创建一个配置(使用默认配置在TASKING C/C++ Debugger中创建即可)。这里注意,编译前需修改 STM_Interrupt.c 文件中的 LED 引脚为 P33.4,以适配 TC399 Triboard 的 LED1 引脚。下载后,点击Resume运行,可以看到开发板上最左侧的LED灯会闪烁。这个工程是我们进行 FreeRTOS 移植的基础。
6、移植过程
在准备好了ADS开发环境、Triboard开发板,并下载成功 STM_Interrupt_1 例子工程后,即可开始我们的移植过程。
第一步:下载 FreeRTOS 版本 10.5.1 并解压缩
用户可以从 FreeRTOS 的官方网站获取源码,将解压后的 FreeRTOS 文件夹复制到 STM_INTERRUPT_1 例子工程的 OS/FreeRTOS/ 路径下。(下载链接)
第二步:整理 Portable 文件夹
打开 FreeRTOS/Portable/ 目录,删除所有文件夹,仅保留 MemMang 和 Tasking 文件夹。
第三步:port.c 和 portmacro.h
在 Tasking 文件夹中移除 ARM_CM4F 文件夹,创建一个名为 TC3 的新文件夹,该文件夹将包含两个文件:port.c 和 portmacro.h。(下载链接)
第四步:FreeRTOSConfig.h
将 FreeRTOSConfig.h 文件复制到 STM_INTERRUPT_1 例子工程的 Configurations/ 路径下。(下载链接)
第五步:修改 Ifx_Cfg.h
参考后面链接中的 Ifx_Cfg.h 文件,修改例子工程中的 Configurations/Ifx_Cfg.h 文件。(下载链接)
第六步:排除不必要的文件
打开 OS/FreeRTOS/portable/MemMang/ 目录,右键点击 heap_2.c 到 heap_5.c,选择 Resource Configuration,然后选择 Exclude from Build。这确保在构建过程中仅使用 heap_1.c
第七步:修改 Cpu0_Main.c 、 STM_Interrupt.c 和 STM_Interrupt.h
读者可以下载3个源文件并覆盖例子工程中的相应文件。(下载链接)
讲解:
在 Cpu0_Main.c 中,主要创建了2个任务 task_app_led1 和 task_app_led2,并启动操作系统的调度器,代码如下:

在 STM_Interrupt.c 中,对LED1和LED2引脚进行初始化,设置为输出模式,并给出了2个任务的具体实现,主要是定时翻转 LED1 和 LED2的引脚,代码如下:

在 STM_Interrupt.h中,对两个任务函数的原型给出了声明。
第八步:重新编译工程并下载
右键点击工程,选择「Clean Project」清除编译文件,之后重新「Build Project」,并在 Debug 菜单中点击 Debug,之后生成的程序会下载到 TC399 Triboard 开发板中并进入调试界面,在调试界面点击 「Resume」运行,观察开发板上的 LED1(P33.4)和 LED2(P33.5),它们将分别以 500ms 和 1000ms 的周期闪烁。
7、相关链接
来源:英飞凌
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。