STM32之FreeRTOS开发介绍(十九)
目录
前言
一、简述
二、开源网址
三、原理及功能特性
1.原理简介
2.功能介绍
1.任务调度
2.任务管理
3.中断管理
4.消息队列
3.特点说明
4.优缺点
四、参考书籍
五、实现方式
总结
前言
FreeRTOS是一个免费的、开源的实时操作系统,专为微控制器和嵌入式系统设计,它以其轻量级、高效、易于移植和强大的功能而闻名,成为许多嵌入式开发者的首选。FreeRTOS操作系统支持多种不同架构的不同型号的处理器,比如STM32系列的 F1、F4、F7 和H7等都可以移植 FreeRTOS,同时ST公司也在其STM32CubeMX生态系统中加入了对FreeRTOS操作系统的支持,这极大的方便了我们学习和使用FreeRTOS操作系统。
一、简述
Free Real-Time Operating System(免费的实时操作系统,简写FreeRTOS)是一个免费、开源的、可裁剪的、抢占式实时多任务内核,具有高度可移植性,适用于资源有限的微控制器等环境。FreeRTOS诞生于2003年,由Richard Barry发布初版,并由Real Time Engineers Ltd进行开发和维护。2017年,亚马逊(Amazon Web Services, AWS)收购了FreeRTOS,并推出了增强的版本Amazon FreeRTOS,集成了更多的联网和安全功能。FreeRTOS_百度百科 (baidu.com)
由于FreeRTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。
FreeRTOS广泛应用于工业自动化、智能家居、汽车电子、医疗设备和无人机等领域。例如,在智能家居系统中,FreeRTOS可以管理多个传感器和执行器(如温度传感器、光照传感器、智能插座等),实现家庭安全、节能和舒适度的提升。在无人机控制系统中,FreeRTOS通过多任务调度和实时性能保障,确保无人机能够稳定飞行并响应各种控制指令。
二、开源网址
FreeRTOS官方网址为FreeRTOS™网站,上面提供了大量的FreeRTOS操作系统的相关文档及例程源码,如下所示。
也可以在上面可以下载相应版本的FreeRTOS源码包,或者到github存储库上下载。
三、原理及功能特性
1.原理简介
任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。
FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行,优先级高的任务一旦就绪就能剥夺优先级较低任务的CPU使用权,提高了系统的实时响应能力。FreeRTOS内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。
当进行任务调度时,调度算法首先实现优先级调度。系统按照优先级从高到低的顺序从就绪任务链表数组中寻找第一个不为0的优先级,此优先级即为当前最高就绪优先级,据此实现优先级调度。若此优先级下只有一个就绪任务,则此就绪任务进入运行态;若此优先级下有多个就绪任务,则需采用轮换调度算法实现多任务轮流执行。
2.功能介绍
作为一个轻量级的操作系统,其功能包括:任务调度、任务管理、中断处理、信号量、消息队列、内存管理、通信和同步机制、软件定时器、低功耗模式等,这些功能使得FreeRTOS能够高效地管理嵌入式系统中的多个任务,实现任务的并发执行和资源共享。
- 抢占式多任务调度:FreeRTOS支持抢占式多任务调度机制,允许高优先级的任务抢占低优先级的任务,从而保证了系统的实时性要求。这种调度机制使得系统能够在确定的时间内响应任务,非常适合对实时性要求较高的应用场景。
- 任务管理:FreeRTOS提供了强大的任务管理功能,包括任务的创建、删除、挂起、恢复等操作。这使得开发者能够方便地管理系统中的多个任务,实现任务的并发执行和资源共享。
- 中断处理:FreeRTOS提供了高效的中断处理机制,允许任务在中断服务例程中与内核进行交互。这有助于开发者更好地处理系统中的中断事件,提高系统的稳定性和响应速度。
- 消息队列:基于队列,FreeRTOS 实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二 值信号量、递归互斥信号量,因此很有必要深入了解FreeRTOS的队列。
- 内存管理:虽然FreeRTOS本身并不提供复杂的内存管理功能(如虚拟内存),但它提供了一些简单的内存分配和释放函数,方便开发者管理系统内存。
- 丰富的通信和同步机制:FreeRTOS提供了消息队列、信号量、互斥量、事件标志组等多种通信和同步机制,用于协调多个任务之间的运行,防止数据竞争和死锁等问题。
- 软件定时器:FreeRTOS提供了软件定时器机制,允许开发者创建定时任务,在指定时间间隔后执行特定操作。这对于需要周期性执行任务的应用非常有用。
- 低功耗模式:在一些特殊场景中,如长期无人照看的数据采集采集设备、可穿戴设备等,都对设备的 功耗有着很严格的要求,为了迎合这种特殊需求,大多数 MCU 也都有相应的低功耗模式,以此来降低设备的整体功耗。
1.任务调度
FreeRTOS一共支持三种任务调度方式,分别为抢占式调度、时间片调度和协程式调度。
- 抢占式调度
抢占式调度主要时针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可 以抢占优先级低的任务,只有当优先级高的任务发生阻塞或者被挂起,低优先级的任务才可以运行。
- 时间片调度
时间片调度主要针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务,也就是说CPU轮流运行优先级相同的任务,每个任务运行的时间就是一个系统时钟节拍。有关系统时钟节拍的相关内容,在下文讲解FreeRTOS系统时钟节拍的时候会具体分析。
- 协程式调度
协程式调度是用于一些资源非常少的设备上的,但是现在已经很少用到了。根据FreeRTOS官方对协程式调度的说法,虽然协程式调度的相关代码还没有被删除,但是今后也不打算继续开发协程式调度,因此并不推荐读者在开发中使用协程式调度。
2.任务管理
任务管理分为单任务管理和多任务管理,
- 单任务管理
单任务系统的编程方式,即裸机的编程方式,这种编程方式的框架一般都是在 main()函数 中使用一个大循环,在循环中顺序地调用相应的函数以处理相应的事务,这个大循环的部分可 以视为应用程序的后台,而应用程序的前台,则是各种中断的中断服务函数。因此单任务系统 也叫做前后台系统,前后台系统的运行示意图,如下图所示。
从上图可以看出,前后台系统的实时性很差,因为大循环中函数处理的事务没有优先级之分,必须是顺序地被执行处理的,不论待处理事务的紧急程度有多高,没轮到只能等着,虽然 中断能够处理一些紧急的事务,但是在一些大型的嵌入式应用中,这样的单任务系统就会显得力不从心。
- 多任务管理
多任务系统在处理事务的实时性上比单任务系统要好得多,从宏观上来看,多任务系统的多个任务是可以“同时”运行的,因此紧急的事务就可以无需等待CPU处理完其他事务,在被处理。要注意的是多任务系统的多个任务可以“同时”运行,是从宏观的角度而言的,对于单核的CPU而言,CPU在同一时刻只能够处理一个任务,但是多任务系统的任务调度器会根据相关的任务调度算法,将CPU的使用权分配给任务,在任务获取CPU使用权之后的极短时间(宏观角度)后,任务调度器又会将CPU的使用权分配给其他任务,如此往复,在宏观的角度看来,就像是多个任务同时运行了一样。多任务系统的运行示意图,如下图所示。
从上图可以看出,相较于单任务系统而言,多任务系统的任务也是具有优先级的,高优先级的任务可以像中断的抢占一样,抢占低优先级任务的CPU使用权;优先级相同的任务则各自轮流运行一段极短的时间(宏观角度),从而产生“同时”运行的错觉。以上就是抢占式调度和时间片调度的基本原理。在任务有了优先级的多任务系统中,用户就可以将紧急的事务放在优先级高的任务中进行 处理,那么整个系统的实时性就会大大地提高。
3.中断管理
FreeRTOS的中断配置一般在FreeRTOSConfig.h文件中,用于配置FreeRTOS用到的中断。在这个文件中可以看到一些宏定义,例如configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY、configKERNEL_INTERRUPT_PRIORITY、configMAX_SYSCALL_INTERRUPT_PRIORITY等等。
通过设置FreeRTOS这些宏定义,可管理的最高优先级的中断,例如将configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY该数据级别设置为5,即中断优先级高于5的中断不受FreeRTOS影响,如下图所示。
此功能就是操作BASEPRI寄存器来实现的,用户可以根据实际使用场景来决定此值级别。
4.消息队列
在实际的项目开发中,经常会遇到在任务于任务之间或任务于中断之间需要进行“沟通交流”,这里的“沟通交流”就是消息传递的过程。在不使用操作系统的情况下,函数与函数,或 函数与中断之间的“沟通交流”一般使用一个或多多个全局变量来完成,但是在操作系统中, 因为会涉及“资源管理”的问题,比方说读写冲突,因此使用全局变量在任务于任务或任务于 中断之间进行消息传递,并不是很好的解决方案。FreeRTOS为此提供了“队列”的机制。
队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存储数量有限、大小固定的多个数据,队列中的每一个数据叫做队列项目,队列能够存储队列项目的最大数量称为队列的长度,在创建队列的时候,就需要指定所创建队列的长度及队列项目的大小。因为队列是用来在任务与任务或任务于中断之间传递消息的一种机制,因此队列也叫做消息队列。基于队列,FreeRTOS实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量、递归互斥信号量。队列具有如下特性:
- 数据存储特性:队列通常采用 FIFO(先进先出)的存储缓冲机制,当有新的数据被写入队列中时,永远都 是写入到队列的尾部,而从队列中读取数据时,永远都是读取队列的头部数据。但同时FreeRTOS队列也支持将数据写入到队列的头部,并且还可以指定是否覆盖先前已经在队列头部的数据。
- 多任务访问特性:队列不属于某个特定的任务,可以在任何的任务或中断中往队列中写入消息,或者从队列中读取消息。
- 队列读取阻塞特性:在任务从队列读取消息时,可以指定一个阻塞超时时间。如果任务在读取队列时,队列为 空,这时任务将被根据指定的阻塞超时时间添加到阻塞态任务列表中进行阻塞,以等待队列中有可用的消息。当有其他任务或中断将消息写入队列中,因等待队列而阻塞任务将会被添加到 就绪态任务列表中,并读取队列中可用的消息。如果任务因等待队列而阻塞的时间超过指定的 阻塞超时时间,那么任务也将自动被转移到就绪态任务列表中,但不再读取队列中的数据。因为同一个队列可以被多个任务读取,因此可能会有多个任务因等待同一个队列,而被阻 塞,在这种情况下,如果队列中有可用的消息,那么也只有一个任务会被解除阻塞并读取到消 息,并且会按照阻塞的先后和任务的优先级,决定应该解除哪一个队列读取阻塞任务。
- 队列写入阻塞特性:与队列读取一样,在任务往队列写入消息时,也可以指定一个阻塞超时时间。如果任务在 写入队列时,队列已经满了,这时任务将被根据指定的阻塞超时时间添加到阻塞态任务列表中 进行阻塞,以等待队列有空闲的位置可以写入消息。指定的阻塞超时时间为任务阻塞的最大时 间,如果在阻塞超时时间到达之前,队列有空闲的位置,那么队列写入阻塞任务将会解除阻塞, 并往队列中写入消息,如果达到指定的阻塞超时时间,队列依旧没有空闲的位置写入消息,那 么队列写入阻塞任务将会自动转移到就绪态任务列表中,但不会往队列中写入消息。因为同一个队列可以被多个任务写入,因此可有会有多个任务因等待统一个任务,而被阻 塞,在这种情况下,如果队列中有空闲的位置,那么也之后一个任务会被解除阻塞并往队列中 写入消息,并且会按照阻塞的先后和任务的优先级,决定应该解除哪一个队列写入阻塞任务。
- 队列操作特性:队列操作的过程,包括创建队列、往队列中写入消息、从队列中读取消息等操作。
3.特点说明
FreeRTOS具有如下特点。
- 用户可配置内核功能,使其具有可裁剪的轻量级内核,一般FreeRTOS的内核占用内存非常小,通常只有几KB到十几KB,这使得它能够在资源受限的微控制器上运行,成为小型嵌入式系统的理想选择。
- 免费开源的源代码,采用C语言编写,遵循MISRA-C标准的编程规范,生成目标代码较小,支持多个平台简单易用,提供一个高层次的信任代码的完整性;
-
不限制的任务数量,可根据需求设置任务优先级,在多个任务时可以分配相同的优先权,
-
强大的执行跟踪功能,堆栈溢出可检测。
4.优缺点
优点:
-
开源:FreeRTOS是开源的,可以免费使用并根据开源许可证进行修改;
-
小巧:FreeRTOS的核心代码非常小巧,方便嵌入到微控制器中;
-
实时性:FreeRTOS被设计为提供确定的实时响应;
-
可移植性:FreeRTOS支持多种硬件架构,包括ARM,NIOS,Microblaze等;
-
支持软件组件:FreeRTOS提供了诸如队列、信号量、互斥锁等多种软件组件,简化了开发过程;
-
社区支持:FreeRTOS有一个活跃的社区,可以获得技术支持和查找资源。
缺点:
-
文档和支持:相比商业操作系统,FreeRTOS的文档和支持可能不够丰富;
-
商业支持:虽然FreeRTOS本身是开源的,但是商业支持可能需要购买提供商的额外服务;
-
学习曲线:FreeRTOS的学习曲线相对较陡峭,需要开发者理解任务调度、任务同步等实时系统概念;
-
更新和维护:FreeRTOS的更新和维护需要开发者自己处理,可能需要定期更新或修复漏洞。
四、参考书籍
FreeRTOS更为详细功能特性参考原子的《FreeRTOS开发指南_V1.10.pdf》,在文末链接处可以下载阅读,该手册会有如下介绍,参考目录。
或者参考freertos给出的Usage Guide《FreeRTOS实时内核使用指南_中文版.pdf》,在文末链接处可以下载阅读,该手册会有如下介绍,参考目录。
五、实现方式
STM32工程实现FreeRTOS操作系统的应用,跟前面几篇讲的lwip实现的方式一样,既可以通过官网上下载移植FreeRTOS到STM32工程项目中,也可以可视化工具STM32CubeMX完成对FreeRTOS操作系统的配置,然后一键化生成工程代码。这两种方式均可以实现,但各有优缺点,通过移植的方式实现,有一定的困难,需要对FreeRTOS的熟练度有一定的要求,如果对FreeRTOS不是足够了解,博主推荐采用STM32CubeMX实现,同时这钟方式也是博主比较推荐的,比较简便快捷。
总结
FreeRTOS涉及到的功能知识点比较多,更多详细的使用参考下方文档链接单片机STM32F407-Case程序代码例程-CSDN文库下载,找到对应的例程目录。
相关文章:
STM32之FreeRTOS开发介绍(十九)
STM32F407 系列文章 - freertos(十九) 目录 前言 一、简述 二、开源网址 三、原理及功能特性 1.原理简介 2.功能介绍 1.任务调度 2.任务管理 3.中断管理 4.消息队列 3.特点说明 4.优缺点 四、参考书籍 五、实现方式 总结 前言 FreeRTOS是…...
2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?
模型假设仅仅是简单陈述吗?允许AI的使用是否降低了比赛难度?还在依赖机器学习的模型吗?处理题目的方法有哪些?O奖论文的优点在哪里? 本文调研了当年赛题的评委文章和O奖论文,这些问题都会在文章中一一解答…...
第14篇:从入门到精通:掌握python上下文管理器
第14篇:上下文管理器 内容简介 本篇文章将深入探讨Python中的上下文管理器(Context Manager)。您将了解上下文管理器的概念与用途,学习如何实现自定义的上下文管理器,以及如何使用contextlib模块来简化上下文管理器的…...
cuda从零开始手搓PB神经网络
cuda实现PB神经网络 基于上一篇的矩阵点乘,实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下: #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…...
Java 大视界 -- Java 大数据物联网应用:数据处理与设备管理(八)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
大模型之三十三- 开源Melo 语音合成
大模型之三十三- 开源Melo 语音合成 文本到语音(TTS)系统从基于基础音素的模型演变成复杂的端到端神经方法,这种方法可以直接将文本转换为语音。这一变革得益于深度学习的进步和计算能力的提升,已经在语音的自然度、韵律控制和跨语言能力方面取得了重大进展 。现代TTS系统…...
全同态加密理论、生态现状与未来展望(上)
《全同态加密理论、生态现状与未来展望》系列由lynndell2010gmail.com和mutourend2010gmail.com整理原创发布,分为上中下三个系列: 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。全同态加密…...
cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...
提升大语言模型的三大策略
1.概述 随着大语言模型(LLMs)在技术和应用上的不断发展,它们已经深刻地改变了我们与计算机的互动方式。从文本生成到语言理解,LLMs的应用几乎涵盖了各个行业。然而,尽管这些模型已展现出令人印象深刻的能力,…...
Ubuntu 24.04 LTS 安装 Docker Desktop
Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版(1h速通) Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...
mysql查看binlog日志
mysql 配置、查看binlog日志: 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启,修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin(开启日志并指定日志前缀ÿ…...
2. Flink分区策略
一. Flink分区策略概述 Flink任务在执行过程中,一个流(stream)包含一个或多个分区(Stream partition),TaskManager中的一个slot的SubTask就是一个stream partition(流分区)。 Flink分区之间进行数据传递模式有两种。 1. one-to-one模式 数据不需要重新…...
Qt 5.14.2 学习记录 —— 십칠 窗口和菜单
文章目录 1、Qt窗口2、菜单栏设置快捷键添加子菜单添加分割线和菜单图标 3、工具栏 QToolBar4、状态栏 QStatusBar5、浮动窗口 QDockWidget 1、Qt窗口 QWidget,即控件,是窗口的一部分。在界面中创建控件组成界面时,Qt自动生成了窗口…...
微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现
wxml页面代码 <view class"beijing"></view>wxss样式代码 /* pages/beiJing/beiJing.wxss */ .beijing {background-image: url("https://www.qipa250.com/qipa.jpg");/* 定位:绝对定位 */position: absolute;/* 上下左右都定位到…...
亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine
小T导读:本篇文章是“2024,我想和 TDengine 谈谈”征文活动的优秀投稿之一,作者从数据库运维的角度出发,分享了利用 TDengine Cloud 提供的迁移工具,从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…...
中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p39061 在全球算力因数字化技术发展而竞争加剧,我国积极推进算力发展并将综合算力作为数字经济核心驱动力的背景下,该报告对我国综合算力进行研究。 中国算力大会发布的《中国综合算力指数(2024年…...
51c~ONNX~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务,涉及训练模型将图像分类为预定义类别。本文中,我们将探讨如何使用 PyTorch 构建一个简单的自定…...
线下陪玩系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
海康工业相机的应用部署不是简简单单!?
作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 笔者使用的设备及环境:WSL2-Ubuntu22.04MV-CS016-10UC 不会吧?不会吧?不会还有人拿到海康工业相机还是一脸懵叭?不会还有人…...
SAP POC 项目完工进度 - 收入确认方式【工程制造行业】【新准则下工程项目收入确认】
1. SAP POC收入确认基础概念 1.1 定义与原则 SAP POC(Percentage of Completion)收入确认方式是一种基于项目完工进度来确认收入的方法。其核心原则是根据项目实际完成的工作量或成本投入占预计总工作量或总成本的比例,来确定当期应确认的收…...
【Elasticsearch 】 聚合分析:聚合概述
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【算法】二分
二分 1.二分查找1.在排序数组中查找元素的第一个和最后一个位置2.牛可乐和魔法封印3.A-B 数对4.烦恼的高考志愿 2.二分答案1.木材加工2.砍树3.跳石头 1.二分查找 当我们的解具有二段性(根据最终答案所在的位置判断是否具有二段性)时,就可以使…...
如何将自己本地项目开源到github上?
环境: LLMB项目 问题描述: 如何将自己本地项目开源到github上? 解决方案: 步骤 1: 准备本地项目 确保项目整洁 确认所有的文件都在合适的位置,并且项目的 README.md 文件已经完善。检查是否有敏感信息࿰…...
编辑器Vim基本模式和指令 --【Linux基础开发工具】
文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...
Scade 表达式 - 使用索引的迭代器
Scade 表达式中的 map, fold, mapfold,会对输入数组参数中的元素逐个作处理,不需要数组元素的索引信息。若在处理数组元素时,需要数组元素相应的索引信息,则可使用迭代器算子 mapi, foldi, mapfoldi。 mapi 算子 mapi 算子的行为…...
K8s学习
Kubernetes 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点…...
面试--你的数据库中密码是如何存储的?
文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。 我们要对数据…...
微服务学习-快速搭建
1. 速通版 1.1. git clone 拉取项目代码,导入 idea 中 git clone icoolkj-microservices-code: 致力于搭建微服务架构平台 1.2. git checkout v1.0.1版本 链接地址:icoolkj-microservices-code 标签 - Gitee.com 2. 项目服务结构 3. 实现重点步骤 …...
兼职全职招聘系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
【云岚到家】-day03-门户缓存实现实战
【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存,如何实现定时任务呢? 1.使用jdk提供的Timer定时器 示例代码如下…...
Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
Ubuntu 24.04 LTS 背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装,运行以下命令进行安装ÿ…...
“AI人工智能内容辅助创作平台:让创意不再“卡壳”
在如今这个信息爆炸的时代,内容创作成了每个人的“必修课”。无论是自媒体大V、文案策划,还是普通学生写作文,大家都会遇到一个让人抓狂的问题——“创意枯竭”。有时候,脑袋里空空如也,一个字都写不出来,那…...
mac 安装 node
brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...
VUE之Router使用及工作模式
1、路由的使用 【两个注意点】 1)路由组件通常放在pages 或 views文件夹,一般组件通常放在components文件夹。 2)通过点击导航,视觉效果上"消失"了的路由组件,默认是被"卸载"掉的,需要的时候再去挂载。 // 创建一个路由器,并暴露出去// 第一步:…...
day25_HTML
今日内容 零、 复习昨日 一、HTML 零、 复习昨日 一、Web开发 前端 HTML ,页面展现CSS , 样式JS (JavaScript) , 动起来 二、HTML 2.1 HTML概念 网页,是网站中的一个页面,通常是网页是构成网站的基本元素,是承载各种网站应用的平台。通俗…...
(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
1 项目简介(开源地址在文章结尾) 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户&…...
【AI日记】25.01.20
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:自由宪章阅读原因:作者哈耶克,诺贝尔经济学奖得主,之前读过他的 《通往奴役…...
基于机器学习的用户健康风险分类及预测分析
完整源码项目包获取→点击文章末尾名片! 背景描述 在这个日益注重健康与体能的时代,健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息,包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...
AI生成内容——JavaScript中的Promise、async和wait
一、Promise *1. 概念: Promise 是 JavaScript 中处理异步操作的一种对象,它表示一个异步操作的最终完成(或失败)及其结果值。一个 Promise 对象处于以下三种状态之一: Pending(进行中)&#…...
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
Java基于SSM框架的社区团购系统小程序设计与实现 博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 Ǵ…...
Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】
Git 理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件 标签管理理解标签创建标签操作标签删除标签 理解分布式版本控制系统 我们⽬前所说的所有内容(工作区,暂存区,版本库等等)&#x…...
【esp32小程序】小程序篇02——连接git
一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…...
MongoDB基本操作
一、实验目的 1. 熟悉MongoDB的基本操作,包括CRUD(增加、读取、更新、删除)。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…...
Brooks MagnaTran LEAP User Manual 指导半导体机械手
Brooks MagnaTran LEAP User Manual 指导半导体机械手...
【Red Hat8】:搭建DHCP服务器
1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 (搭建的时候用vim 自行定义文件名.repo或者是vi 自行定义文件名.repo) 5、安装dhcp-server 6、复制模板文件 dhcpd.conf 是DHCP服务的配置文件,DHCP服务所有参数都是通过修改dhcpd.co…...
JupyterLab 安装以及部分相关配置
安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…...
深圳桂湾公园的花海
工作日的午休时间我经常骑行到桂湾公园,时不时都能碰上一些阿姨问:小伙子你知道桂湾公园的花海在哪里吗?我找了半天了哈。我发现不少找花海的人是从桂湾地铁或前湾地铁下车,然后在偌大的桂湾公园找寻。其实只要定位前海紫荆园就好…...
寒假刷题Day10
一、220. 存在重复元素 III 两种解法:并没有弄懂,待复盘 class Solution { public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {set<long> st;for (int i 0; i < nums.size(); i) {auto lb st.lower_…...
【Java-图片存储方案】
Java功能相关文章 一、Minio存储大体量图片 上传到Minio指定路径,前端预览时,需要生成临时访问凭证的URL import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.http.Method; import io.minio.GetPresignedObjectUrlArgs; impo…...
机器人传动力系统介绍
以下是对机器人驱动系统的分析、最新科技应用以及世界顶级公司机器人型号使用的技术: 机器人驱动系统分析 液压驱动:利用液体压力来传递动力,通过液压泵将液压油从油箱抽出,送至液压缸,推动活塞运动,进而…...