使用 Clion (cmake) 开发FreeRTOS

2023-05-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 "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);
    }

}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Clion (cmake) 开发FreeRTOS 的相关文章

  • 为 CMake 中的子目录生成“干净”目标

    我想生成一个clean子目录的目标 我的项目结构是这样的 app A B lib A B C 有时我只想在 app A 上运行干净 并且不想清理库 是否可以告诉 CMake 生成clean每个目录的目标 或者像这样的自定义目标应用程序清理哪
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • Cmake 错误:无效的转义序列 \U

    使用 CMake 在 VC 10 中运行 OpenCL 代码时 出现以下错误 CMake Error at CMakeLists txt 6 set Syntax error in cmake code at C Users Shreedh
  • 将 Doctest 与代码一起使用时将实现放在哪里

    我在用着doctest https github com onqtam doctest用于我的 C 项目中的测试 我想将测试代码与我的实现放在一起 正如库所说是可能的 但我似乎不知道如何处理 doctest 实现代码 我有一个doctest
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 使用星号更改多个源文件的 CMake 编译器标志

    我正在尝试调试与编译器优化相关的问题 O2 或以下版本没有问题 O3 出现段错误 并且我希望能够切换我的源代码块的编译器标志 以便我可以尝试缩小段错误的来源范围 我可以将全局优化级别设置为 O2 并更改单个文件的属性 如下所示 SET SO
  • 将 dll/lib 链接到 cmake 项目

    我试图将库链接到我的 cmake 项目 但遇到链接器错误 我花了 2 个小时尝试解决这个问题 并创建了一个简单的项目 在其中对所有路径进行了硬编码 CMAKE MINIMUM REQUIRED VERSION 3 0 PROJECT Tes
  • 动态加载库和共享全局符号

    由于我在动态加载的库中观察到全局变量的一些奇怪行为 因此我编写了以下测试 首先我们需要一个静态链接库 头文件test hpp ifndef BASE HPP define BASE HPP include
  • 如何将最新的 Windows SDK 版本传递给 CMake?

    如何将最新的 Windows SDK 版本传递给 CMake 这样我就不需要进入 Visual Studio 并从配置属性 常规中手动放置它 我在互联网上搜索 找到了 CMAKE SYSTEM VERSION 变量 并且尝试使用 set C
  • 使用 CMake 在 iOS 中使用另一个 STATIC 库创建一个 STATIC 库

    我有一个 libfooi a 的集合 libfoo1 a libfoo2 a libfoo3 a 使用工厂 带有静态代码 有一个公共接口来创建 C 对象 使用 CMake 我选择其中之一 并创建一个链接它并添加所有内容的 libfooWra
  • 如何将新的 Visual Studio 2017 cmake 功能与 gitlab CI 运行程序结合使用

    我以直接的方式为 Linux 设置了 gitlab ci runner cmake make make test 大致如下 variables GIT SUBMODULE STRATEGY recursive stages build te
  • Cmake选项默认值

    如果我有一个 CMakeLists txt 文件 cmake minimum required VERSION 2 8 OPTION FOO Foo Option OFF MESSAGE FOO FOO 然后我调用 cmake 得到以下输出
  • CLion 中的 GDB 监视器命令

    我正在尝试使用远程 GDB 调试嵌入式项目 我的系统 目标 ARM Cortex M0 SEGGER J Link GDB Server V6 10 命令行版本 臂 无 eabi gdb 7 10 1 20160616 cvs CLion
  • CMake:如何更改单个目标的编译器

    我有使用交叉编译器的嵌入式项目 我想介绍一下Google测试 用原生GCC编译器编译 另外使用 CTC 编译器构建一些单元测试目标 Briefly 我有 3 个不同的目标并用 3 个不同的编译器编译它们 如何表达它CMakeLists tx
  • Opencv - 找不到头文件

    我正在尝试使用 opencv 开始开发 问题是 到目前为止我几乎无法设置 opencv 因为我找不到它的头文件 我对此主题进行了一些研究 但没有一个真正有帮助 下面是一些链接 opencv2 包含文件在哪里 https stackoverf
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • CMake source_group() 无法在分层项目设置中正常工作

    在进行更改以使 CMake 项目具有分层文件夹管理后 source group 似乎不再正常工作 CMake 只是将所有内容转储到默认过滤器中 我尝试了各种正则表达式来从父级获取每个源文件的相对文件路径 甚至对父级 CMakeLists t
  • CMake GUI:指定 Windows 的库路径

    我正在编译一个基于 CMake 的项目 具体来说是 SOCI 它依赖于 SQLite 这是Windows 没有可供项目研究的标准路径 因此它找不到SQLite 我在配置时得到这个 SQLite3 not found some librari
  • 是否可以配置CLion来独立编译项目中的源文件?

    我目前正在使用 JetBrains CLion IDE 用 C 语言进行一些 Project Euler 挑战 当我用 Python 和 Java 分别用 PyCharm 和 IntelliJ 完成这些任务时 我总是能够创建一个名为 Pro
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译

随机推荐

  • Friendlycore增加inodes数量

    背景 xff1a 为Nanopim1安装了core系统 xff0c tf卡大小64G xff0c 安装后正常扩展到了整个tf卡 xff0c 但是在安装hass的docker显示磁盘空间不够 xff0c 最终发现是inode被用完了 其ino
  • UORB

    转载地址 xff1a http blog arm so armteg pixhawk 183 0503 html Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixh
  • rCS启动脚本分析

    转载地址 xff1a http wellmakers com p 61 401 还有一篇很重要的文章 xff0c 讲述了整个系统的大致启动过程 xff1a http blog chinaunix net uid 29786319 id 43
  • PID通俗解释

    转载地址 xff1a http blog gkong com liaochangchu 117560 ashx PID是比例 积分 微分的简称 xff0c PID控制的难点不是编程 xff0c 而是控制器的参数整定 参数整定的关键是正确地理
  • Kali Linux中安装Xfce的步骤2-1

    Kali Linux默认安装的是桌面环境是Gnome xff0c 可以通过以下方法在Kali Linux中安装Xfce xff0c 从而修改其桌面环境 1 Xfce介绍 Xfce是XForms Common Enviroment的简写 其可
  • STM32CubeMX教程之简介及基本使用

    STM32CubeMX是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言代码 xff0c 支持多种工具链 xff0c 比如MDK IAR For ARM TrueStudio等 尤
  • Linux 文件流与目录流管理

    Linux 应用开发 04 文件流与目录流管理 本课目标 1 编程目标 xff1a a 实现磁盘文件的拷贝操作 b 缓冲区类型对磁盘真正写入操作的影响 2 理解文件流操作以及缓冲区概念 3 掌握ansi c 文件流相关操作函数 4 理解与掌
  • tensorflow InvalidArgumentError: Cannot serialize protocol buffer of type tensorflow.GraphDef 错误分析

    训练nfm模型 xff0c 每2000个step进行保存 一开始模型训练正常 xff0c 但是在使用tf train Saver的save方法保存模型时出现了如下错误 xff1a tensorflow python framework er
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 八款值得尝试的精美的Linux发行版,你用过哪几款?

    Linux发行版各式各样 xff0c 每个发行版都有自己的特点 xff0c 在这篇文章中 xff0c 将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版 xff0c 包括对初学者友好和流行的发行版 elementary
  • VINS-mono 解析 生成用于回环检测的字典文件

    VINS回环检测使用的是FAST xff08 Features from Accelerated Segment Test xff09 特征点检测 xff0c 并利用BRIEF描述子存储特征 挑选了两个实时性较好的检测和描述 BRIEF提供
  • 将git下载的c++项目用vs打开

    首先确定下载的项目里包括CMakeLists txt的文件 然后在文件所在目录用cmd或power shell输入以下命令 以2017版本为例 cmake G 34 Visual Studio 15 2017 Win64 34 中间那个 表
  • 用 verilog 实现 minst 数字识别

    用verilog实现minst 的数字识别 可以用modelsim看结果 如果要部署到fpga上 PL的资源要非常非常多 代码下载 包含5个仿真文件 https download csdn net download howard789 13
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境
  • 4自由度机械臂正逆解公式推导与代码实现

    视频链接 四自由度机械臂逆解抓取 含代码 哔哩哔哩 bilibili 代码 import math P 61 7 5 A1 61 12 1 A2 61 8 2 A3 61 8 2 A4 61 18 5 MAX LEN 61 A2 43 A3
  • 无法获得下列许可solidworks standard无效的(不一致的)使用许可号码(-8,544,0) 解决办法

    将 SolidSQUAD 的Program Files里的所有文件夹覆盖到安装目录下 xff0c 如果是默认安装 xff0c 就是复制到C Program Files SOLIDWORKS Corp下 xff08 而不是C Program
  • 打开被独占的文件方法(二) -- 修改句柄访问权限

    打开被独占的文件方法 二 修改句柄访问权限 2010年06月08日 星期二 11 40 来自 xff1a http hi baidu com wsh chb blog item 1dfafadd4da473d48d1029a8 html 修
  • 将点云坐标转换成世界坐标的demo

    pcl calib cfg usr bin env python PACKAGE 61 34 depth camera calib 34 NODENAME 61 34 depth camera calib 34 from dynamic r
  • Clion开发stm32 无法使用printf (undefined reference to `_sbrk‘)

    原因是因为arm none eabi编译器为了节省空间 删减了一部分代码 导致有些方法只有声明没有实现 xff0c 只要在项目中添加实现的代码就可以了 xff0c 使用 weak修饰语 xff0c 如果其他地方有实现就自动失效 在项目中新建
  • 使用 Clion (cmake) 开发FreeRTOS

    这里使用的是 f407 1 先用STM32CubeMX 建立一个可以运行的stm32项目 xff0c toolchain选择 SW4STM32 2 官网下载源码 www freertos org 我这里下载的是FreeRTOSv202112