gpt4 book ai didi

stm32cubeide - 在STM32CubeIDE项目中的哪里添加新的.h和.cpp文件

转载 作者:行者123 更新时间:2023-12-05 02:41:03 24 4
gpt4 key购买 nike

我使用 STM32CubeIDE 通过文件 > 新建 > STM32 项目为我的 nucleo-f411re 板创建了一个新的 (C++) 项目。项目像往常一样创建。我将“main.c”重命名为“main.cpp”,因为我选择了 C++ 作为目标语言。一个简单的“blinky”编译并在板上正确运行。所以现在我想开始向项目添加一些 C++ 代码。

“main.cpp”位于 myproject > Core > Src > main.cpp 下的项目树中。如果我想创建一些新的源文件/头文件,例如“foo.h”和“foo.cpp”,我想我可以右键单击项目树中的某些内容,然后选择“新建”>“头文件”或“新建”>“源文件”。 但问题是——我应该右键单击什么来创建源文件/头文件?我假设文件将在我右键单击的位置(= 文件夹)中创建。 我想把它们放在哪里? 它们都在“Core”文件夹中吗?分别在“Core > Inc”和“Core > Src”文件夹中?我不确定。

编辑:我将头文件/源文件分别添加到 Core > Inc 和 Core > Src,这似乎有效。这是推荐的吗?我想知道如果我更改配置,它们是否还会在那里,导致重新生成代码。

最佳答案

我知道这是一个很晚的答案,但我刚才没有找到很多关于这个问题的提示,所以这是我的看法。

基本上您可以将源文件放在任何源文件夹中。您可以根据需要使用现有文件夹或创建新文件夹。

头文件必须放在包含路径中的文件夹中(例如 Core/Inc),或者您必须告诉编译器应该包含特定文件。如果要为头文件创建一个新文件夹,则必须通过 Project -> Properties -> C/C++ Build -> Tool Setting (tab) -> 将文件夹或此文件夹内的文件添加到包含路径MCU GCC 编译器或 MCU G++ 编译器 -> 包含路径。请注意,您可能需要添加两次,一次用于 C 文件(MCU GCC 编译器),一次用于 C++ 文件(MCU G++ 编译器)。

要创建文件,您只需单击要在其中创建文件的文件夹,然后添加一个新的 文件。您也可以只在本地文件系统上创建文件和目录并刷新项目(右键单击 -> 刷新或 F5)以在 STM32CubeIDE 中显示更改。


对于小型项目(如眨眼项目),使用 Core 文件夹可能就足够了。

对于更大的项目,我个人喜欢将所有自动生成的代码从我自己的文件中分离出来。特别是对于 C++ 项目,STM32CubeIDE 总是将 main.cpp 重命名为 main.c 并删除您每次运行时不小心放在注释 block 之外的代码段,这会变得非常烦人代码生成。

我通常为项目特定文件创建一个 Project 源文件夹,为库创建一个 Lib 源文件夹。然后我创建了一个 cppmain.h 文件,它简单地声明了一个 void cppMain() 函数和一个用于编写我的程序的 cppmain.cpp 文件主程序。自动生成代码的唯一变化是您必须在 main.c 中的主循环之前包含 cppmain.h 并调用 cppMain() .

目录树:

Project name
+ Core
| + ...
+ Drivers
| + ...
+ Libs
| + someLib
| | + Inc
| | | + someLib.h or hpp
| | + Src
| | + someLib.c or cpp
| + ...
+ Program
| + Inc
| | + cppmain.h
| | + ...
| + Src
| + cppmain.cpp
| + ...
+ ...

您必须将 Program/Inc 和任何 Lib/Inc 文件夹添加到包含路径。对 main.c 的更改如下所示:

...

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "cppmain.h" // this goes in user includes
/* USER CODE END Includes */

...

/* USER CODE BEGIN 2 */
cppMain(); // this goes before the main loop
// anything after this point will never be reaced
// when you create a main loop inside cppMain()
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}

...

cppmain.h 文件中,我通常使用 #include "main.h" 获取所有 STM32 HAL 内容并将所有硬件资源句柄声明为外部(例如 extern UART_HandleTypeDef huart1;)

完整的cppmain.h 文件:

/** @file cppmain.h
*
* @author some_author
* @date some_date
*/

#ifndef PROGRAM_INC_CPPMAIN_H_
#define PROGRAM_INC_CPPMAIN_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"

void cppMain(void);

#ifdef __cplusplus
}
#endif

#endif /* PROGRAM_INC_CPPMAIN_H_ */

一些随机的cppmain.cpp文件:

/** @file cppmain.cpp
*
* @author some_author
* @date some_date
*/

#include "cppmain.h"
#include "pins.h"
// pins is useful when you connect some things to a dev board
// and want to have a quick reference where you put stuff
// this just includes things like (for STM32F103xB "blue pill" in this case)
// #define LED_PIN_PORT GPIOC
// #define LED_PIN_PIN GPIO_PIN_13
// #define LED_PIN LED_PIN_PORT, LED_PIN_PIN


extern UART_HandleTypeDef huart1;

int some_variable = 0;


void foo(int input){
// do something
}


void cppMain(){
// do stuff

// main loop
while(1){
// do stuff regularly
}
}

在我的 Lib 文件夹中,我通常链接到我想在处理所有项目时为所有项目更改的库:右键单击 Libs -> New -> Folder -> Advanced >> -> 链接到备用位置。请注意,这将链接到您系统上的绝对路径,您不能通过这种方式简单地将您的项目导入到不同的系统上。如果您在团队中工作或跨不同的设备工作,您可能希望以不同的方式解决这个问题。

关于stm32cubeide - 在STM32CubeIDE项目中的哪里添加新的.h和.cpp文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68306194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com