FreeRTOS学习day1
顾名思义 免费的实时操作系统
用法基本和Linux下的多线程编程类似
探索者开发版实验
动态创建4个任务start_task task1 task2 task3 优先级依次为1 2 3 4 (注意优先级不能为0,0是空闲任务)
我的理解:主线程start_task 主线程 task1 task2 task3为子线程
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "FreeRTOS.h"
#include "task.h"#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 120 //任务堆栈
TaskHandle_t Start_Handler;
void start_task(void *pvParameters);#define Task1_TASK_PRIO 2 //任务优先级
#define Task1_STK_SIZE 120 //任务堆栈
TaskHandle_t Task1_Handler;
void task1_task(void *pvParameters);#define Task2_TASK_PRIO 3 //任务优先级
#define Task2_STK_SIZE 120 //任务堆栈
TaskHandle_t Task2_Handler;
void task2_task(void *pvParameters);#define Task3_TASK_PRIO 4 //任务优先级
#define Task3_STK_SIZE 120 //任务堆栈
TaskHandle_t Task3_Handler;
void task3_task(void *pvParameters);//*******************下面注释掉的代码是通过 位带 操作实现IO口控制**************************************int main(void)
{ uart_init(115200);delay_init(168); //初始化延时函数LED_Init(); //初始化LED端口while(1){xTaskCreate((TaskFunction_t) start_task,(char *) "start_task",(uint16_t) START_STK_SIZE,(void *) NULL,(UBaseType_t) START_TASK_PRIO,(TaskHandle_t *) &Start_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */vTaskStartScheduler();// 开启任务调度器 注意一定要开启}
}//创建开始任务
void start_task(void *pvParameters)
{//创建task1xTaskCreate((TaskFunction_t) task1_task,(char *) "task1_task",(uint16_t) Task1_STK_SIZE,(void *) NULL,(UBaseType_t) Task1_TASK_PRIO,(TaskHandle_t *) &Task1_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. *///创建task2xTaskCreate((TaskFunction_t) task2_task,(char *) "task2_task",(uint16_t) Task2_STK_SIZE,(void *) NULL,(UBaseType_t) Task2_TASK_PRIO,(TaskHandle_t *) &Task2_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
//创建task3
xTaskCreate((TaskFunction_t) task3_task,(char *) "task3_task",(uint16_t) Task3_STK_SIZE,(void *) NULL,(UBaseType_t) Task3_TASK_PRIO,(TaskHandle_t *) &Task3_Handler ); /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
vTaskDelete(Start_Handler); }void task1_task(void *pvParameters)
{while(1){printf("task 1 is ok\r\n");vTaskDelay(500);}}
void task2_task(void *pvParameters)
{while(1){printf("task 2 is ok\r\n");vTaskDelay(800);}}
void task3_task(void *pvParameters)
{while(1){printf("task 3 is ok\r\n");vTaskDelay(1000);}
}

n: 运行态的任务调用vTaskDelay(),将把自己从就绪列表搬移到主动延时列表,并让就绪表的其他任务获取CPU资源。
h: 延时态的任务在延时结束时,若优先级比当前任务优先级高,就加入就绪队列,并立即获得CPU资源,进入运行。
g: 延时态的任务在延时结束时,若优先级比当前任务优先级低,就加入就绪队列,但是由于优先级不够,只能等待获取CPU资源。
如果不加延时 会一直执行高优先级的任务
相关文章:
FreeRTOS学习day1
顾名思义 免费的实时操作系统 用法基本和Linux下的多线程编程类似 探索者开发版实验 动态创建4个任务start_task task1 task2 task3 优先级依次为1 2 3 4 (注意优先级不能为0,0是空闲任务) 我的理解:主线程start_task 主线程 task1 ta…...
【Web】| CSS Float (浮动)的使用方法
Float(浮动)概念 CSS的Float(浮动),会使得元素向左或者向右移动,其它周围元素也会重新排列。 Float浮动,往往是用于图像,但它的布局一样非常有效。 元素如何浮动 元素的水平方向…...
#力扣:面试题 02.03. 删除中间节点@FDDLC
面试题 02.03. 删除中间节点 - 力扣(LeetCode) 一、Java /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/ class Solution {public void deleteNode(List…...
多线程原子性、一致性与有序性
作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言: …...
读书笔记:Effective C++ 2.0 版,条款28(namespace )
条款28: 划分全局名字空间 namespace 作为前缀,防止不同名字域的类型、常量等互相污染。 没命名的名字空间一般用于限制名字空间内部元素的可见性。 namespace sdm {const double book_version 2.0;class handle { ... };handle& gethandle(); }早期用struct模…...
CSS常见选择器总结
1.简单选择器 简单选择器是开发中使用最多的选择器,包含: 元素选择器,使用元素的名称 类选择器,使用.类名 id选择器,使用#id id注意事项: 一个HTML文档里面的id值 是唯一的,不能重复 id值如…...
阿里云服务结构--长期更新
CNCF 全称Cloud Native Computing Foundation(云原生计算基金会),成立于 2015 年7月21日(于美国波特兰OSCON 2015上宣布),其最初的口号是坚持和整合开源技术来让编排容器作为微服务架构的一部分࿰…...
Java8 BiConsumer<T, U> 函数接口浅析分享(含示例,来戳!)
文章目录 Java8 BiConsumer<T, U> 函数接口浅析分享(含示例,来戳!)源码accept 方法示例示例一示例二 andThen 方法示例示例一示例二 示例相关代码类dohandler 方法student.javaStudentScore.javaStudentScoreDto.java Java8…...
C++学习:类的使用--运算符重载
我们知道C可以对函数进行重载,让同名的函数来完成相同的基本操作。其实运算符也是可以重载的,而且有的运算符已经在使用了,就像*,既可以用于地址,又可以用于乘法。 下面是一个计算时间的类 #ifndef MYTIME_H #define…...
嵌入式养成计划-46----QT--简易版网络聊天室实现--QT如何连接数据库
一百一十九、简易版网络聊天室实现 119.1 QT实现连接TCP协议 119.1.1 基于TCP的通信流程 119.1.2 QT中实现服务器过程 使用QTcpServer实例化一个服务器对象设置监听状态,通过listen()函数,可以监听特定的主机,也可以监听所有客户端&#x…...
YOLO目标检测——人脸识别数据集【对应voc、coco和yolo三种格式标签】
实际项目应用:安全监控、智能驾驶、人机交互、人脸门禁、人脸支付、人脸搜索数据集说明:人脸识别数据集,真实场景的高质量图片数据,数据场景丰富,含有人脸图片标签说明:使用lableimg标注软件标注࿰…...
mybatis日志不打印的问题
在项目中使用了 spring boot,orm 层集成了 mybatis-plus,按照默认配置后发现之前配置的 sql 日志正常,在这里却不正常,鉴于日志使用的是 logback,想到了打印 sql 的日志级别是 debug,所以,按照这…...
【分布式缓存】关于 Memcached 的几个常见问题
关于 Memcached 的几个常见问题 1.Memcached 是怎么工作的?2.Memcached 最大的优势是什么?3.Memcached 和 MySQL 的 querycache 相比,有什么优缺点?4.Memcached 和服务器的 local cache(比如 PHP 的 APC、mmap 文件等&…...
MySQL 三大日志(bin log、redo log、undo log)
redo log redo log (重做日志) 是 InnoDB 存储引擎独有的,它让 MySQL有了崩溃恢复的能力,是事务中实现 持久化的重要操作 比如 MySQL 实例宕机了,重启时,InnoDB 存储引擎会使用 redo log 恢复数据,保证数据的持久性与…...
asp.net社区医疗辅助诊断网站系统VS开发sqlserver数据库web结构c#编程
一、源码特点 asp.net社区医疗辅助诊断网站系统 是一套完善的web设计管理系统,系统采用mvc模式(BLLDALENTITY)系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver200…...
NLP Bi-Encoder和Re-ranker
Retrieve & Re-Rank https://www.sbert.net/examples/applications/retrieve_rerank/README.html Bi-Encoder vs. Cross-Encoder https://www.sbert.net/examples/applications/cross-encoder/README.html Bi-Encoder会用BERT对输入文本编码,再根据cosine相似度…...
SpringBoot+Mybatis 配置多数据源及事务管理
目录 1.多数据源 2.事务配置 项目搭建参考: 从零开始搭建SpringBoot项目_从0搭建springboot项目-CSDN博客 SpringBoot学习笔记(二) 整合redismybatisDubbo-CSDN博客 1.多数据源 添加依赖 <dependencies><dependency><groupId>org.springframework.boot&…...
华为OD 猴子吃桃(100分)【java】A卷+B卷
华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...
切片不够技术来凑
概述 随着数据经度的提升,18级的切片有些场景已经不够用了,但是大部分在线的栅格切片最大级别还是18级,如果地图继续放大,有的框架(leaflet会,openlayers和mapboxGL不会)会存在没有底图的情况。…...
特约|数码转型思考:Web3.0与银行
日前,欧科云链研究院发布重磅报告,引发银行界及金融监管机构广泛关注。通过拆解全球70余家银行的加密布局,报告认为,随着全球采用率的提升与相关技术的成熟,加密资产已成为银行业不容忽视也不能错过的创新领域。 作为…...
LaTeX格式设置避坑指南:5个新手最常踩的排版雷区
LaTeX格式设置避坑指南:5个新手最常踩的排版雷区 第一次用LaTeX写论文时,我盯着屏幕上歪七扭八的公式和怎么都对齐不了的标题,差点把键盘摔了。后来才知道,这些看似简单的格式问题,往往藏着LaTeX设计哲学里那些"反…...
Android 16平板项目惊爆:关机闹钟成“哑巴“,开发团队陷入“技术泥潭“?
在科技行业摸爬滚打十余年,见过无数软件测试的"奇葩"问题,但最近在一个Android 16平板项目上遇到的"闹钟集体哑火"事件,还是让我彻底破防了——关机闹钟不响、按电源键息屏后不响、待机时间到息屏后不响,且问…...
告别Blob分析:Halcon差异化模型在复杂印刷品检测中的降维打击
印刷品缺陷检测的技术革命:Halcon差异化模型实战解析 当产线上每分钟流过数百个印刷品时,传统Blob分析就像用放大镜检查跑车——方法没错,但工具完全跟不上节奏。键盘字符检测这类高精度场景中,0.1mm的油墨缺失或1个像素的异物都可…...
企业知识竞赛系统选型指南:核心功能、采购清单与实施建议
企业知识竞赛系统选型指南:赋能培训与文化建设引言:为何需要专业的竞赛系统?在数字化学习时代,知识竞赛已成为企业激发员工学习热情、检验培训成果、营造竞争性学习氛围的有效手段。然而,依靠传统线下或简单的在线工具…...
基于Simulink的2ASK调制解调系统建模与性能对比分析
1. 2ASK调制解调系统基础入门 第一次接触通信系统仿真时,我被各种调制方式搞得头晕眼花。直到用Simulink搭建了第一个2ASK模型,才发现原来通信原理可以这么直观。**2ASK(二进制幅移键控)**是最基础的数字调制方式之一,…...
KeymouseGo架构深度解析:跨平台自动化操作引擎的设计与实现
KeymouseGo架构深度解析:跨平台自动化操作引擎的设计与实现 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo Key…...
C99新特性:变长数组(VLA)
文章目录C99新特性:变长数组(VLA) 🚀什么是变长数组? 🤔为什么需要变长数组? 💡VLA的基本语法和用法 📝在函数内部使用VLAVLA作为函数参数多维VLAVLA的工作原理和内存分配…...
NOKOV动捕SDK实战:5分钟搞定数据广播与跨设备开发(含避坑指南)
NOKOV动捕SDK实战:5分钟搞定数据广播与跨设备开发(含避坑指南) 在动作捕捉技术日益普及的今天,NOKOV作为国内领先的动捕解决方案提供商,其SDK的灵活性和高效性备受开发者青睐。本文将带您快速掌握NOKOV动捕SDK的核心使…...
Loom响应式不是银弹:当Reactor延迟突增300ms,我们用Arthas+VirtualThread Dump定位到第7层CallStack的栈帧膨胀漏洞
第一章:Loom响应式不是银弹:当Reactor延迟突增300ms,我们用ArthasVirtualThread Dump定位到第7层CallStack的栈帧膨胀漏洞在一次灰度发布后,订单履约服务的P99延迟从85ms骤升至382ms,而CPU使用率仅维持在42%左右——典…...
云容笔谈·东方红颜影像生成系统Java开发集成指南:构建企业级应用
云容笔谈东方红颜影像生成系统Java开发集成指南:构建企业级应用 最近和几个做内容平台和电商的朋友聊天,他们都在为一个事儿发愁:平台每天需要大量风格统一、质量上乘的人物形象,用于内容配图、商品展示或者营销海报。找设计师画…...
