FreeRtos的静态方法创建任务和删除示例

需要使用静态方法需要将宏configSUPPORT_STATIC_ALLOCATION=1

步骤

1.修改宏configSUPPORT_STATIC_ALLOCATION=1运行时候会显示两个函数未定义

vApplicationGetIdleTaskMemory()vApplicationGetTimerTaskMemory()

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"//开始任务
#define START_TASK_SIZE  120;
#define START_TASK_PRIO 1;
StackType_t StackTaskBuffer[START_TASK_SIZE];
StaticTask_t StackTaskTcb;
TaskHandle_t StartTask_Handle;
void start_task( void * pvParameters ); //定义
//任务1
#define START_TASK1_SIZE  120;
#define START_TASK1_PRIO 1;
StackType_t StackTaskBuffer[START_TASK1_SIZE];
StaticTask_t StackTask1Tcb;
TaskHandle_t StartTask1_Handle;
void start1_task( void * pvParameters ); //定义
//任务2
#define START_TASK2_SIZE  120;
#define START_TASK2_PRIO 1;
StackType_t StackTask2Buffer[START_TASK2_SIZE];
StaticTask_t StackTask2Tcb;
TaskHandle_t StartTask2_Handle;
void start2_task( void * pvParameters ); //定义static StaticTask_t IdleTaskStackTcb;
static StackType_t IdleTaskStackBuf[configMINIMAL_STACK_SIZE];static StaticTask_t TimerTaskTcb;
static StackType_t TimeTaskStackBuf[configTIMER_TASK_STACK_DEPTH];
//空闲任务
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,  //空闲任务的任务控制块StackType_t **ppxIdleTaskStackBuffer, //空闲任务的堆栈uint32_t *pulIdleTaskStackSize )			//空闲任务的堆栈的大小
{*ppxIdleTaskTCBBuffer	= &IdleTaskStackTcb;*ppxIdleTaskStackBuffer =	IdleTaskStackBuf;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;															
}
//定时器任务
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize )
{*ppxTimerTaskTCBBuffer = &TimerTaskTcb;*ppxTimerTaskStackBuffer = TimeTaskStackBuf;*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4	 delay_init();	    				//延时函数初始化	  uart_init(115200);					//初始化串口LED_Init();		  					//初始化LED//任务一StartTask_Handle	= xTaskCreateStatic(	(TaskFunction_t) 		start_task,(char *)  				  "start_task",(uint32_t) 				START_TASK_SIZE,(void *) 					  NULL,(UBaseType_t) 			START_TASK_PRIO,(StackType_t *)  		StackTaskBuffer,(StaticTask_t *)  	&StackTaskTcb );											vTaskStartScheduler();
}
void start_task( void * pvParameters ) //定义
{StartTask1_Handle	= xTaskCreateStatic(	(TaskFunction_t) 		start1_task,(char *)  				  "start1_task",(uint32_t) 				START_TASK1_SIZE,(void *) 					  NULL,(UBaseType_t) 			START_TASK_PRIO,(StackType_t *)  		StackTaskBuffer,(StaticTask_t *)  	&StackTask1Tcb );StartTask2_Handle	= xTaskCreateStatic(	(TaskFunction_t) 		start2_task,(char *)  				  "start2_task",(uint32_t) 				START_TASK2_SIZE,(void *) 					  NULL,(UBaseType_t) 			START_TASK2_PRIO,(StackType_t *)  		StackTask2Buffer,(StaticTask_t *)  	&StackTask2Tcb );vTaskStartScheduler();
}void start1_task( void * pvParameters ) //定义
{while(1){}}
void start2_task( void * pvParameters ) //定义
{while(1){}} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git整合分支的两种方法——合并(Merge)、变基(Rebase)

问题描述: 初次向git上传本地代码或者更新代码时,总是会遇到以下两个选项。有时候,只是想更新一下代码,没想到,直接更新了最新的代码,但是自己本地的代码并没有和git上的代码融合,反而被覆盖了…

机器学习系列——(六)数据降维

引言 在机器学习领域,数据降维是一种常用的技术,旨在减少数据集的维度,同时保留尽可能多的有用信息。数据降维可以帮助我们解决高维数据带来的问题,提高模型的效率和准确性。本文将详细介绍机器学习中的数据降维方法和技术&#…

浅谈——开源软件的影响力

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

数据结构与算法:图论(邻接表板子+BFS宽搜、DFS深搜+拓扑排序板子+最小生成树MST的Prim算法、Kruskal算法、Dijkstra算法)

前言 图的难点主要在于图的表达形式非常多,即数据结构实现的形式很多。算法本身不是很难理解。所以建议精通一种数据结构后遇到相关题写个转换数据结构的接口,再套自己的板子。 邻接表板子(图的定义和生成) public class Graph…

Docker 第十一章 : Docker 三剑客之 Swarm (集群管理命令)

第十一章 : Docker 三剑客之 Swarm (集群管理命令) 本章知识点: 本文介绍了Docker三剑客之一的Swarm集群管理工具 , 通过Swarm,用户可以轻松地创建和管理Docker容器集群,实现容器服务的横向扩展和高可用性。Swarm提供了简单易用的命令行界面,使用户能够快速部署和管理…

[EFI]DELL-7472电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 DELL-7472 处理器Intel Core i7-8550U已驱动内存16GB RAM DDR4已驱动硬盘PNY SSD NVME 500GB已驱动显卡Intel UHD Graphics 620已驱动声卡瑞昱 Realtek ALC256 英特尔 High Definition Audio 控制器已驱动网卡瑞昱 RTL8168/8111/8112 Gigabit Ethernet C…

Java I/O 流

内容体系图 文件基础 说明:输入输出是针对内存来说的 常用的文件操作

zabbix监控mariadb数据库

zabbix监控mariadb数据库 1.创建监控用户及授权 [rootchang ~]# mysql -uroot -p123qqq.A MariaDB [(none)]> CREATE USER monitor% IDENTIFIED BY 123qqq.A; MariaDB [(none)]> GRANT REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO monitor%; Maria…

Coil:Android上基于Kotlin协程的超级图片加载库

Coil:Android上基于Kotlin协程的超级图片加载库 1. coil简介 在当今移动应用程序的世界中,图片加载是一个不可或缺的功能。为了让应用程序能够高效地加载和显示图片,开发人员需要依赖于强大的图片加载库。而今天,我将向大家介绍…

爱上算法:每日算法(24-2月4号)

🌟坚持每日刷算法,😃将其变为习惯🤛让我们一起坚持吧💪 文章目录 [232. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/)思路CodeJavaC 复杂度 [225. 用队列实现栈](https://leetcode.cn/…

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后,打开cmd用java -jar运行此jar包时报错: 用idea运行该项目则没有问题 。 其实原因很简单,我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…

Seata介绍

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 Seata 中有三⼤模块,分别是 TM、RM 和 TC。其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在⼀起,TC 作为 Seata 的服务端独⽴部署…

SpringMVC-响应数据

一、引子 我们在上一篇文章SpringMVC-组件解析里介绍了SpringMVC框架执行一个请求的过程,并演示了快速使用Controller承接请求。本篇我们将深入介绍SpringMVC执行请求时,如何响应客户端。 二、响应类型 SpringMVC的数据响应方式主要分为两类&#xff…

浅谈QT的几种线程的使用和区别。

简介: 线程是操作系统中的基本执行单元,是一个独立的执行路径。每个线程都有自己的栈空间,用于存储本地变量和函数调用的上下文。多个线程可以在同一进程中并发执行,从而实现并发处理,提高程序的性能和响应能力。 与进…

使用 LoRA 在 vi​​ggo 数据集上微调 Microsoft phi-2 小语言模型

一、说明 Microsoft 的基于 Transformer 的小语言模型。它可以根据 MIT 许可在HuggingFace上使用。 它在 96 个 A100 GPU 上使用 1.4T 令牌进行了 14 天的训练。Phi-2 是一个 27 亿个参数的预训练 Transformer,不使用 RLHF 或指示微调。它进行下一个标记预测&#x…

js事件循环机制 宏任务微任务执行时机

事件循环的工作步骤 先执行同步代码,所有同步代码都在主线程上执行,形成一个执行栈(又称调用栈,先进后出)。当遇到异步任务时,会将其挂起并添加到任务队列中(先进先出),…

17、ELK

17、ELK helm 安装 elkfk&#xff08;kafka 集群外可访问&#xff09; ES/Kibana <— Logstash <— Kafka <— Filebeat 部署顺序&#xff1a; 1、elasticsearch 2、kibana 3、kafka 4、logstash 5、filebeat kubectl create ns elkhelm3部署elkfk 1、elast…

基础面试题篇2

前言 前两天又比较忙&#xff0c;放假前的赶工。今天已经到家啦&#xff0c;咱们继续分享一下常用的基础知识。 基础面试题篇2 BIO AIO NIO有何区别&#xff1f; BIO&#xff1a;同步阻塞式 IO&#xff0c;就是我们平常使用的传统 IO&#xff0c;它的特点是模式简单使用方便…

使用PySpark处理DataFrame以拆分数组列

问题&#xff1a;用pyspark 处理df1,df1 有三列&#xff0c;第一列是商品pid,第二列是商品name,第三列是候选标品cid_list(有多个cid),将df1中的cid_list拆开,转换成一个商品id和name对应一个cid&#xff0c;但是有多行 from pyspark.sql.functions import explode, col# 假设…

神经网络 | 基于 CNN 模型实现土壤湿度预测

Hi&#xff0c;大家好&#xff0c;我是半亩花海。在现代农业和环境监测中&#xff0c;了解土壤湿度的变化对于作物生长和水资源管理至关重要。通过深度学习技术&#xff0c;特别是卷积神经网络&#xff0c;我们可以利用过去的土壤湿度数据来预测未来的湿度趋势。本文将使用 Pad…