使用 Clion (cmake) 运行FreeRTOS

news2025/1/31 8:16:16
这里使用的是 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 "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "bsp_led.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 );  /* 任务句柄  */

}


/* 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();

    // 没有用freeRTOS的测试方法
//    LED_GPIO_Test();

    // 使用freeRTOS
    AppTaskCreate();

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



}

/**
  * @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 <stdbool.h>
#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;
#ifdef USE_LED3
                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_SET);break;
#endif
                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;
#ifdef USE_LED3
                case LED_ID_3:
                    HAL_GPIO_WritePin(LED_3_GPIOx,LED_3_GPIO_PIN,GPIO_PIN_RESET);
                    break;
#endif
                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;
#ifdef USE_LED3
                case LED_ID_3:
                    HAL_GPIO_TogglePin(LED_3_GPIOx,LED_3_GPIO_PIN);
                    break;
#endif
                default:
                    break;
            }
            break;
        default:
            break;
    }

}

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

        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/39792.html

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

相关文章

【附源码】计算机毕业设计JAVA在线图书超市

【附源码】计算机毕业设计JAVA在线图书超市 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

算法刷题打卡第28天:省份数量---广度优先搜索

省份数量 难度&#xff1a;中等 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不…

BP神经网络PID控制从Simulink仿真到PLC控制实现(含博途PLC完整SCL源代码)

单神经元自适应PID控制博途PLC完整源代码,请参看下面的文章链接: 博途PLC单神经元自适应PID控制_RXXW_Dor的博客-CSDN博客_单神经元pid控制1、单神经元作为构成神经网络的基本单位,具有自学习和自适应能力,且结构简单易于计算,传统的PID具有结构简单、调整方便和参数整定…

数据结构 | 树和二叉树的基本概念和性质【考点精析】

树和二叉树&#x1f333;树&#x1f343;树的概念&#x1f343;树的相关概念&#x1f343;树的性质和常用公式总结 ⭐⭐⭐⭐⭐&#x1f343;树的表示&#x1f343;树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09;&#x1f333;二叉树&#x1f343;二叉树的概…

我与世界杯足球那些事——世界杯征文

征文活动链接&#xff1a; https://bbs.csdn.net/topics/609601920 目录 第一次了解世界杯 第一次观看世界杯 世界杯主题曲 我最热爱的球员 今年世界杯 预测冠军 第一次了解世界杯 提起世界杯&#xff0c;我可能了解的比较晚一些&#xff0c;是在2014年的巴西世界杯的时…

浏览器扩展课程Manifest V3升级版

大家好&#xff0c;经过一段时间的整理&#xff0c;我的《浏览器扩展插件开发》视频课程做了全新的升级。之前的课程也收到了很多反馈。因为Chrome浏览器扩展发布了最新的Manifest V3标准&#xff0c;简写MV3&#xff0c;也发布了新的路线图。2022年1月份开始不接受新的MV2版本…

人工智能CV应用现状与发展 - 讲座记录

简单介绍 ✅CV应用现状与发展前景如何&#xff1f; ✅算法工程师如何自我修炼&#xff1f; CV应用现状与发展前景如何&#xff1f; 模型训练好后&#xff0c;新增场景case,则需要再次进行模型训练。模型固化。 硬件部署&#xff0c;也固化&#xff0c;不同模型部署在不同硬件…

12.PGL图学习之项目实践(UniMP算法实现论文节点分类、新冠疫苗项目实战,助力疫情)[系列九]

原项目链接&#xff1a;https://aistudio.baidu.com/aistudio/projectdetail/5100049?contributionType1 1.图学习技术与应用 图是一个复杂世界的通用语言&#xff0c;社交网络中人与人之间的连接、蛋白质分子、推荐系统中用户与物品之间的连接等等&#xff0c;都可以使用图…

高并发场景下更新数据库报错,记录一次 MySQL 死锁问题的解决

今天隔壁项目组的开发小姐姐找到我&#xff0c;说她们项目正在做压力测试&#xff0c;更新 MySQL 数据库的一张表时&#xff0c;总是发生死锁&#xff0c;日志大概是这个样子的&#xff1a; org.springframework.dao.DeadlockLoserDataAccessException: ### Error updating d…

Java常用类(一)

目录 字符串相关的类 一、String String的特性 String不可变性的体现 String的实例化方式一&#xff1a;字面量的定义方式 String实例化方式二&#xff1a;通过new构造器的方式 字符串的特性 String使用陷阱 面试题 String的常用方法 ​编辑 String与基本数据类型转换 …

TFT-LCD LVGL官方例程的应用

TFT-LCD LVGL官方例程的应用 移植完lvgl的源码和驱动后&#xff0c;就可以试着调用lvgl的官方例程来运行了&#xff1b;例程的目录如下 官方demo是一些比较完整的界面&#xff0c;文件夹里面有.gif的动态图展示&#xff0c;而类型和小部件适合根据需要做一个自己喜欢的界面&am…

TensorRT--学习笔记

官方文档是最权威的TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个C推理框架。利用Pytorch、TF或者其他框架训练好的模型&#xff0c;可以转化为TensorRT的格式&#xff0c;然后利用TensorRT推理引擎去运行我们这个模型&#xff0c;从而提升这个模型在英伟达GPU上运行的速…

【学习笔记38】JavaScript中的本地存储

一、localStorage 浏览器的本地存储(永久存储), 打开浏览器存储上之后, 关闭浏览器, 信息还在语法&#xff1a;window.localStorage.setItem(key, value)注意: value的值必须为字符串key的书写符合见名知意 window.localStorage.setItem(ceshi1, 1111111);window.localStorage.…

16.预处理、动态库、静态库

C语言编译过程 1.预处理 将.c中的头文件展开、宏展开 生成的文件是.i文件 2.编译 将预处理之后的.i文件生成.s汇编文件 3.汇编 将.s汇编文件生成.o目标文件 4.链接 将.o文件链接成目标文件&#xff08;可执行程序&#xff09; Linux下GCC编译器编译过程 gcc -E hello.c -o he…

C++11标准模板(STL)- 算法(std::upper_bound)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回指向第一个大于给定值…

[附源码]Python计算机毕业设计钓鱼爱好者交流平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java项目:电器商城系统(java+SSM+JSP+jQuery+javascript+Mysql)

源码获取&#xff1a;俺的博客首页 "资源" 里下载&#xff01; 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 修改个人信息,员工信息管理,商品管理,图片管理,图表管理,用户…

解决vscode远程安装插件不了、安装太慢问题

一、问题描述 一直显示正在安装&#xff0c;几个小时也没动静&#xff0c;特别是那个c/c插件的安装。 二、解决方法 1、采用手动安装插件的方式 步骤&#xff1a; ①、先去这个网站找你要安装的插件&#xff0c;然后下载到本地电脑。 All categories Extensions - Visual Studi…

分汤000

题目链接 分汤 题目描述 注意 没有提供 0ml 的 汤A 和 100ml 的 汤B 这种操作如果汤的剩余量不足以完成某次操作&#xff0c;我们将尽可能分配 解答思路 由题意得&#xff0c;首先想到的是动态规划&#xff0c;关键是规律以及终止条件是怎样的由于分汤都是在25的倍数上进行…

内点法最优潮流matlab程序

内点法最优潮流matlab程序 一、概述最优潮流问题 1.最优潮流和基本潮流的比较潮流计算可以归结为针对一定的扰动变量p(负荷情况)&#xff0c;根据给定的控制变量u(如发电机的有功出力、无功出力或节点电压模值等)&#xff0c;求出相应的状态变量x(如节点电压模值及角度)&#x…