Renesas MCU之FreeRTOS的应用

目录

概述

[1 FSP配置FreeRTOS](#1 FSP配置FreeRTOS)

[1.1 软件版本信息](#1.1 软件版本信息)

[1.2 配置FreeRTOS](#1.2 配置FreeRTOS)

[2 FreeRTOS的Task](#2 FreeRTOS的Task)

[2.1 FSP下的项目结构](#2.1 FSP下的项目结构)

[2.2 Task代码](#2.2 Task代码)

[2.2.1 Task测试案例配置](#2.2.1 Task测试案例配置)

[2.2.2 测试代码实现](#2.2.2 测试代码实现)

[3 自定义Task](#3 自定义Task)

[3.1 编写代码](#3.1 编写代码)

[3.2 测试函数](#3.2 测试函数)

[4 测试](#4 测试)

[4.1 Task断点测试](#4.1 Task断点测试)

[4.2 板卡运行测试](#4.2 板卡运行测试)


概述

本文主要介绍在Renesas MCU中使用FreeRTOS,包括使用FSP配置FreeRTOS的方法,包括使用FSP创建Task,用户自定义task。还通过改变两个LED的状态来验证task的工作流程。

1 FSP配置FreeRTOS

1.1 软件版本信息

软硬件信息 版本信息
Renesas MCU R7FA4M2AD3C
Keil MDK ARM 5.38
FSP 版本 5.3.0
调试工具:st-link ST-LINK/V2-1

注意:

在Keil MDK中可以更改FSP的版本,方法如下

1.2 配置FreeRTOS

1)打开配置项目界面,选择FreeRTOS的版本和FSP的版本

配置完成后,进入到该页面,只能选择静态内存,完成基本配置项目。

2) 在Stacks面板上创建一个线程

在Thread面板上修改task的名称,使其符合工程的应用特性。

完成以上参数配置之后,就可以生成项目

2 FreeRTOS的Task

2.1 FSP下的项目结构

1)生成项目

点击Generate Project content,就能生成项目,在Console界面看见项目相关的信息

生成项目之后,就可以编译项目

2 )Task相关的代码

FSP配置项目之后,如果在FSP中配置了thread,会在Flex Software库文件中生成task相关的代码

2.2 Task代码

2.2.1 Task测试案例配置

在main_task_entry.c下的代码时FSP自动生成的,user可以在该task中添加和项目相关的代码,笔者以控制一个LED为例,验证Task的运行状态。

1)IO相关的配置,笔者的板卡上使用P405,P404,P002

2)FSP配置IO

2.2.2 测试代码实现

在main_task_entry中实现500ms控制LED1的状态翻转功能。

代码第2行: 引用LED相关配置的头文件

代码第12行:触发LED翻转

代码第13行:实现500ms延时

实例代码:

cpp 复制代码
#include "main_task.h"
#include "bsp_led.h"
/* Main Task entry function */
/* pvParameters contains TaskHandle_t */
void main_task_entry(void * pvParameters)
{
    FSP_PARAMETER_NOT_USED(pvParameters);

    /* TODO: add your own code here */
    while(1)
    {
        LED1_TOGGLE;
        vTaskDelay(500);
    }
}

3 自定义Task

3.1 编写代码

代码功能介绍:

1)定义task相关的栈,thread的object

2)定义Task执行函数

3)创建task函数

cpp 复制代码
 /*
 FILE NAME  :  user_task.c
 Description:  user task library 
 Author     :  tangmingfei2013@126.com
 Date       :  2024/06/03
 */
#include "user_task.h" 
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "bsp_led.h"

static TaskHandle_t mainThread;
static StaticTask_t mainThread_memory;
#if defined(__ARMCC_VERSION)           /* AC6 compiler */
static uint8_t mainThread_stack[1024] BSP_PLACE_IN_SECTION(BSP_UNINIT_SECTION_PREFIX ".stack.thread") BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT);
#else
static uint8_t mainThread_stack[1024] BSP_PLACE_IN_SECTION(BSP_UNINIT_SECTION_PREFIX ".stack.mainThread") BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT);
#endif

static const rm_freertos_port_parameters_t userThread_parameters =
{
    .p_context = (void *) NULL,
};


static void userThread_func(void * pvParameters)
{
    FSP_PARAMETER_NOT_USED(pvParameters);
    /* TODO: add your own code here */
    while(1)
    {
        vTaskDelay(200);
        LED2_TOGGLE;
    }
}

void user_createTask( void )
{
    mainThread = xTaskCreateStatic(
                                    userThread_func,
                                    (const char *)"user_createTask",
                                    1024/4,                           // In words, not bytes
                                    (void *) &userThread_parameters,  //pvParameters
                                    1,
                                    (StackType_t *)&mainThread_stack,
                                    (StaticTask_t *)&mainThread_memory);
}
 
 
/* End of this file */ 

3.2 测试函数

代码33行:延时200ms

代码34行:实现LED2状态翻转

4 测试

4.1 Task断点测试

在userThread_func中添加一个断点,快速运行程序,观察断点情况

4.2 板卡运行测试

下载代码到板卡中,快速运行代码,观察板卡上LED的运行情况

1)task触发led状态一

2)task触发led状态二

相关推荐
Devlab2 小时前
LVGL设计大师——网页版anyui来了!!
嵌入式硬件·物联网·低代码·ui·iot
Dr.kangder6 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
zlinear数据采集卡7 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛139246256737 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Rocktech_ruixun9 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
振南的单片机世界10 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
Lzh编程小栈10 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun11 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
水果里面有苹果11 小时前
28-DRV8825PWPR步进电机驱动器
单片机
恒锐丰科技韩生11 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程