0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MM32F5270 MCU实现FreeRTOS移植

灵动MM32MCU 来源:灵动MM32MCU 2024-08-22 10:04 次阅读

1简介

嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用 CPU 的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。

FreeRTOS是一个RTOS类的嵌入式实时操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

MM32F5270是一款搭载了安谋科技 Arm Cortex-M33/STAR-MC1内核的MCU产品,其工作频率可达 120MHz,具有256KB Flash和192KB RAM,内置单精度浮点运算单元(Floating Point Unit,FPU),并支持数字信号处理(Digital Signal Processing, DSP)扩展,提供实时处理和高级中断处理能力,实现性能和电源效率的平衡,适合用于各种类型的实时控制应用。

本系列微课堂基于MM32F5270 MCU初步学习使用FreeRTOS开发,不足之处欢迎指出。

2FreeRTOS移植

2.1 源码下载

点击官网标题下的Download可以去下载FreeRTOS源码,当前版本是V10.5.1(task.h文件中有注明版本)。

wKgZombGnNqAeLj4AAFxHcIfOH0371.jpg

内容如下:

wKgZombGnNuAWwk2AAHfI6BdHDc720.jpg

包括3个文件夹、4个HTML格式的网页和2个.txt文档,重点在于上面的FreeRTOS 和FreeRTOS-Plus两个文件夹,其中FreeRTOS文件夹的内容就是FreeRTOS内核源码,而Plus版本还包括内核以外的组件和第三方补充,对于FreeRTOS移植,我们只需要用到FreeRTOS内核源码就行了。

FreeRTOS文件夹内容:

wKgaombGnNqAVLVfAAEe9ID7YDI295.jpg

Demo文件夹里面是 FreeRTOS的例程;

License文件夹里面是相关的许可信息

Source文件夹是FreeRTOS源码;

Test文件夹是FreeRTOS的相关测试。

Source文件夹内容:

wKgZombGnQqAVRx5AAIVcjHncjs699.jpg

其中.c文件就是FreeRTOS的源码文件,include文件夹是源码包含的一些头文件,portable文件夹是FreeRTOS操作系统和具体硬件的连接层。

portable文件夹内容:

wKgaombGnQqAUmtyAAMXFOPVB9o330.jpg

不同MCU内核及编译环境对应的portable文件有所差异,MemMang文件跟内存管理相关。

2.2 移植

移植 FreeRTOS首先需要一个基础工程,可以参考MM32F5270 LibSamples创建工程,或直接在任一例程基础上改动。

1) 向工程中添加FreeRTOS源码

在工程中新建一个名为FreeRTOS的文件夹:

wKgZombGnQqADI6oAAC38O8ipBk302.jpg

将FreeRTOS相关文件复制到此文件夹下:

wKgaombGnQqAHY_rAAFzne34Hk0504.jpg

portable文件夹只留下GCC和MemMang两个文件夹,其他的都可以删除。

wKgZombGnQqAW0t1AABnMBzqZb4396.jpg

2) 向工程分组中添加文件

打开基础工程,新建分组 FreeRTOS_CORE 和 FreeRTOS_PORTABLE,然后向这两个分组中添加文件:

wKgaombGnQqAKb8DAAIWqJ5ojAY579.jpg

port.c文件位于portable\GCC\ARM_CM33_NTZ\non_secure文件夹。

heap_4.c文件位于portable\MemMang文件夹,提供RTOS内核所需的内存分配。

3) 添加头文件路径

添加FreeRTOS源码的头文件路径:

wKgaombGnQqAc2jHAAIEFVpoy_0818.jpg

4) 加入FreeRTOSConfig.h文件

FreeRTOSConfig.h是FreeRTOS的配置文件,通过宏定义来完成对系统的配置和裁剪。可以自己创建(参考 http://www.freertos.org/a00110.html),也可以从FreeRTOS的官方移植工程中复制。这里复制FreeRTOSDemoCORTEX_MPU_M33F_Simulator_Keil_GCCConfigFreeRTOSConfig.h。

5)修改重复定义的函数

FreeRTOS在port.c中定义了SysTick_Handler()、SVC_Handler()和PendSV_Handler()这三个函数,需要将工程mm32f5270_it.c中定义的三个同名函数注释掉。

6) 编译和修改

编译后如果一些报错或警告,根据提示修改即可,一般和Contex-M33的特定配置选项有关,如configENABLE_MPU、configENABLE_FPU、configENABLE_TRUSTZONE 根据实际应用情况来适配。

另外还要在FreeRTOSConfig.h修改如下宏定义:

设置configCPU_CLOCK_HZ为120000000,和当前MCU配置的系统时钟频率一致。

设置configTICK_RATE_HZ为1000,即FreeRTOS时钟节拍周期是1ms。

wKgaombGnUuAAOyQAAEzAoWALxQ974.jpg

3验证

开发板使用Mini-F5277-OB,编写简单的FreeRTOS应用代码,测试FreeRTOS的移植是否成功。设计四个任务:start_task()、led1_task ()、led2_task ()和 float_task(),功能如下:

start_task():用来创建其他三个任务。

led1_task ():控制 LED1 的闪烁,提示系统正在运行。

led2_task ():控制 LED2 的闪烁。

float_task():浮点测试任务,用于测试FPU是否工作正常。

代码如下:

voidstart_task(void*pvParameters)
{
taskENTER_CRITICAL();

xTaskCreate((TaskFunction_t)led1_task,
(constchar*)"led1_task",
(uint16_t)LED1_STK_SIZE,
(void*)NULL,
(UBaseType_t)LED1_TASK_PRIO,
(TaskHandle_t*)&LED1Task_Handler);

xTaskCreate((TaskFunction_t)led2_task,
(constchar*)"led2_task",
(uint16_t)LED2_STK_SIZE,
(void*)NULL,
(UBaseType_t)LED2_TASK_PRIO,
(TaskHandle_t*)&LED2Task_Handler);

xTaskCreate((TaskFunction_t)float_task,
(constchar*)"float_task",
(uint16_t)FLOAT_STK_SIZE,
(void*)NULL,
(UBaseType_t)FLOAT_TASK_PRIO,
(TaskHandle_t*)&FLOATTask_Handler);

vTaskDelete(StartTask_Handler);
taskEXIT_CRITICAL();
}


voidled1_task(void*p_arg)
{
while(1)
{
PLATFORM_LED_Toggle(LED1);
vTaskDelay(100);
}
}


voidled2_task(void*p_arg)
{
while(1)
{
PLATFORM_LED_Toggle(LED2);
vTaskDelay(500);
}
}


voidfloat_task(void*p_arg)
{
staticfloatfloat_num=0.00;
while(1)
{
float_num+=0.01f;
printf("float_num=%.4f
",float_num);
vTaskDelay(1000);
}
}

主函数:

intmain(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

PLATFORM_Init();

xTaskCreate((TaskFunction_t)start_task,
(constchar*)"start_task",
(uint16_t)START_STK_SIZE,
(void*)NULL,
(UBaseType_t)START_TASK_PRIO,
(TaskHandle_t*)&StartTask_Handler);

vTaskStartScheduler();
}

程序执行情况:

板载LED1、LED2分别间隔100ms、500ms闪烁。

串口调试助手打印float_num的值不断增加,每次增加0.01,工程和KEIL已经设置使用FPU,调试观察会用到浮点寄存器s0、s2和浮点指令VLDR、VADD.F32。

与程序设置相符,FreeRTOS移植成功。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16956

    浏览量

    350135
  • 嵌入式
    +关注

    关注

    5065

    文章

    18998

    浏览量

    302658
  • RTOS
    +关注

    关注

    21

    文章

    809

    浏览量

    119399
  • FreeRTOS
    +关注

    关注

    12

    文章

    483

    浏览量

    61966
  • 实时操作系统

    关注

    1

    文章

    196

    浏览量

    30736

原文标题:灵动微课堂 (第283讲)|基于MM32F5270移植FreeRTOS

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MM32F5270平台ADC注入通道的单周期采样的实现

    MM32F5270的ADC可配置4个注入通道来扩展转换通道,那么可进行转换的通道最多可达20个。
    的头像 发表于 06-01 17:25 1460次阅读
    <b class='flag-5'>MM32F5270</b>平台ADC注入通道的单周期采样的<b class='flag-5'>实现</b>

    MM32F5270开发板+Freertos(+1.8寸TFT)使用步骤介绍

    1、MM32F5270开发板+Freertos(+1.8寸TFT)使用步骤  最近一直在弄这个板子,但是中间遇到了很多问题还没解决,在这里先把之前做的一部分分享一下,  mindsdk  灵动官网
    发表于 08-31 15:17

    MM32F5270(STAR-MC1内核)RT-Thread完整版的移植教程

    基本把rtt移植mm32f5270中。移植验证在main.c中main函数添加点灯的代码。如果能够看到led在闪烁,就说明移植成功了。现象shell适配适配uart驱动
    发表于 12-23 17:17

    MM32F5270总线架构设计

    本文介绍了MM32F5270 中所采用的多并发总线架构,并通过带显示的音频播放器的实例说明了该架构在实际应用中所能达到的吞吐率提升效果。
    的头像 发表于 05-11 11:15 2137次阅读
    <b class='flag-5'>MM32F5270</b>总线架构设计

    基于MM32F5270控制器的I2S音频播放

    MM32F5270 系列控制器支持 I2S 总线接口,本章节在接下来会对 MM32F5270 I2S进行介绍,并使用 MM32F5270 和 CS4344 芯片进行 I2S 通信来演示播放一段声音。
    的头像 发表于 09-16 10:39 2222次阅读

    MM32F5270】Keil开发环境搭建

    本文是对MM32F5270相关的灵动官网资料和社区现有几篇环境搭建帖的整理和总结。详细且完整的记录了——如何从零搭建MM32F5270 Keil开发环境以及如何编译运行MM32F5270 SDK中
    的头像 发表于 11-06 16:14 2592次阅读
    【<b class='flag-5'>MM32F5270</b>】Keil开发环境搭建

    MM32F5270 产品手册(中文版)

    MM32F5270 产品手册(中文版)
    发表于 02-23 18:45 0次下载
    <b class='flag-5'>MM32F5270</b> 产品手册(中文版)

    MM32F5270 产品手册(英文版)

    MM32F5270 产品手册(英文版)
    发表于 02-23 18:45 0次下载
    <b class='flag-5'>MM32F5270</b> 产品手册(英文版)

    MM32F5270 用户手册(中文版)

    MM32F5270 用户手册(中文版)
    发表于 02-23 18:46 0次下载
    <b class='flag-5'>MM32F5270</b> 用户手册(中文版)

    MM32F5270 用户手册(英文版)

    MM32F5270 用户手册(英文版)
    发表于 02-23 18:46 0次下载
    <b class='flag-5'>MM32F5270</b> 用户手册(英文版)

    MM32F5270 勘误表(中文版)

    MM32F5270 勘误表(中文版)
    发表于 02-23 18:47 0次下载
    <b class='flag-5'>MM32F5270</b> 勘误表(中文版)

    MM32F5270 勘误表(英文版)

    MM32F5270 勘误表(英文版)
    发表于 02-23 18:48 0次下载
    <b class='flag-5'>MM32F5270</b> 勘误表(英文版)

    MM32F5270平台ADC注入通道的单周期采样的实现

    MM32F5270的ADC可配置4个注入通道来扩展转换通道,那么可进行转换的通道最多可达20个。
    的头像 发表于 05-26 09:31 668次阅读
    <b class='flag-5'>MM32F5270</b>平台ADC注入通道的单周期采样的<b class='flag-5'>实现</b>

    MM32F5270平台ADC注入通道的单周期采样的实现

    MM32F5270的ADC可配置4个注入通道来扩展转换通道,那么可进行转换的通道最多可达20个。
    的头像 发表于 05-26 09:32 877次阅读
    <b class='flag-5'>MM32F5270</b>平台ADC注入通道的单周期采样的<b class='flag-5'>实现</b>

    基于MM32F5270的I2S音频播放

    基于MM32F5270的I2S音频播放
    的头像 发表于 10-30 17:13 1105次阅读
    基于<b class='flag-5'>MM32F5270</b>的I2S音频播放