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

STM32移植FreeRTOS操作系统

一、FreeRTOS源码下载

(1)移植钱得准备前菜对吧,我们先来去官网瞄一瞄

网址:https://freertos.org/zh-cn-cmn-s/

第一步:点击下载FreeRTOS

第二步:选择版本下载(我选择稳定版本)

注:我们下载的稳定版本不包含DEMO例程,可以自己下载上面的那个最新版本,有官方移植好的DEMO,那么最新版本下载过程如下图:

但是,这时候下载完成的压缩波其实并不包含FreeRTOS的子模块。所以,在该页面向下翻找。

第三步:回到我们下载稳定版本的路上,选择GitHub,复制网址可

到这里前菜算是准备完毕了。

二、添加内核文件

第一步:准备一个STM32工程,这里工程越简洁越好(可以参考之前写的创建工程理论与实践偏:

https://blog.csdn.net/qq_38295600/article/details/129372829

https://blog.csdn.net/qq_38295600/article/details/129372829)

第二步:准备好工程后,创建一个FreeRTOS文件夹

第三步:打开刚才下载好的稳定版本文件,路径:FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel将里面内容复制出来

第四步:将内容粘贴到工程中得FreeRTOS文件中

为了简洁好看,我们在创建个source文件夹把这些.c文件放到这里面

外部这些文件有删除或者留着看自己

现在FreeRTOS源码被我们分成了三个目录,分别是①include目录;②portable目录;③source目录

这里 分析一下 FreeRTOS源码结构,①和③包含的是FreeRTOS核心功能源文件及头文件 .c和.h,这两部分的文件试用于各种编译器和处理器,是通用的,基本不需要修改,②为需要移植修改的目录,这与编译器和所使用的CPU有关,属于RTOS硬件接口层。

我们知道 FreeRTOS 是个系统,归根结底就是个纯软件的东西,它是怎么和硬件

联系在一起的呢?软件到硬件中间必须有一个桥梁,portable 文件夹里面的东西就是 FreeRTOS

系统和具体的硬件之间的连接桥梁!不同的编译环境,不同的 MCU,其桥梁应该是不同的,打

开 portable 文件夹,我们现在用的MDK,所以我们只需要

最终保留如下这三个文件

第五步:文件添加到工程

注:MemMang 是跟内存管理相关的,里面有 5 个 c 文件:heap_1.c、heap_2.c、heap_3.c、heap_4.c 和 heap_5.c。

这 5 个 c 文件是五种不同的内存管理方法,就像从北京到上海你可以坐火车、坐飞机,如果心情好的话也可以走路,反正有很多种方法,只要能到上海就行。这里也一样的,这 5 个文件都可以用来作为FreeRTOS 的内存管理文件,只是它们的实现原理不同,各有利弊。这里我们选择 heap_4.c,具体可以看看原子的讲解内存视频。

然后由于我用的是stm32f1内核是M3,所以选择如下

第六步:编译工程

直接编译(出现9个错误)这是因为缺少 FreeRTOSConfig.h 文件

FreeRTOS的裁剪主要依靠FreeRTOSConfig.h中的宏定义去完成,需要什么功能就打开对应的宏就可以了。

现在我们需要一个FreeRTOSConfig.h文件。但在源码FreeRTOS-Kernel目录下没有提供config文件。

那么哪里找呢?

我们打开最开始下载好的FreeRTOS文件(最开始下载我们下载了三个文件)

打开第一个FreeRTOS->路径:FreeRTOS\FreeRTOS\Demo

在demo目录下找到对应内核目录下的demo(可能是其它MCU,不要紧)拷贝一个FreeRTOSConfig.h文件到本地source\FreeRTOS\include目录内

重新编译没有错

三、修改工程

虽然没有错误了,但是我们的移植没有完成,还有一些小步骤需要完成,的确有些繁琐,好在逻辑性还是比较强的,理解起来相对容易。

第一步:

在FreeRTOSConfig.h中添加#define xPortPendSVHandler PendSV_Handler

在FreeRTOSConfig.h中添加#define vPortSVCHandler SVC_Handler

编译,还是报错,重复定义

第二步:处理错误: 进入对应的文件stm32f1xx_it.c屏蔽重复的3个函数

把SysTick_Handler也屏蔽起来是因为,等下我们要建立一个Bsp_SysTick.c,到时候这个中断函数也会放在这里面,所以我在这里也给他屏蔽了

重新编译

到这里,算移植成功了!!!,后面还需要做配置操作

四、滴答时钟配置

SysTick中断服务函数是一个非常重要的函数,FreeRTOS所有跟时间相关的事情都在里面处理,SysTick就是FreeRTOS的一个心跳时钟,驱动着FreeRTOS的运行,如果FreeRTOS没有了心跳,那么它就会卡死在某个地方,不能进行任务调度,不能运行任何的东西,因此我们需要实现一个FreeRTOS的心跳时钟

所以我们创建一个

BSP_SysTick.h 和一个BSP_SysTick.c

.c直接上代码块:

#include "BSP_SysTick.h"
#include "FreeRTOS.h"
#include "task.h"
static u8  fac_us=0;//us延时倍乘数   
static u16 fac_ms=0;//ms延时倍乘数,在ucos下,代表每个节拍的ms数
extern void xPortSysTickHandler(void);
//systick中断服务函数,使用ucos时用到
void SysTick_Handler(void)
{if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行{xPortSysTickHandler();}
}//初始化延迟函数
//SYSTICK的时钟固定为AHB时钟,基础例程里面SYSTICK时钟频率为AHB/8
//这里为了兼容FreeRTOS,所以将SYSTICK的时钟频率改为AHB的频率!
//SYSCLK:系统时钟频率
void delay_init()
{
u32 reload;
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择外部时钟  HCLK
fac_us=SystemCoreClock/1000000;//不论是否使用OS,fac_us都需要使用
reload=SystemCoreClock/1000000;//每秒钟的计数次数 单位为M  
reload*=1000000/configTICK_RATE_HZ;//根据configTICK_RATE_HZ设定溢出时间
//reload为24位寄存器,最大值:16777216,在72M下,约合0.233s左右
fac_ms=1000/configTICK_RATE_HZ;//代表OS可以延时的最少单位   
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   //开启SYSTICK中断
SysTick->LOAD=reload; //每1/configTICK_RATE_HZ秒中断一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;   //开启SYSTICK    
}

.h代码块

#ifndef _BSP_SYSTICK_H
#define _BSP_SYSTICK_H
#include "stm32f10x.h"
#include "stdio.h"//0,不支持os
//1,支持os
#define SYSTEM_SUPPORT_OS        1        //定义系统文件夹是否支持OSvoid BSP_SysTickInit(void);#endif

然后我们编译下:成功报错,说明还有问题

这里显示“xTaskGetSchedulerState”这个找不到,可是我们明明声明了头文件

#include "FreeRTOS.h"//FreeRTOS使用

#include "task.h"

这两个,还是报错,那么经过查找关键点在于“FreeRTOSCongfig.h”的配置

新增上这一句,编译就通过了

那么说明一个问题,我们的FreeRTOSCongfig.h配置不完善,得改良,早这里先引用原子的配置,我们先以这个配置进行更新,后面在专门写一篇关于FreeRTOSCongfig.h的功能介绍

更新“FreeRTOSCongfig.h”

/*FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.All rights reservedVISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.This file is part of the FreeRTOS distribution.FreeRTOS is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License (version 2) as published by theFree Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.***************************************************************************>>!   NOTE: The modification to the GPL is included to allow you to     !<<>>!   distribute a combined work that includes FreeRTOS without being   !<<>>!   obliged to provide the source code for proprietary components     !<<>>!   outside of the FreeRTOS kernel.                                   !<<***************************************************************************FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  Full license text is available on the followinglink: http://www.freertos.org/a00114.html****************************************************************************                                                                       **    FreeRTOS provides completely free yet professionally developed,    **    robust, strictly quality controlled, supported, and cross          **    platform software that is more than just the market leader, it     **    is the industry's de facto standard.                               **                                                                       **    Help yourself get started quickly while simultaneously helping     **    to support the FreeRTOS project by purchasing a FreeRTOS           **    tutorial book, reference manual, or both:                          **    http://www.FreeRTOS.org/Documentation                              **                                                                       ****************************************************************************http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by readingthe FAQ page "My application does not run, what could be wrong?".  Have youdefined configASSERT()?http://www.FreeRTOS.org/support - In return for receiving this top qualityembedded software for free we request you assist our global community byparticipating in the support forum.http://www.FreeRTOS.org/training - Investing in training allows your team tobe as productive as possible as early as possible.  Now you can receiveFreeRTOS training directly from Richard Barry, CEO of Real Time EngineersLtd, and the world's leading authority on the world's leading RTOS.http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,including FreeRTOS+Trace - an indispensable productivity tool, a DOScompatible FAT file system, and our tiny thread aware UDP/IP stack.http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to HighIntegrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOSlicenses offer ticketed support, indemnification and commercial middleware.http://www.SafeRTOS.com - High Integrity Systems also provide a safetyengineered and independently SIL3 certified version for use in safety andmission critical applications that require provable dependability.1 tab == 4 spaces!
*/#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H#include "BSP_Uart.h"      
//针对不同的编译器调用不同的stdint.h文件
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)#include <stdint.h>extern uint32_t SystemCoreClock;
#endif//断言
#define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int)
#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)/***************************************************************************************************************/
/*                                        FreeRTOS基础配置配置选项                                              */
/***************************************************************************************************************/
#define configUSE_PREEMPTION                    1                       //1使用抢占式内核,0使用协程
#define configUSE_TIME_SLICING                    1                        //1使能时间片调度(默认式使能的)
#define configUSE_PORT_OPTIMISED_TASK_SELECTION    1                       //1启用特殊方法来选择下一个要运行的任务//一般是硬件计算前导零指令,如果所使用的//MCU没有这些硬件指令的话此宏应该设置为0!
#define configUSE_TICKLESS_IDLE                    0                       //1启用低功耗tickless模式
#define configUSE_QUEUE_SETS                    1                       //为1时启用队列
#define configCPU_CLOCK_HZ                        (SystemCoreClock)       //CPU频率
#define configTICK_RATE_HZ                        (1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms
#define configMAX_PRIORITIES                    (32)                    //可使用的最大优先级
#define configMINIMAL_STACK_SIZE                ((unsigned short)130)   //空闲任务使用的堆栈大小
#define configMAX_TASK_NAME_LEN                    (16)                    //任务名字字符串长度#define configUSE_16_BIT_TICKS                    0                       //系统节拍计数器变量数据类型,//1表示为16位无符号整形,0表示为32位无符号整形
#define configIDLE_SHOULD_YIELD                    1                       //为1时空闲任务放弃CPU使用权给其他同优先级的用户任务
#define configUSE_TASK_NOTIFICATIONS            1                       //为1时开启任务通知功能,默认开启
#define configUSE_MUTEXES                        1                       //为1时使用互斥信号量
#define configQUEUE_REGISTRY_SIZE                8                       //不为0时表示启用队列记录,具体的值是可以//记录的队列和信号量最大数目。
#define configCHECK_FOR_STACK_OVERFLOW            0                       //大于0时启用堆栈溢出检测功能,如果使用此功能//用户必须提供一个栈溢出钩子函数,如果使用的话//此值可以为1或者2,因为有两种栈溢出检测方法。
#define configUSE_RECURSIVE_MUTEXES                1                       //为1时使用递归互斥信号量
#define configUSE_MALLOC_FAILED_HOOK            0                       //1使用内存申请失败钩子函数
#define configUSE_APPLICATION_TASK_TAG            0                       
#define configUSE_COUNTING_SEMAPHORES            1                       //为1时使用计数信号量/***************************************************************************************************************/
/*                                FreeRTOS与内存申请有关配置选项                                                */
/***************************************************************************************************************/
#define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持动态内存申请
#define configTOTAL_HEAP_SIZE                    ((size_t)(20*1024))     //系统所有总的堆大小/***************************************************************************************************************/
/*                                FreeRTOS与钩子函数有关的配置选项                                              */
/***************************************************************************************************************/
#define configUSE_IDLE_HOOK                        0                       //1,使用空闲钩子;0,不使用
#define configUSE_TICK_HOOK                        0                       //1,使用时间片钩子;0,不使用/***************************************************************************************************************/
/*                                FreeRTOS与运行时间和任务状态收集有关的配置选项                                 */
/***************************************************************************************************************/
#define configGENERATE_RUN_TIME_STATS            0                       //为1时启用运行时间统计功能
#define configUSE_TRACE_FACILITY                1                       //为1启用可视化跟踪调试
#define configUSE_STATS_FORMATTING_FUNCTIONS    1                       //与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数//prvWriteNameToBuffer(),vTaskList(),//vTaskGetRunTimeStats()/***************************************************************************************************************/
/*                                FreeRTOS与协程有关的配置选项                                                  */
/***************************************************************************************************************/
#define configUSE_CO_ROUTINES                     0                       //为1时启用协程,启用协程以后必须添加文件croutine.c
#define configMAX_CO_ROUTINE_PRIORITIES         ( 2 )                   //协程的有效优先级数目/***************************************************************************************************************/
/*                                FreeRTOS与软件定时器有关的配置选项                                            */
/***************************************************************************************************************/
#define configUSE_TIMERS                        1                               //为1时启用软件定时器
#define configTIMER_TASK_PRIORITY                (configMAX_PRIORITIES-1)        //软件定时器优先级
#define configTIMER_QUEUE_LENGTH                5                               //软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH            (configMINIMAL_STACK_SIZE*2)    //软件定时器任务堆栈大小/***************************************************************************************************************/
/*                                FreeRTOS可选函数配置选项                                                      */
/***************************************************************************************************************/
#define INCLUDE_xTaskGetSchedulerState          1                       
#define INCLUDE_vTaskPrioritySet                1
#define INCLUDE_uxTaskPriorityGet                1
#define INCLUDE_vTaskDelete                        1
#define INCLUDE_vTaskCleanUpResources            1
#define INCLUDE_vTaskSuspend                    1
#define INCLUDE_vTaskDelayUntil                    1
#define INCLUDE_vTaskDelay                        1
#define INCLUDE_eTaskGetState                    1
#define INCLUDE_xTimerPendFunctionCall            1/***************************************************************************************************************/
/*                                FreeRTOS与中断有关的配置选项                                                  */
/***************************************************************************************************************/
#ifdef __NVIC_PRIO_BITS#define configPRIO_BITS               __NVIC_PRIO_BITS
#else#define configPRIO_BITS               4                  
#endif#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY            15                      //中断最低优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY    5                       //系统可管理的最高中断优先级
#define configKERNEL_INTERRUPT_PRIORITY         ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY     ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )/***************************************************************************************************************/
/*                            移植添加的,FreeRTOS与中断服务函数有关的配置选项                                  */
/***************************************************************************************************************/
#define xPortPendSVHandler     PendSV_Handler
#define vPortSVCHandler     SVC_Handler#endif /* FREERTOS_CONFIG_H */

到这里我们总体的移植算是完成了!

五、创建任务,点灯实验启动

上代码块:

#include "main.h"
#include "BSP_SysTick.h"    
#include "BSP_Gpio.h"
#include "BSP_Uart.h"     
/* FreeRTOS头文件 */
#include "FreeRTOS.h"
#include "task.h"#define START_TASK_PRIO        1                    //任务优先级
#define START_STK_SIZE         128              //任务栈大小    
TaskHandle_t StartTask_Handler;            //任务句柄
void start_task(void *pvParameters);//任务函数#define LED0_TASK_PRIO        2                    //任务优先级
#define LED0_STK_SIZE         50              //任务栈大小    
TaskHandle_t LED0Task_Handler;            //任务句柄
void led0_task(void *pvParameters);    //任务函数#define LED1_TASK_PRIO        3                    //任务优先级
#define LED1_STK_SIZE         50              //任务栈大小    
TaskHandle_t LED1Task_Handler;            //任务句柄
void led1_task(void *pvParameters);    //任务函数void BoardInit(void)
{BSP_SysTickInit();BSP_GpioInit();BSP_UartInit(115200);
}//开始任务任务函数
void start_task(void *pvParameters)
{taskENTER_CRITICAL();           //进入临界区//创建LED0任务xTaskCreate((TaskFunction_t )led0_task,         (const char*    )"led0_task",       (uint16_t       )LED0_STK_SIZE, (void*          )NULL,                (UBaseType_t    )LED0_TASK_PRIO,    (TaskHandle_t*  )&LED0Task_Handler);   //创建LED1任务xTaskCreate((TaskFunction_t )led1_task,     (const char*    )"led1_task",   (uint16_t       )LED1_STK_SIZE, (void*          )NULL,(UBaseType_t    )LED1_TASK_PRIO,(TaskHandle_t*  )&LED1Task_Handler);         vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL();            //退出临界区
}int main(void)
{    
//  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */BoardInit();printf("Welcome to FreeRTOS,CoreClock:%d\r\n",SystemCoreClock);//创建开始任务xTaskCreate((TaskFunction_t )start_task,            //任务函数(const char*    )"start_task",          //任务名称(uint16_t       )START_STK_SIZE,        //任务堆栈大小(void*          )NULL,                  //传递给任务函数的参数(UBaseType_t    )START_TASK_PRIO,       //任务优先级(TaskHandle_t*  )&StartTask_Handler);   //任务句柄              vTaskStartScheduler();                                                     //开启任务调度   
}//LED0任务函数 
void led0_task(void *pvParameters)
{while(1){BSP_SetLed0(2);vTaskDelay(500);}
}   //LED1任务函数
void led1_task(void *pvParameters)
{while(1){BSP_SetLed1(2);vTaskDelay(800);}
}

编译完成

可以看到输出信息正常,同时开发板指示灯在循环闪烁

到此整个FreeRTOS移植完成!!!

六、附录:完整的工程代码

链接:https://pan.baidu.com/s/1DDstmG_wbpAjl8WUP2SxiQ

提取码:c518

相关文章:

STM32移植FreeRTOS操作系统

一、FreeRTOS源码下载&#xff08;1&#xff09;移植钱得准备前菜对吧&#xff0c;我们先来去官网瞄一瞄网址&#xff1a;https://freertos.org/zh-cn-cmn-s/ 第一步&#xff1a;点击下载FreeRTOS第二步&#xff1a;选择版本下载&#xff08;我选择稳定版本&#xff09;注&…...

【专项训练】泛型递归、树的递归

递归和循环没有明显的边界! 不要进行人肉递归! 找最近重复子问题,直接写递归! 数学归纳法思维:1,2,…… 70. 爬楼梯 https://leetcode.cn/problems/climbing-stairs/ 互斥,且加在一起是全部答案! 动态规划法:用数组做递推,就是动态规划!!! class Solution...

React18 setState是同步还是异步?

相信大家对于react的setState肯定是不陌生了, 这是一个用于更新状态的函数. 但是在之前有一道非常经典的面试题就是关于setState是同步还是异步的问题, 具体可以参考我之前写的一篇文章: 一篇文章彻底理解setState是同步还是异步&#xff01;. 对于react 18之前的版本, 上文说的…...

Kafka消费者 TCP管理

Kafka消费者 TCP管理创建 TCPFindCoordinator连接协调者消费数据TCP 连接数关闭 TCP 连接消费者的程序入口类是 KafkaConsumer 构建 KafkaConsumer 时 &#xff0c;不会创建任何 TCP 连接TCP 连接是用 KafkaConsumer.poll 创建 创建 TCP poll 创建 TCP 的地方 : 发起 FindC…...

软考高级备考哪一个类型好些?

软考高级是比中级和初级难&#xff0c;科目就要考三科&#xff0c;选择题基础知识简答题案例分析写作论文 软考高级科目有&#xff1a;信息系统项目管理师、系统分析师、系统架构设计师、网络规划师、系统规划与管理师。如下&#xff1a; 软考高级中高项信息系统项目管理师师比…...

2023 HBU 天梯赛第一次测试 题目集

目录 1 建校日期 2 发射小球 3 背上书包去旅行 4 吉利的数字 5 向前走 6 热水器 7 走方格 8 朋友圈 9 交保护费 10 走方格 11 和与积 12 缩短字符串 13 买木棒 1 建校日期 在2022 ICPC沈阳站上&#xff0c;东北大学命题组给参赛的选手们出了一道签到题&#xff0…...

华为OD机试题,用 Java 解【子序列长度】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...

内网环境解决SSL证书问题

本来这个没什么好写的&#xff0c;但是坑实在有点多&#xff0c;不得不写个文章记录下来。 创建证书看这里&#xff01;&#xff01;&#xff01; 很多知识点要结合这个页面内容来看。 创建证书已经看过相关文章&#xff0c;然后用unity跑的时候发现连不上&#xff0c;完全没…...

数据分析方法01对比分析法

对比分析法 1、概念 基于相同的数据标准下&#xff0c;把两个及以上相互联系的指标数据进行比较&#xff0c;准确量化的分析他们的差异&#xff0c;说明研究对象在规模大小&#xff0c;水平高低&#xff0c;速度快慢等的不同表现&#xff0c;目的是为了找到差异的原因&#x…...

基于SMOKE多模式排放清单处理技术及EDGAR/MEIC清单制作与VOCs排放量核算

查看原文>>>基于SMOKE多模式排放清单处理技术及EDGAR/MEIC清单制作与VOCs排放量核算 (qq.com)随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。近年来&#xff0c;严重的大气污染问题已经明显影响国计民生&#xff0c;引起政府、学界和人们越来越…...

CSS流动布局-页面自适应

项目中经常会碰到页面自适应的问题&#xff0c;例如&#xff1a;商城的列表展示、分类列表展示等页面&#xff0c;如下&#xff1a; 该页面会随着页面的放大缩小而随之发生变化&#xff0c;这种自适应的页面布局在大屏幕、小屏幕、不同的浏览器设备上都应该呈现出与设计匹配的…...

3.Elasticsearch初步进阶

3.Elasticsearch初步进阶[toc]1.文档批量操作批量获取文档数据批量获取文档数据是通过_mget的API来实现的在URL中不指定index和type请求方式:GET请求地址:_mget功能说明:可以通过ID批量获取不同index和type的数据请求参数docs:文档数组参数_index:指定index_type:指定type_id:指…...

优思学院|六西格玛管理的核心理念是什么?

六西格玛管理是一种基于数据分析的质量管理方法&#xff0c;旨在通过降低过程的变异性来达到质量稳定和优化的目的。该方法以希腊字母“σ”为名&#xff0c;代表标准差&#xff0c;是衡量过程变异性的重要指标。 六西格玛管理的核心理念是“以客户为中心、以数据为基础、追求…...

第十七节 多态

多态 什么是多态? ●同类型的对象&#xff0c;执行同一个行为&#xff0c;会表现出不同的行为特征。 多态的常见形式 父类类型 对象名称new子类构造器; 接口 对象名称new 实现类构造器; 多态中成员访问特点 ●方法调用:编译看左边&#xff0c;运行看右边。 ●变量调用:编译看…...

[vue]提供一种网站底部备案号样式代码

演示 vue组件型&#xff08;可直接用&#xff09; 组件代码&#xff1a;copyright-icp.vue <template><div class"icp">{{© ${year} ${author} }}<a href"http://beian.miit.gov.cn/" target"_blank">{{ record }}</a…...

python第四天作业~函数练习

目录 作业4、判断以下哪些不能作为标识符 A、a B、&#xffe5;a C、_12 D、$a12 E、false F、False 作业5&#xff1a; 输入数&#xff0c;判断这个数是否是质数&#xff08;要求使用函数 for循环&#xff09; 作业6&#xff1a;求50~150之间的质数是…...

linux安装influxdb-rpmyum方式

一、influxdb的安装InfluxDB简介时序数据库InfluxDB版是一款专门处理高写入和查询负载的时序数据库&#xff0c;用于存储大规模的时序数据并进行实时分析&#xff0c;包括来自DevOps监控、应用指标和IoT传感器上的数据主要特点&#xff1a;专为时间序列数据量身订造高性能数据存…...

死锁

1.死锁的定义 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而&#xff0c;并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局&#xff08;互相等待&#xff09;&#xff0c;若无外力作用&#xff0c;这些进程都将无法…...

C++基础了解-05-C++常量

C常量 一、C常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进…...

深度学习笔记-2.自动梯度问题

通过反向传播进行自动求梯度1-requires_grad问题2-梯度3- detach() 和 with torch.no_grad(&#xff09;4- Tensor.data.requires_gradPyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图&#xff0c;并执行反向传播. 1-requires_grad问题 requires_gradTrue …...

一文读懂倒排序索引涉及的核心概念

基础概念相信对于第一次接触Elasticsearch的同学来说&#xff0c;最难理解的概念就是倒排序索引&#xff08;也叫反向索引&#xff09;&#xff0c;因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的&#xff01;在这里我就重点给大家介绍一下倒排序索引&…...

Java基础算法题

以创作之名致敬节日 胜固欣然&#xff0c;败亦可喜。 --苏轼 目录 练习1 : 优化代码 扩展 : CRTL Alt M 自动抽取方法 练习2: 方法一: 方法二: 方法三: Math : 顾名思义&#xff0c;Math类就是用来进行数学计算的&#xff0c;它提供了大量的静态方法来便于我们实…...

「SAP ABAP」你真的了解OPEN SQL的DML语句吗 (附超详细案例讲解)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…...

数据结构3——线性表2:线性表的顺序结构

顺序结构的基本理解 定义&#xff1a; 把逻辑上相邻的数据元素存储在物理上相邻&#xff08;占用一片连续的存储单元&#xff0c;中间不能空出来&#xff09;的存储单元的存储结构 存储位置计算&#xff1a; LOC(a(i1))LOC(a(i))lLOC(a(i1))LOC(a(i))l LOC(a(i1))LOC(a(i))l L…...

VMware虚拟机搭建环境通用方法

目录一、前期准备1.下载并安装一个虚拟机软件二、开始创建虚拟机1.配置虚拟机硬件相关操作2.虚拟机网络相关操作三、开机配置相关内容0.开机遇到报错处理&#xff08;选看--开机没有报错请忽略&#xff09;1.开始配置2.开机之后配置3.使用xshell远程登录4.使用xshell配置虚拟机…...

2.Fully Convolutional Networks for Semantic Segmentation论文记录

欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 文章目录1.基础介绍2.分类网络转换成全卷积分割网络3.转置卷积进行上采样4.特征融合5.一个pytorch源码实现参考资料1.基础介绍 论文:Fully Convolutional Networks for Semantic Segmentati…...

深度解析Spring Boot自动装配原理

废话不多说了&#xff0c;直接来看源码。源码解析SpringBootApplication我们在使用idea创建好Spring Boot项目时&#xff0c;会发现在启动类上添加了SpringBootApplication注解&#xff0c;这个注解就是Spring Boot的核心所在。点击注解可以查看到到它的实现ementType.TYPE) Re…...

Redis性能分析相关-channel=[id: 0xbee27bd4, L:/127.0.0.1:63156

redis宕机...

Linux:环境变量

目录一、环境变量的理解&#xff08;1&#xff09;什么是环境变量&#xff1f;&#xff08;2&#xff09;Linux中的环境变量二、环境变量的使用&#xff08;1&#xff09;PATH环境变量&#xff08;2&#xff09;和变量相关的指令三、环境变量与普通变量的区别在平时使用电脑的时…...

Codeforces Round 703 (Div. 2)(A~D)

A. Shifting Stacks给出一个数组&#xff0c;每次可以将一个位置-1&#xff0c;右侧相邻位置1&#xff0c;判断是否可以经过若干次操作后使得数列严格递增。思路&#xff1a;对于每个位置&#xff0c;前缀和必须都大于该位置应该有的最少数字&#xff0c;即第一个位置最少是0&a…...