当前位置: 首页 > news >正文

Renesas MCU之FreeRTOS的应用

目录

概述

1 FSP配置FreeRTOS

1.1 软件版本信息

1.2 配置FreeRTOS

2 FreeRTOS的Task

2.1 FSP下的项目结构

2.2 Task代码

2.2.1 Task测试案例配置

2.2.2 测试代码实现

3 自定义Task 

3.1 编写代码

3.2 测试函数

4 测试

4.1 Task断点测试

4.2 板卡运行测试


概述

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

1 FSP配置FreeRTOS

1.1 软件版本信息

软硬件信息版本信息
Renesas MCUR7FA4M2AD3C
KeilMDK ARM 5.38
FSP 版本5.3.0
调试工具:st-linkST-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延时

实例代码:

#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函数

 /*FILE NAME  :  user_task.cDescription:  user task library Author     :  tangmingfei2013@126.comDate       :  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);
#endifstatic 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,  //pvParameters1,(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状态二

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)
  • SAP HANA1709~2023版本Fiori激活简介
  • 远程连接路由器:方法大全与优缺点解析
  • 异步javascript
  • idea编码问题:需要 <标识符> 非法的类型 、需要为 class、interface 或 enum 问题解决
  • 自动化测试断言
  • 中介子方程十六
  • 【微信小程序开发实战项目】——如何去申请腾讯地图账号和在微信公众平台,配置request路径和添加地图插件
  • [Kubernetes] etcd 单机和集群部署
  • es6基础语法
  • docker-ce 和 docker-ee介绍版本介绍
  • MySQL数据库管理(一)
  • 2024年6月13日随笔
  • 拥抱数字世界|AI在娱乐行业的应用,娱乐新纪元已到来
  • 浅谈Web开发的三大主流框架:Angular、React和Vue.js
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CSS魔法堂:Absolute Positioning就这个样
  • C学习-枚举(九)
  • HashMap剖析之内部结构
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • yii2权限控制rbac之rule详细讲解
  • 回流、重绘及其优化
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 浏览器缓存机制分析
  • 那些被忽略的 JavaScript 数组方法细节
  • 排序算法之--选择排序
  • 人脸识别最新开发经验demo
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (javascript)再说document.body.scrollTop的使用问题
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (算法二)滑动窗口
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原)Matlab的svmtrain和svmclassify
  • (转载)Linux 多线程条件变量同步
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET中分布式服务
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @PreAuthorize注解
  • [20181219]script使用小技巧.txt
  • [BZOJ1008][HNOI2008]越狱
  • [C++] 轻熟类和对象
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [iBOT] Image BERT Pre-Training with Online Tokenizer
  • [LeetCode]Pow(x,n)
  • [LVGL]:MACOS下使用LVGL模拟器
  • [Meachines] [Easy] valentine SSL心脏滴血+SSH-RSA解密+trp00f自动化权限提升+Tmux进程劫持权限提升
  • [MT8766][Android12] 增加应用安装白名单或者黑名单