项目开发入门

[English]

当开发一个 ESP 项目时,通常的流程是先根据项目的内容去了解对应的 ESP 的示例和 SDK,挑选和目标项目最契合的作为模板,然后在其基础上进行修改并创建自己的项目。

本文将总结一些通用嵌入式项目在乐鑫环境下开发所需要的知识点:

通用知识

在开发 ESP 项目之前需要一些关键的通用知识和技能,以确保开发能够顺利进行:

  • Git

    Git 是一个开源的分布式版本控制系统,用于跟踪代码的更改和协作开发。在项目中使用 Git 可以帮助你有效地管理代码,进行版本控制,并与团队成员协同工作。学习如何使用 Git 进行代码提交、分支管理、合并等操作是开发 ESP 项目的基本要求。这里推荐开发者需掌握一些 Git 的常用指令

  • FreeRTOS

    FreeRTOS 是一种开源的实时操作系统,广泛应用于嵌入式系统和微控制器项目中。ESP 系列芯片都支持 FreeRTOS,并且常常使用它来实现多任务和实时调度。了解 FreeRTOS 的任务调度、消息队列、信号量等概念是开发 ESP 项目的必备知识。

  • Linux(可选):

    ESP 项目的开发很多情况下在 Linux 操作系统上进行,因为 Linux 提供了丰富的工具和命令行环境,适合嵌入式开发。开发者应该了解 Linux 的基本命令和使用方式,例如文件操作、目录管理、进程管理等,以便在开发过程中进行调试和配置。推荐开发者需掌握一些 Linux 文件与目录管理常用指令

    - ls:列出当前目录的文件和文件夹。
    - cd <directory>:切换到指定目录。
    - pwd:显示当前工作目录的路径。
    - cp <source> <destination>:复制文件或目录。
    - rm <file_name>:删除文件。
    - mkdir <directory>:创建新目录。
    - rmdir <directory>:删除空目录。
    - cat <file_name>:显示文件内容。
    

了解 ESP 系列芯片和 ESP-IDF 框架

推荐网站:

项目开发知识点总结

C 语言

  1. 数据类型

    • 基本数据类型
      • 整数、字符、浮点

    • 标准库数据类型
      • 布尔型(bool)、字符串(string)

    • 指针类型

    • 复合数据类型
      • 数组、结构体(struct)、枚举(enum)

    • 自定义数据类型

    • 数据类型限定符
      • 常量限定符(const)、 易变限定符(volatile)

  2. 函数、指针和内存管理

  3. 工程项目编译、链接和执行过程

  4. 算法

    • 数据结构
      • 链表

      • 栈和队列

      • 树和图

    • 排序算法
      • 冒泡排序(Bubble Sort)

      • 选择排序(Selection Sort)

      • 插入排序(Insertion Sort)

      • 快速排序(Quick Sort)

      • 归并排序(Merge Sort)

    • 查找算法
      • 线性查找(Linear Search)

      • 二分查找(Binary Search)

      • 哈希查找(Hashing)

    • 递归算法
      • 分治

      • 回溯

    • 动态规划

    • 编码和解码算法
      • 处理数据的压缩、加密、编码和解码

    • 信号处理算法
      • 音频、图像的处理

    • 算法优化
      • 时间复杂度

      • 空间复杂度

通信协议

  1. 掌握各种通信协议,如 UART、SPI、I2C、CAN 等,以便与外部设备进行通信

  2. 学习网络协议栈,如 TCP/UDP。以及上层应用协议,如 HTTPMQTT

工程构建和管理

  1. 构建系统

  2. 分区表

  3. 组件管理和使用

应用编程

  1. GPIO(General Purpose Input/Output),通用输入/输出

    • GPIO 初始化、模式、读取、写入

    • GPIO 配置选项
      • 根据 技术手册引脚图 来确定每个引脚的功能

    • GPIO 中断

    • Strapping 管脚

  2. JTAG(Joint Test Action Group)调试

  3. 内存管理

    • 动态内存分配和释放,如 mallocfree

    • 内存布局和堆栈管理

  4. 中断处理

    • 理解和处理硬件中断

    • 实现中断服务程序(ISR)来响应外部事件

  5. 时钟和定时器

    • 使用定时器和时钟源来实现时间控制和定时任务

    • 处理延时和定时操作

  6. 异常处理

    • 处理硬件和软件异常

  7. 低功耗模式设计

    • 实施功耗优化策略,用来延长电池使用寿命或减少能源消耗

  8. 进程

    • 进程的创建和终止

    • 进程的管理和调度

    • 进程的资源分配和使用

    • 进程间的通信方式
      • 管道(Pipe)、命名管道(Named Pipe,FIFO)、消息队列(Message Queue)、信号(Signal)、共享内存(Shared Memory)、信号量(Semaphore)、套接字(Socket)

  9. 线程

    • 线程的创建和销毁

    • 线程的调度和同步

    • 多线程编程的并发控制

    • 线程间通信方式
      • 互斥锁(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)、屏障(Barrier)、消息队列(Message Queue)、共享内存(Shared Memory)、自旋锁(Spin Lock)

  10. 驱动开发

  • 驱动程序可以针对各种硬件设备编写,包括但不限于 传感器、执行器、存储设备(如闪存和SD卡)、通信接口(如UART、SPI、I2C)、显示屏、网络接口卡(NIC)

学习方式

  • 在线资源和文档:

    • 利用 ESP-IDF 官方文档、教程和示例代码,深入了解框架和 API 的使用方法。

    • ESP IoT Solution 库中找到基于 ESP-IDF 的 解决方案、应用实例、组件和驱动 等内容。多数文档均提供中英文版本。

  • 在线课程和视频教程:

  • 实验和项目:

    • 通过实际使用 ESP 开发板 进行实验和项目开发,加深对硬件和软件的理解。刚入门可以多参考其他已经做出来的项目或者 乐鑫发布的解决方案 来学习。

  • 社区和论坛:

    • 加入 ESP32 官方论坛CSDN 论坛, 或者其他开发者社区。与其他开发者交流经验、寻求帮助并分享项目和解决方案。

    • 通过 GitHub 的 Issues 版块提交 bug 或功能请求。在提交新 Issues 之前,请先查看现有的 Issues

  • 参考书籍:

    • 阅读与嵌入式系统、C 语言和 ESP 芯片开发相关的书籍,扩展知识广度和深度。参考: ESP32 书籍列表

持续实践和项目开发是学习过程中最重要的部分。开发者可以通过不断的练习和实际应用,逐渐掌握 ESP 芯片的嵌入式项目开发技能。