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状态二

相关推荐
Jerry丶Li38 分钟前
二十三、STM32的ADC(三)(ADC多通道)
stm32·单片机·嵌入式硬件
d111111111d1 小时前
STM32外设学习--TIM定时器--编码器接口(程序)
笔记·stm32·嵌入式硬件·学习
辰哥单片机设计1 小时前
STM32项目分享:水质检测系统(升级版)
stm32·单片机·嵌入式硬件
电子科技圈6 小时前
XMOS与飞腾云联袂以模块化方案大幅加速音频产品落地
经验分享·嵌入式硬件·mcu·自然语言处理·音视频·腾讯会议·游戏机
Tracy9736 小时前
XMSRC4194_VC1:4通道192KHz ASRC音频采样率转换器产品介绍
嵌入式硬件·音视频·智能硬件·xmos模组固件
xiaotianyun887 小时前
NCP13992 CS 分压计算
单片机·嵌入式硬件·ncp13992
偶像你挑的噻8 小时前
Linux应用开发-17-套接字
linux·网络·stm32·嵌入式硬件
Msshu1239 小时前
PD快充诱骗芯片 XSP15 支持获取快充电压可与外部MCU共用D+D-网络与电脑传输数据
单片机·嵌入式硬件
brave and determined9 小时前
MCU学习Day24——STM32G030多路ADC DMA采集深度解析:完全可配置序列器与不完全可配置序列器的陷阱与抉择
stm32·单片机·嵌入式硬件·dma·adc·hal·多通道采集
d111111111d9 小时前
通过操作地址,来进行STM32的写入GPIO端口值
stm32·单片机·嵌入式硬件