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

相关推荐
深圳市青牛科技实业有限公司33 分钟前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比1 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理
LightningJie2 小时前
STM32中ARR(自动重装寄存器)为什么要减1
stm32·单片机·嵌入式硬件
西瓜籽@2 小时前
STM32——毕设基于单片机的多功能节能窗控制系统
stm32·单片机·课程设计
远翔调光芯片^138287988724 小时前
远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!
科技·单片机·智能家居·能源
极客小张5 小时前
基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路
stm32·单片机·嵌入式硬件·mqtt·sqlite·毕业设计·智能充电桩
m0_739312878 小时前
【STM32】项目实战——OV7725/OV2604摄像头颜色识别检测(开源)
stm32·单片机·嵌入式硬件
嵌入式小章8 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
TeYiToKu9 小时前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
基极向上的三极管10 小时前
【AD】3-4 在原理图中放置元件
嵌入式硬件