boringhex.top博客

非典型程序员的小破站

在CMake中,函数用于封装一段可重用的代码。下面是CMake函数的定义和调用的详细讲解。

定义函数

函数的定义使用function()来开始,然后指定函数名称以及任何形参列表,如下所示:

1
2
3
function(<function_name> [arg1 [arg2 [...]]])
# Function code...
endfunction()

函数名称应该是唯一的,以避免与其他函数发生冲突。关键字function()endfunction()之间的代码是函数代码块。

这里的形参列表是可选的,您可以为您的函数定义零个、一个或多个参数。注意,函数调用中的参数列表是以空格分隔的,因此每个参数将自动映射到定义中的参数。

阅读全文 »

在前一篇文章 esp32 初识 cmake 构建工具 中,已经用”hellow world”程序介绍了cmake最基本的用法,今天详细讲解CMakeLists.txt文件。

CMakeLists.txt

CMakeLists.txt文件是CMake构建工具的核心配置文件。它包含了构建项目所需的一系列指令和参数,CMake会根据这些信息生成相应的构建文件。CMakeLists.txt文件通常位于项目的顶层目录,并可在子目录中包含其他的CMakeLists.txt文件以组织复杂项目的构建过程。

CMakeLists.txt文件包含以下几类指令:

  1. 项目设置:定义项目名称、版本、目标平台等信息
  2. 指定源文件和头文件:指定项目中要编译的源文件和头文件
  3. 添加子目录:将子目录加入构建过程,子目录中可以包含其它的CMakeLists.txt文件
  4. 设置编译器和链接器选项:例如,指定编译标志、链接库等
  5. 添加可执行文件和库:指定要生成的可执行文件、静态库或动态库
  6. 添加依赖和链接库:指定项目需要的外部库和头文件路径
阅读全文 »

ESP-IDF工具链依赖cmake和ninja来管理项目构建过程,今天先学习cmake。

CMake

CMake是一个开源的跨平台自动化构建系统,用于管理软件编译和构建过程。它可以生成各种平台的Makefile或者项目文件,使得软件的编译和构建过程可以在不同的平台和编译器上进行。CMake使用CMakeLists.txt文件来描述项目的构建设置和依赖关系。

CMake可以帮助开发人员轻松管理和构建大型项目。CMake的优势主要体现在以下几个方面:

  1. 跨平台:CMake支持多种平台,如Windows、Linux、macOS等。这意味着您可以使用相同的CMakeLists.txt文件在不同的平台上构建项目,而无需为每个平台编写特定的构建脚本。

  2. 自动生成构建文件:CMake可以根据项目配置生成各种构建系统的文件,如Makefile、Visual Studio解决方案等。这使得开发人员可以专注于编写代码,而不必花时间维护构建脚本。

  3. 易于维护:CMake使用简洁的语法,易于理解和维护。此外,CMake的模块化设计使得将项目分解为多个独立的组件变得更加容易,这有助于提高项目的可维护性。

  4. 强大的功能:CMake提供了丰富的内置函数和模块,支持各种编译器和构建工具。此外,CMake还支持自定义函数和模块,以满足特定项目的需求。

  5. 高效的构建:CMake支持并行构建,可以有效地利用多核处理器来加速编译过程。此外,CMake还支持增量构建,这意味着当您对项目进行修改时,只有受影响的部分需要重新构建,从而节省了大量时间。

  6. 社区支持:CMake有一个活跃的社区,开发人员可以在其中寻求帮助和分享经验。此外,许多开源项目已经采用CMake作为其构建系统,这意味着您可以在很多实际项目中找到CMake的使用示例。

阅读全文 »

mpu6050

MPU-6050是InvenSense公司生产的一款六轴运动处理器,集成了3轴加速度计和3轴陀螺仪。它将两个传感器集成到一个极小的封装里,使得对六轴运动的检测变得更加简单和方便。这款传感器广泛应用于运动控制和测量领域,如无人机、智能手机、运动手环等。

以下是根据所提供的数据表得到的MPU-6050的详细特性:

  1. 尺寸和接口

    • 封装尺寸:4mm x 4mm x 0.9mm
    • 通信接口:I2C(双线串行接口)
  2. 测量范围和灵敏度

    • 加速度计测量范围:±2g、±4g、±8g、±16g(可配置)
    • 加速度计灵敏度:16384 LSB/g(±2g)、8192 LSB/g(±4g)、4096 LSB/g(±8g)、2048 LSB/g(±16g)
    • 陀螺仪测量范围:±250°/s、±500°/s、±1000°/s、±2000°/s(可配置)
    • 陀螺仪灵敏度:131 LSB/°/s(±250°/s)、65.5 LSB/°/s(±500°/s)、32.8 LSB/°/s(±1000°/s)、16.4 LSB/°/s(±2000°/s)
  3. 分辨率

    • 加速度计:16位ADC(模拟数字转换器)
    • 陀螺仪:16位ADC
  4. 内置数字运动处理器(DMP)

    • 可以实现高级运动处理功能,如六轴运动融合、姿态估计等
    • 可以减轻主控制器的计算负担
  5. 低功耗和工作电流

    • 工作模式:连续采样,低功耗
    • VDD工作电压:2.375V - 3.46V
    • 工作电流: 500uA(加速度计), 3600uA(陀螺仪),低功耗模式下可降低
    • 关断模式电流:5µA
阅读全文 »

程序员的世界有个不成文的约定,第一个程序先跑”hello world”,今天我们就在esp32上跑下hello world!

vs code配置

新建一个esp32-test文件夹,并在该文件夹下打开vs code:

1
2
mkdir esp32-test
cd est32-test && code .
阅读全文 »

运行esp32示例程序时注意到右下角有”ESP-IDF QEMU”按钮,好奇,就点了一下,发现这个是与docker开发容器关联的,乐鑫提供了一套docker镜像来进行esp32开发。

在vs code中要先安装”dev container”插件,然后这个插件会自动检测系统环境,完成docker安装。

但是示例程序中的开发容器配置有问题:

阅读全文 »

之前的文章 ESP32+MicroPython开发环境的搭建 介绍了ESP32 MicroPython开发环境的搭建,此次计划采用ESP32-C3做小飞机主控,不太适合用MicroPython,要用ESP-IDF原生框架,因为平时一直用vs code编辑器,所以就选了vs code做开发环境。

ESP32-C3

ESP32-C3 SoC 芯片支持以下功能:

  • 2.4 GHz Wi-Fi
  • 低功耗蓝牙
  • 高性能 32 位 RISC-V 单核处理器
  • 多种外设
  • 内置安全硬件

ESP32-C3 采用 40 nm 工艺制成,具有最佳的功耗性能、射频性能、稳定性、通用性和可靠性,适用于各种应用场景和不同功耗需求。

阅读全文 »

之前为了焊接一些小贴片模块,想过买一个加热台,后来一搜加热台,发现有很多卖PTC加热板的,就又想自己做一个加热台。正好这个月嘉立创又送了打样券,搞起来~

PCB加热台设计主要考虑以下几个方面:

  1. 面积
  2. 功率
  3. 铜厚
  4. 板厚
阅读全文 »

快乐飞行

飞控

传统飞航模的玩家是不用飞控的,就是纯遥控,享受飞行乐趣,但是这对大多数人来说太难了,不用说控制,就是目视航模姿态都是个大难题。随着技术发展,现在飞控越来越普及,以至于几乎成为标配,最最基本的也会带陀螺仪。飞控主要作用有以下几点:

  1. 飞行控制:控制器是飞行器的指挥中心,它接收来自遥控器的指令,并将这些指令转化为电信号发送给舵机、电调等飞行器的执行器,从而控制飞行器的姿态、飞行速度和航向等。通过控制器,飞行员可以实现飞行器的各种动作,如升降、横滚、转向等,以及进行各种飞行模式的切换。

  2. 通信传输:控制器充当遥控器和飞行器之间的中介,负责将遥控器发送的无线信号解码,并将信号传输给飞行器的接收器。它确保遥控器和飞行器之间的可靠通信,使飞行员能够实时操控飞行器。

  3. 信号处理和稳定性控制:控制器可以对接收到的信号进行处理和调整,以提高飞行器的稳定性和响应性。它可以通过传感器(如陀螺仪、加速度计)获取飞行器的姿态信息,并根据设定的控制算法进行实时调整,使飞行器能够保持平衡和稳定的飞行状态。

  4. 参数调节和功能设置:控制器通常具有一些可调节的参数和功能设置,允许飞行员根据实际需求进行调节和优化。例如,可以调整舵机行程、反向设置、飞行曲线、灵敏度等参数,以适应不同的飞行需求和飞行器类型。

  5. 高级功能支持:一些先进的控制器还提供了一些高级功能,如舵机混控、自动驾驶、航向保持等。这些功能可以帮助飞行员实现更复杂的飞行动作和任务,提供更多的飞行乐趣和探索空间。

阅读全文 »
0%