使用 Clion (cmake) 开发FreeRTOS

news2024/11/28 0:29:49
这里使用的是 f407
1. 先用STM32CubeMX 建立一个可以运行的stm32项目,toolchain选择 SW4STM32
2. 官网下载源码
www.freertos.org
我这里下载的是FreeRTOSv202112.00.zip 
解压缩后得到
需要以下几个文件夹或档案
FreeRTOS/Source下的所有的 .c 档案
FreeRTOS/Source/include
FreeRTOS/Source/portable/GCC/ARM_CM4F
FreeRTOS/Source/portable/MemMang里面的heap_4.c ( 可以参考 FreeRTOS基础二:堆内存管理之heap_4方案_哈士奇上蔚的博客-CSDN博客)
3.. 将 FreeRTOS/Demo/CORTEX_M4F_STM32F407ZG-SK里的FreeRTOSConfig.h拷贝到 FreeRTOS/Source/include 下面
全部需要的档案如下
把FreeRTOS的文件夹放到项目的根目录
4. 修改 FreeRTOSConfig.h
将45行的
#ifdef __ICCARM__
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
修改为
#if defined (__ICCARM__) || defined (__CC_ARM) || defined (__GNUC__)
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
或是直接去掉 #ifdef __ICCARM__的判断
将51行的configUSE_IDLE_HOOK 改为0
将52行的configUSE_TICK_HOOK改为0
将64行的configCHECK_FOR_STACK_OVERFLOW改为0
将66行的configUSE_MALLOC_FAILED_HOOK改为0
5. 修改cmake
在cmake里启用硬件浮点运算单元 FPU
#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
cmake里添加include path
 FreeRTOS/Source/include
 FreeRTOS/Source/portable/GCC/ARM_CM4F
cmake里添加
file(GLOB_RECURSE SOURCES "FreeRTOS/*.*")
6. 将 stm32f4xx_it.c 里的
SVC_Handler
PendSV_Handler
SysTick_Handler
三个方法前面都加上__weak
因为这三个方法在我们添加的 FreeRTOS/Source/portable/GCC/ARM_CM4F/prot.c文件里有定义,会导致重定义
7. 修改main函数运行
以下是代码。完整项目可以在这里下载,硬石YS-F4Pro (f407)开发板可以直接运行
https://download.csdn.net/download/howard789/87177250
cmake
#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
cmake_minimum_required(VERSION 3.23)

# specify cross-compilers and tools
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER  arm-none-eabi-gcc)
set(CMAKE_AR arm-none-eabi-ar)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_OBJDUMP arm-none-eabi-objdump)
set(SIZE arm-none-eabi-size)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

# project settings
project(freeRTOS_demo C CXX ASM)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)

#Uncomment for hardware floating point
add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

#Uncomment for software floating point
#add_compile_options(-mfloat-abi=soft)

add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

# uncomment to mitigate c++17 absolute addresses warnings
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")

# Enable assembler files preprocessing
add_compile_options($<$<COMPILE_LANGUAGE:ASM>:-x$<SEMICOLON>assembler-with-cpp>)

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
    message(STATUS "Maximum optimization for speed")
    add_compile_options(-Ofast)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    message(STATUS "Maximum optimization for speed, debug info included")
    add_compile_options(-Ofast -g)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
    message(STATUS "Maximum optimization for size")
    add_compile_options(-Os)
else ()
    message(STATUS "Minimal optimization, debug info included")
    add_compile_options(-Og -g)
endif ()

include_directories(
        FreeRTOS/Source/include
        FreeRTOS/Source/portable/GCC/ARM_CM4F

        Core/Inc Drivers/STM32F4xx_HAL_Driver/Inc Drivers/STM32F4xx_HAL_Driver/Inc/Legacy Drivers/CMSIS/Device/ST/STM32F4xx/Include Drivers/CMSIS/Include)

add_definitions(-DUSE_HAL_DRIVER -DSTM32F407xx)

file(GLOB_RECURSE SOURCES "startup/*.*" "Drivers/*.*" "Core/*.*" "FreeRTOS/*.*")

set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F407IGTx_FLASH.ld)

add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
add_link_options(-T ${LINKER_SCRIPT})

add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE}
Building ${BIN_FILE}")

main

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "bsp_led.h"

#define USE_FREERTOS  //是否使用freeRTOS

//如果要使用freeRTOS需要注意cmake里include要添加
// FreeRTOS/Source/include
//FreeRTOS/Source/portable/GCC/ARM_CM4F
//且GLOB_RECURSE要添加"FreeRTOS/*.*"
//同时以下的这些要取消注释
//add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
//add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
//add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)

// 如果不使用freeRTOS,上述的要注释掉


#ifdef USE_FREERTOS

#include "FreeRTOS.h"
#include "task.h"


static TaskHandle_t xHandleTaskLED1 = NULL;
static TaskHandle_t xHandleTaskLED2 = NULL;
static TaskHandle_t xHandleTaskLED3 = NULL;

/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
static void vTaskLED1(void *pvParameters);
static void vTaskLED2(void *pvParameters);
static void vTaskLED3(void *pvParameters);
static void AppTaskCreate (void);

void vTaskLED1(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_1,LED_TOGGLE);
        vTaskDelay(1000);
    }
}

void vTaskLED2(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_2,LED_TOGGLE);

        vTaskDelay(2000);
    }
}

void vTaskLED3(void *pvParameters)
{
    while(1)
    {
        LED_StateSet(LED_ID_3,LED_TOGGLE);

        vTaskDelay(3000);
    }
}

void AppTaskCreate (void)
{
    xTaskCreate( vTaskLED1,   	/* 任务函数  */
                 "vTaskLED1",     	/* 任务名    */
                 512,               	/* 任务栈大小,单位word,也就是4字节 */
                 NULL,              	/* 任务参数  */
                 1,                 	/* 任务优先级*/
                 &xHandleTaskLED1 );  /* 任务句柄  */


    xTaskCreate( vTaskLED2,    		/* 任务函数  */
                 "vTaskLED2",  		/* 任务名    */
                 512,         		/* 任务栈大小,单位word,也就是4字节 */
                 NULL,        		/* 任务参数  */
                 2,           		/* 任务优先级*/
                 &xHandleTaskLED2 ); /* 任务句柄  */

    xTaskCreate( vTaskLED3,     		/* 任务函数  */
                 "vTaskLED3",   		/* 任务名    */
                 512,             		/* 任务栈大小,单位word,也就是4字节 */
                 NULL,           		/* 任务参数  */
                 3,               		/* 任务优先级*/
                 &xHandleTaskLED3 );  /* 任务句柄  */

}

#endif
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

    // 初始化LED
    LED_GPIO_Init();


#ifndef USE_FREERTOS
    // 没有用freeRTOS的测试方法
    LED_GPIO_Test();
#else
    // 使用freeRTOS
    AppTaskCreate();

    /* 启动调度,开始执行任务 */
    vTaskStartScheduler();

#endif

}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 168;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}



#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

bsp_led.h

//
// Created by hao on 2022/8/17.
//


#ifndef MY_BASIC_BSP_LED_H
#define MY_BASIC_BSP_LED_H

#include "stm32f4xx_hal.h"

#define LED_1_RCC_CLK_ENABLE()          __HAL_RCC_GPIOH_CLK_ENABLE()
#define LED_1_GPIO_PIN                  GPIO_PIN_9
#define LED_1_GPIOx                     GPIOH

#define LED_2_RCC_CLK_ENABLE()         __HAL_RCC_GPIOE_CLK_ENABLE()
#define LED_2_GPIO_PIN GPIO_PIN_5
#define LED_2_GPIOx GPIOE


#define LED_3_RCC_CLK_ENABLE()          __HAL_RCC_GPIOE_CLK_ENABLE()
#define LED_3_GPIO_PIN                  GPIO_PIN_6
#define LED_3_GPIOx                     GPIOE




typedef enum {
    LED_ON = 0,
    LED_OFF = 1,
    LED_TOGGLE = 2,
}LED_State_TypeDef;


typedef enum {
    LED_ID_1 = 1,
    LED_ID_2 = 2,
    LED_ID_3 = 3,

}LED_ID_TypeDef;


#define IS_LED_ID_TYPEDEF(id)           (((id) == LED_ID_1) || ((id) == LED_ID_2) || (id) == LED_ID_3))
#define IS_LED_State_TypeDef(state)     (((state) == LED_ON) || ((state) == LED_OFF) || ((state) == LED_TOGGLE))

void LED_GPIO_Init();


void LED_StateSet(LED_ID_TypeDef id,LED_State_TypeDef state);

void LED_GPIO_Test();
#endif //USE_LED

bsp_led.c

//
// Created by hao on 2022/8/17.
//

#include "bsp_led.h"
void LED_GPIO_Init(){
    /* 定义IO硬件初始化结构体变量 */
    GPIO_InitTypeDef GPIO_InitStruct;


    LED_1_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_1_GPIOx, LED_1_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_1_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_1_GPIOx, &GPIO_InitStruct);


    LED_2_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_2_GPIOx, LED_2_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_2_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_2_GPIOx, &GPIO_InitStruct);


    LED_3_RCC_CLK_ENABLE();
    HAL_GPIO_WritePin(LED_3_GPIOx, LED_3_GPIO_PIN, GPIO_PIN_RESET);
    GPIO_InitStruct.Pin = LED_3_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(LED_3_GPIOx, &GPIO_InitStruct);

}



void LED_StateSet(LED_ID_TypeDef id,LED_State_TypeDef state){
    assert_param(IS_LED_ID_TYPEDEF(LEDx));
    assert_param(IS_LED_State_TypeDef(LEDx));
    switch (state) {
        case LED_ON:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_WritePin(LED_1_GPIOx,LED_1_GPIO_PIN,GPIO_PIN_SET);break;
                case LED_ID_2:
                    HAL_GPIO_WritePin(LED_2_GPIOx,LED_2_GPIO_PIN,GPIO_PIN_SET);break;

                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_SET);break;

                default:
                    break;
            }
            break;
        case LED_OFF:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_WritePin(LED_1_GPIOx,LED_1_GPIO_PIN,GPIO_PIN_RESET);
                    break;
                case LED_ID_2:
                    HAL_GPIO_WritePin(LED_2_GPIOx,LED_2_GPIO_PIN,GPIO_PIN_RESET);
                    break;

                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_RESET);
                    break;

                default:
                    break;
            }
            break;

        case LED_TOGGLE:
            switch (id) {
                case LED_ID_1:
                    HAL_GPIO_TogglePin(LED_1_GPIOx,LED_1_GPIO_PIN);
                    break;
                case LED_ID_2:
                    HAL_GPIO_TogglePin(LED_2_GPIOx,LED_2_GPIO_PIN);
                    break;

                case LED_ID_3:
                    HAL_GPIO_TogglePin(LED_3_GPIOx,LED_3_GPIO_PIN);
                    break;

                default:
                    break;
            }
            break;
        default:
            break;
    }

}

void LED_GPIO_Test(){
    int count =0;
    while (2){

        switch (count%3) {
            case 0:
                LED_StateSet(LED_ID_1,LED_ON);
                LED_StateSet(LED_ID_2,LED_OFF);
                LED_StateSet(LED_ID_3,LED_OFF);


                break;
            case 1:
                LED_StateSet(LED_ID_1,LED_OFF);
                LED_StateSet(LED_ID_2,LED_ON);
                LED_StateSet(LED_ID_3,LED_OFF);

                break;
            case 2:
                LED_StateSet(LED_ID_1,LED_OFF);
                LED_StateSet(LED_ID_2,LED_OFF);
                LED_StateSet(LED_ID_3,LED_ON);

                break;
            default:
                break;
        }
        count++;
        if(count==1000)count=0;
        HAL_Delay(1000);
    }

}



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

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

相关文章

m基于GA遗传优化的GRNN广义回归神经网络销售数据预测算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着市场经济的发展和全球化&#xff0c;国内外企业面临着越来越残酷的市场竞争&#xff0c;要想赢得竞争&#xff0c;赢得市场&#xff0c;从事商品销售的单位必须在短时间内&#xff0c;以最低…

【图多预警】Pandas绘图函数总结

文章目录简介条形图折线图箱线图直方图饼图散点图和六边形分箱图简介 pandas中提供了plot函数用以绘图&#xff0c;并通过kind参数选择具体的图像类型。 method绘图类别method绘图类别line折线图[默认使用]area堆叠面积图bar纵向条形图barh横向条形图kde概率分布图density概率…

企企通:数字化浪潮下,企业如何利用间接采购策略,实现降本增效?

01、什么是间接采购&#xff1f; 通常&#xff0c;我们将采购分为直接物料和间接物料。 直接采购&#xff1a;用于产品生产及销售的物料与服务的购买&#xff0c;服务于外部客户&#xff0c;也叫生产性采购。如原材料、产品包装、物流服务等。直接采购无论是生产所需的原材料、…

backup (攻防世界)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 解题工具: 浏览器? 问题解析: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 先说一下备份文件 科普时间叕到 网站备份 分…

怎样录屏没有外界杂音?3个十分好用的方法,码住收藏!

在互联网时代&#xff0c;使用电脑娱乐、工作逐渐成为了日常生活的一部分。而其中&#xff0c;电脑录屏是经常使用的功能之一。不过对于电脑录屏领域不熟悉的小伙伴就会问了&#xff1a;“为什么录制的视频会有杂音&#xff0c;怎样录屏没有外界杂音&#xff1f;”别着急&#…

对于xshell连接不上虚拟机的一些解答

如果你发现你可以在虚拟机内ping通 之后&#xff0c;在你电脑dos下也可以ping通。 然而&#xff0c;还是发现你的xshell连接不上虚拟机。 这里使用ifconfig 我发现这个地址是在变化的&#xff0c;之前是129&#xff0c;现在是131&#xff0c;所以这样再到xshell&#xff0c;…

【Java面试】谈谈你对HashMap的理解(Map接口)

文章目录说一下 HashMap 的实现原理&#xff1f;HashMap在JDK1.7和JDK1.8中有哪些不同&#xff1f;HashMap的底层实现&#xff1f;HashMap的put方法的具体流程&#xff1f;HashMap的扩容操作是怎么实现的&#xff1f;HashMap是怎么解决哈希冲突的&#xff1f;能否使用任何类作为…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: rbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/rbegin/ 公有成员函数 <deque> std::deque::rbegin C98 reverse_iterator rbegin(); const_reverse_iterator rbegin() const; C11 reverse_iterator rbegin() noexcept; const_reverse_iterato…

类加载机制和类加载器

文章目录类加载机制为什么需要类加载类加载的时机主动使用——会触发类的初始化被动使用的例子关于接口的初始化类加载详细过程加载链接初始化类加载器类与类加载器,类的实例的关系回顾类的卸载类加载的基本特征类加载器的分类Java虚拟机自带的类加载器用户自定义类加载器Class…

web前端期末大作业 在线电影网页设计与制作 HTML+CSS+JavaScript仿叮当电影网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

【Elasticsearch】kibana 操作es文档详细总结

前言 在上一篇&#xff0c;分享了使用kibana如何对索引进行增删改查等操作&#xff0c;事实上在日常开发与运维中&#xff0c;操作索引毕竟是比较谨慎的事情&#xff0c;但是对于索引中文档的增删查改却是随处可见的&#xff0c;es对文档的操作不仅频繁&#xff0c;而且涉及到…

HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

细说react源码中的合成事件

&#x1f495; 温馨提示: 下边是对React合成事件的源码阅读&#xff0c;全文有点长&#xff0c;但是&#xff01;如果你真的想知道这不为人知的背后内幕&#xff0c;那一定要耐心看下去&#xff01; 最近在做一个功能&#xff0c;然后不小心踩到了 React 合成事件 的坑&#xf…

【 web网页设计期末课程大作业】基于HTML+CSS+JavaScript智慧路灯综合管理系统

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

(附源码)计算机毕业设计Java宠物销售管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

PGL图学习之基于GNN模型新冠疫苗任务[系列九]

PGL图学习之基于GNN模型新冠疫苗任务[系列九] 项目链接&#xff1a;https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributionType1 # 加载一些需要用到的模块&#xff0c;设置随机数 import json import random import numpy as np import pandas as pdimp…

叠氮荧光染料:Azide-FL-BDP|1379771-95-5|BDP FL N3叠氮

BDP FL叠氮化物是一种类似于BODIPY FL叠氮化物的荧光染料&#xff0c;是一种具有点击化学性质的荧光染料。该荧光团是硼二吡咯甲基类荧光染料的代表&#xff0c;在水环境中具有较高的量子产率。azide系列产品包括可用于进一步连接的azide-acid&#xff1b;azide-amine&#xff…

CDGA|促进数据生产要素在大湾区自由流动,培养数据治理人才先行

在数字经济时代&#xff0c;数据已经成为社会经济发展的关键要素&#xff0c;是世界各国竞相争夺的基础性战略资源。 探究如何在掌握数字经济自主权基础上优化跨境数据流动的路径&#xff0c;需要考虑平衡跨境数据流动所引起的数据主权、数据保护和数据自由流动的利益冲突&…

李铁不用归化球员的真正原因 #小姐姐爱体育#第9部

中国自古以来是人情社会&#xff0c;不论走到哪里都要讲关系&#xff0c;只要你有足够铁的关系&#xff0c;就没有办不了的事情。不过对于中国男足前教练来说&#xff0c;虽然他的名字叫作李铁&#xff0c;但是办的事情却不是关系很铁的所作所为。 在李铁上任国家队总教练之前&…

【学习笔记51】ES6的新增属性Set和Map

一、Set set类似于数组的一种数据结构&#xff0c;内部按照索引排序(但是不能通过索引取值)语法&#xff1a;let s new Set([数据1, 数据2, 数据3])特点: 天生不支持重复数据 let arr [1, 2, 2, 3, 4, 4, 4, 3];let s new Set(arr);console.log(原数组&#xff1a;,arr);con…