freertos静态创建任务

在开始前先有个小插曲,我的keil的自动补全代码功能使用不了,经过查找是因为之前装51把有的文件覆盖了,照这篇博客就可以解决。
然后之前那份代码我们是动态创建任务,先来说一下动态创建任务和静态创建任务的区别:

FreeRTOS中有两种方式可以创建任务:动态创建任务和静态创建任务。它们的主要区别在于任务的内存分配和生命周期管理。

静态创建任务:
使用静态创建任务时,任务的内存是在编译时静态分配的,即在程序运行之前就确定了任务的数量和内存大小。
在编译时,通过在全局范围内定义任务控制块(TCB)数组,并为每个任务分配一个固定大小的栈空间来为任务分配内存。
静态创建任务需要预先为每个任务分配足够的内存,因此任务数量和任务栈大小是固定的。
优点是可以在编译时进行静态内存分配和配置,不需要动态内存分配器,执行效率较高。

动态创建任务:
使用动态创建任务时,任务的内存是在运行时动态分配的,即可以在程序运行时灵活地创建和删除任务。
在运行时,通过调用FreeRTOS提供的API函数(如xTaskCreate())来创建任务,并为每个任务动态分配内存。
动态创建任务允许在运行时动态地创建、删除和修改任务,可以根据需要动态调整任务数量和内存大小。
需要使用动态内存分配器(如heap_4.c)来管理任务的内存。
优点是可以动态地创建和删除任务,并根据需求进行灵活的内存管理。
在配置文件中定义这个宏,只有定义了这个宏才可以静态创建

#define configSUPPORT_STATIC_ALLOCATION 1
在这里插入图片描述

然后编写代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "freertos.h"
#include "task.h"
StackType_t myTaskStack[128];
StaticTask_t myTaskTCB;
//闲置任务控制块 任务栈
StaticTask_t	IdleTaskTCB;
StackType_t	IdleTaskStack[configMINIMAL_STACK_SIZE];	void MyTask(void* arg){while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(3000);GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(3000);}
}void InitLED(){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);
}void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ){*ppxIdleTaskTCBBuffer =&IdleTaskTCB;*ppxIdleTaskStackBuffer= IdleTaskStack;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}int main(void)
{InitLED();//任务的创建和运行必须在调度器后xTaskCreateStatic(MyTask,"Task1",128,NULL,2,myTaskStack,&myTaskTCB);vTaskStartScheduler();}

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

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

相关文章

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备?

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 这里以win10系统为例进行说明: 如下图所示,打开右下角的“网络和Internet设置”, 如下图所示,点击进入“更改适配器选项”, 如下图所示…

windwos10搭建我的世界服务器,并通过内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

线扫相机DALSA软件开发套件有哪些

Win10和Win7系统完整SDK目录截图: Sapera Configuration 缓存与内存管理,以及通信端口配置工具,部分功能等效于Detection(查找相机)内的Settings。 Sapera Log Viewer 打开Log Viewer后会显示之前发生过的所有与Sapera LT软件有关的运行信息…

CSS与基本选择器

<div class"c1" id"d1"></div> CSS基本知识 什么是css&#xff1a;CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;他就会按照这个样式l来进行渲染。其实就是让HT…

Codeforces Round 882 (Div. 2)

目录 A. The Man who became a God 题目分析: B. Hamon Odyssey 题目分析: C. Vampiric Powers, anyone? 题目分析: A. The Man who became a God 题目分析: n个人分成k组&#xff0c;每一组的力量都是这样的&#xff0c;那么如果分成k组那么就会有k-1个力量不被统计…

【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)

文章目录 前言DDPG特点 随机策略与确定性策略DDPG&#xff1a;深度确定性策略梯度伪代码代码实践 前言 之前的章节介绍了基于策略梯度的算法 REINFORCE、Actor-Critic 以及两个改进算法——TRPO 和 PPO。这类算法有一个共同的特点&#xff1a;它们都是在线策略算法&#xff0c…

IDEA 设置代码注释模板

功能简介&#xff1a; 每次看别人代码时&#xff0c;面对毫无注释的类&#xff0c;除了头大还是头大&#xff0c; 以下提供了一种代码类注释模板 新建java类的时候&#xff0c;自动增加类注释&#xff0c;养成代码开发好习惯 效果展示&#xff1a; 代码模板&#xff1a; #if (…

时序预测 | MATLAB实现时间序列ACF和PACF分析

时序预测 | MATLAB实现时间序列ACF和PACF分析 目录 时序预测 | MATLAB实现时间序列ACF和PACF分析基本介绍程序设计参考资料基本介绍 自回归分析是线性回归分析的一种推广,主要是研究一个序列反映的自我因果关系。普通线性回归基于互相关分析,涉及两个以上的变量,一个作为因变…

AMD老电脑超频及性能提升方案及实施

收拾电子元件的时候找到了若干古董的CPU 其中有一个X3 440 是原来同学主板烧了之后给我的&#xff0c;我从网上配了AM2 昂达主板&#xff0c;然后又买了AMD兼容内存&#xff0c;组成了win7 64位电脑&#xff0c;用起来非常不错&#xff0c;我把硬件配置和升级过程说明下&#x…

大厂面试题-IO和NIO区别

从下面几个方面来回答&#xff1a; 首先&#xff0c;I/O&#xff0c;指的是IO流&#xff0c;它可以实现数据从磁盘中的读取以及写入。 实际上&#xff0c;除了磁盘以外&#xff0c;内存、网络都可以作为I/O流的数据来源和目的地。 在Java里面&#xff0c;提供了字符流和字节…

设置IDEA快捷生成方法头,类头注释

1.File->settings->editor->live templates进入Live Template界面进行设置&#xff1a; 下一步&#xff1a; 下一步&#xff1a; /*** Title: $title$* author: sunyanzeng* date: $datatime$*/在需要添加文件头的地方打出“aa”&#xff0c;回车&#xff0c;会自…

什么是协议栈? 用户态协议栈设计(udp协议栈)

什么是协议栈呢&#xff1f; &#xff08;协议栈&#xff08;Protocol Stack&#xff09;是计算机网络和通信系统中的一个重要概念&#xff0c;它指的是一组协议层的层次结构&#xff0c;这些协议层一起协同工作&#xff0c;以便在不同计算机或设备之间实现数据通信和交换。每…

“深入理解Nginx的负载均衡与动静分离“

目录 引言一、Nginx简介1. Nginx的基本概念2. Nginx的特点3. Nginx的安装配置 二、Nginx搭载负载均衡三、前端项目打包四、Nginx部署前后端分离项目&#xff0c;同时实现负载均衡和动静分离总结 引言 在现代互联网应用中&#xff0c;高性能和可扩展性是至关重要的。Nginx作为一…

Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能&#xff08;Redis RabbitMQ&#xff09; 1.2.1、分析 1.2.2、案例实现 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 使用 redis 作为缓存&#xff0c; M…

c++中httplib使用

httplib文件链接:百度网盘 请输入提取码 提取码:kgnq json解析库:百度网盘 请输入提取码 提取码:oug0 一、获取token 打开postman, 在body这个参数中点击raw,输入用户名和密码 然后需要获取到域名和地址。 c++代码如下: #include "httplib.h" #in…

LangChain+LLM实战---Midjourney高级技巧的极简教程

原文&#xff1a;An advanced guide to writing prompts for Midjourney ( text-to-image) 作者&#xff1a;Lars Nielsen Midjourney生成的图像&#xff0c;文本Prompt&#xff1a;beautiful, fantasy city unreal engine 一句话介绍midjourney ? 对于那些还没有听说过Mid…

C# 文件 文件夹 解除占用

文件/文件夹 解除占用或直接删除。 编程语言&#xff1a;C# 这个就不用过多功能描述了。 注册windows 文件/文件夹 右键菜单。 文件夹解除占用&#xff1a;遍历文件夹所有文件&#xff0c;判断是否被占用&#xff0c;先解除文件占用&#xff0c;后解除文件夹占用&#xff0…

关于iOS:如何使用SwiftUI调整图片大小?

How to resize Image with SwiftUI? 我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像&#xff1f; 我试图设置框架&#xff0c;但不起作用&#xff1a; 1 2 Image(room.thumbnailImage) .frame(width: 32.0, height: 32.0) 在Image上应用…

Vue H5页面长按保存为图片

安装依赖&#xff1a;npm install html2canvas -d <template><div class"index"><div id"captureId" class"capture" v-show"firstFlag"><ul><li>1</li><li>2</li><li>3<…

python如何使用gspread读取google在线excel数据?

一、背景 公司使用google在线excel管理测试用例&#xff0c;为了方便把手工测试用到的测试数据用来做自动化用例测试数据&#xff0c;所以就想使用python读取在线excel数据&#xff0c;通过数据驱动方式&#xff0c;完成自动化回归测试&#xff0c;提升手动复制&#xff0c;粘…