每个术语给出精确定义,可回溯到对应章节。加粗 = 全书高频词。
按拼音排序
A
- addr2line:用 .elf 的调试信息把内存地址翻译成"函数名+源码行号"的工具(11.5)。
- abort:主动终止程序并进入 panic 的库函数,默认配置下 panic 后芯片自动重启;ESP_ERROR_CHECK 出错时调用(6.4)。
B
- Backtrace(回溯):崩溃时打印的调用链(地址:栈指针 列表),从当前卡住处逐层往外(11.4)。
- bss:无初值变量段,启动时清零,只占 SRAM 不占 Flash(5.4)。
- Brake(刹车):把电机两端短接,让反电动势驱动短路电流耗能,快速制动(9.3)。
- build:预处理→编译→汇编→链接 的整套构建流程(5.1)。
C
- CMake:构建系统的"规划者",读 CMakeLists.txt 生成 build.ninja(3.1)。
- Coast(滑行):电机两端开路,反电动势无回路,靠摩擦慢慢停(9.3)。
- component(组件):可复用的代码包,有自己的 CMakeLists/Kconfig/include 目录;用 REQUIRES 声明依赖(3.3/17.2)。
- CPU:中央处理器,执行"取指-译码-执行"循环(0.7)。
- crt0:启动代码,负责复制 .data 初值、清零 .bss、设栈堆后再进 app_main(5.4)。
D
- data:有初值变量段;初值存 Flash,启动时复制到 SRAM(5.4)。
- DCMotor:本书的电机控制类(8.6)。
- duty(占空比):高电平时间占周期的比例;也是 LEDC 通道的比较值档位(7.1/7.4)。
E
- edge(边沿):信号电平切换的瞬间;上升沿=低→高,下降沿=高→低(4.4)。
- ESP_ERROR_CHECK:检查 esp_err_t,非 OK 则打印并 abort(panic 后默认自动重启,见 6.4)。
- ESP_RETURN_ON_ERROR 系列:ESP_ERROR_CHECK 的"温和亲戚"家族——
ESP_RETURN_ON_ERROR/ESP_RETURN_ON_FALSE出错打印后 return 错误码继续跑;ESP_GOTO_ON_ERROR/ESP_GOTO_ON_FALSE出错后 goto 统一收尾清理(如 18.2 的 OTA)。
选谁见 6.6 选择表(6.4/18.2)。 - eFuse:芯片里"一次性熔断"的小保险丝:只能写、不能擦回,存 MAC 地址、
密钥摘要、启动配置;烧错不可逆,量产动它前先读官方文档(18.5)。 - esp_err_t:错误码类型(int),ESP_OK=0,负数=错误(6.4)。
- ESP-IDF:乐鑫官方框架(驱动+FreeRTOS+构建系统),本书 v6.0.1(2.2)。
F
- fade 服务:LEDC 渐变机制;须在 timer/channel 配置后 install,
全芯片只装一次,最后实例才卸载(7.6/12.5)。 - factory 分区:应用默认分区(1MB),bootloader 从这里加载程序(3.7)。
- Flash:浮栅晶体管存储,掉电不丢;存程序/常量(10.1)。
- FreeRTOS:芯片上的实时操作系统,提供任务、延时(vTaskDelay)等(2.2)。
G
- GPIO:通用输入输出引脚;输出=推挽电路主动驱动,输入=读电平(4.1/4.2)。
- GPIO Matrix(矩阵):外设信号到引脚的交换矩阵,信号可路由到多数引脚(4.6)。
- Guru Meditation:芯片 panic 时的报错标题(11.4)。
- GND:电路的 0V 公共基准;共地 = 两板共享同一基准(0.1)。
H
- H 桥(H-Bridge):4 个晶体管开关组成 H 形,控制电机正转/反转/制动(8.3)。
- heap(堆):malloc/free 管理的内存池;泄漏=只借不还(10.4)。
I
- idf.py:ESP-IDF 总指挥命令(build/flash/monitor/size/menuconfig)。
- IN1/IN2:L298N 方向输入(管正反转/刹车/滑行)(8.3)。
- interrupt(中断):硬件事件打断 CPU 当前流程去执行 ISR;常按边沿触发(4.4/15.1)。
- ISR(Interrupt Service Routine,中断服务函数):中断来时 CPU 跳去执行的那段函数;须守"三条硬规则"(15.1/15.2)。
K
- Kconfig:配置系统;menuconfig 界面 + sdkconfig.defaults → sdkconfig;组件也可自带 Kconfig 给用户开关(3.6/17.3)。
L
- L298N:电机驱动板:小信号控制大电流 + H 桥换向(8.1/8.3)。
- LEDC:PWM 硬件模块:分频→计数→比较→输出;S3 4 定时器 8 通道,仅低速模式(7.3)。
- link(链接):把多个 .o 拼成 .elf,解析符号、分配地址(5.1)。
M
- main.cpp:程序入口,启动代码最后调用 app_main()(0.7)。
- monitor(监视器):按波特率收串口帧并显示日志的程序(2.7)。
- malloc/free:堆内存的申请/释放(10.4)。
N
- Ninja:构建系统的"执行者",按 build.ninja 调编译器(3.1)。
- nvs:掉电不丢的小数据分区(3.7)。
O
- 优化等级:-O0/-Og/-Os/-O2,编译器在"语义不变"前提下改写代码(5.2/11.2)。
P
- partition(分区):Flash 的逻辑区块;nvs/phy_init/factory 等;自定义分区表里 app 分区偏移必须 64KB(0x10000)对齐(3.7/18.1)。
- PWM:脉冲宽度调制:频率=1/周期,占空比=高电平比例,平均电压=V×duty(7.1)。
- PSRAM:伪 SRAM(内部 DRAM+自刷新),掉电丢失,容量大;本板 8MB Octal(10.1/10.2)。
- push-pull(推挽):上管推高、下管拉低的输出电路,无需外接电阻(4.2)。
R
- register(寄存器):能记住数字的电路单元,有地址;控制硬件=写寄存器(0.6)。
- REQUIRES / PRIV_REQUIRES:CMake 里声明组件依赖(影响 include 路径、链接、构建顺序);
REQUIRES对外可见,PRIV_REQUIRES只自己内部用(3.3/17.2)。 - resolution(分辨率):占空比档位数 = 2^分辨率;S3 上限 14 位(7.2/7.3)。
- rising/falling edge:上升沿/下降沿——电平切换瞬间(4.4)。
S
- sdkconfig:自动生成的配置;defaults 是默认值来源(3.6)。
- setSpeed:DCMotor 调速函数:clamp →(若反向换向:先能耗制动 + 死区)→
方向(IN1/IN2)→ 占空比(ledc_set_duty_and_update立即生效,hpoint=0)(8.6)。 - SRAM:触发器存储,快但掉电丢失;本板 512KB(10.1)。
- stack(栈):函数调用用 SP 管理的后进先出内存区;溢出=压过头(10.4)。
- 串口(UART):一根线串行传 0/1,帧格式=起始位+数据位+停止位(0.9)。
T
- TAG:日志的组件名,用于区分来源和按组件开关(6.3)。
- text:代码指令段,存 Flash(5.4)。
- timer(定时器):LEDC 的节拍源:分频+计数器,决定频率和分辨率(7.3/7.5)。
- transistor(晶体管):电压控制的电子开关;芯片的一切由它构成(0.2)。
V
- voltage/current:电压=电势差(水位差),电流=电荷流动(水流量)(0.1)。
- volatile:告诉编译器"这变量会被中断/硬件外部改动,每次都重新读内存";只保证每次读内存,不保证"读-改-写"原子(15.3)。
W
- Wi-Fi/蓝牙:S3 内置无线功能。
第三部分新增术语(13~18 章,按章节)
第一、二部分的术语在上面按拼音查;这里是"进阶掌握"部分才出现的新词,按章节归拢,方便你查了立刻回去看原文。
第 13 章(FreeRTOS 多任务)
- Task(任务):一个"无限循环的函数",各自独立占一份栈,被调度器轮流执行;任务函数不能 return(13.2)。像流水线工人:每人只管自己那道工序。
- Scheduler(调度器):决定"这一刻哪个任务占 CPU"的那套机制,靠时钟节拍(tick)推进(13.3)。
- 上下文(context):代码此刻"正穿着谁的鞋"——CPU 正在用哪个任务的寄存器/栈现场执行。任务上下文可以阻塞睡眠;中断上下文(ISR、GPTimer 回调)没有这双"鞋",一阻塞就冻结全局(13.3/15.1)。
- 上下文切换(context switch):把当前任务的寄存器/栈保存、换上另一个任务的现场,让它接着跑(13.3)。
- Queue(队列):任务之间安全传数据的"先进先出管道",复制进出,
xQueueCreate/xQueueSend/xQueueReceive(13.5)。 - 信号量(semaphore):二值/计数的"令牌",用来同步或释放资源;
xSemaphoreCreateBinary、xSemaphoreGive/Take(13.6)。 - 互斥锁(mutex):带优先级继承的"独占钥匙",专门保护共享资源;
xSemaphoreCreateMutex(13.6)。 - 事件组(event group):等"几个条件都满足"的位标志集合;
xEventGroupCreate/SetBits/WaitBits(13.7)。 - 看门狗(Watchdog,TWDT/IWDT):任务卡死超时就报警/复位的"救命机制";TWDT 任务看门狗,IWDT 中断看门狗(13.8)。
- esp_timer:微秒级"软定时器",回调在专用任务里跑,不占用硬件定时器(13.9/14)。
第 14 章(常用外设)
- GPTimer(通用定时器):硬件"秒表",可精确定时/计数/输出 PWM;
gptimer_new_timer/set_alarm_action/start(14.1)。 - ADC(模数转换器):把电压量化成数字;
adc_oneshot_new_unit/config_channel/read(14.2)。 - 衰减(attenuation / atten):ADC 的输入量程挡位,
ADC_ATTEN_DB_12对应约 0~3.1V,量程越大精度略降(14.2)。 - I2C:两根线(SDA/SCL、开漏 + 上拉)带一群设备的低速总线,靠 7 位地址点名;
i2c_new_master_bus(14.4)。 - SPI:高速四线同步总线(含 CS 片选"点名"),支持 DMA;
spi_bus_initialize/bus_add_device(14.5)。
第 15 章(中断与实时性)
中断(interrupt)、ISR、volatile 的定义在上面按拼音的 I / V 节。这里补第 15 章专有的几个词。
- ISR 三条硬规则:①要快、尽量短;②不调用会阻塞/非中断安全的函数(如
printf/vTaskDelay);③与任务通信只能用...FromISR系列 API(15.2)。 - 原子操作(atomic operation):对外"要么完全没发生、要么已彻底完成"、看不到中间状态的操作,像电灯开关没有"半开"。
count++是"读-改-写"三步、不原子,任务与 ISR 竞争它就要用原子操作或临界区(15.3/15.6)。 - IRAM_ATTR:把函数放进指令 RAM(IRAM),避免 Flash cache 未命中带来的延迟,常用于 ISR(15.4)。
- Flash cache / MMU:CPU 不能直接执行 Flash 里的指令,要靠 cache 缓存、MMU以 64KB 为一块做地址映射——“像给远处仓库编本地门牌号”。ISR 怕 cache 未命中(15.4)、app 分区必须 64KB 对齐(18.1),根因都是它。
- FromISR:一批专给中断用的 API(
xQueueSendFromISR、xSemaphoreGiveFromISR、xSemaphoreTakeFromISR…),中断安全、可请求切换任务(15.5)。 - 临界区(critical section):一段"不能被中断打断"的代码,进去前先关中断/调度、出来再恢复(15.6)。
第 16 章(Wi-Fi)
- STA(Station,客户端模式):芯片作为客户端去连家里的路由器,是本书主用的模式(16.2)。
- 事件循环 / 默认事件循环(event loop):系统接收 Wi-Fi/IP 事件并分发给你的回调的"总调度线程";
esp_event_loop_create_default(16.2)。 - esp_netif(网络接口抽象):把 Wi-Fi/以太网的 IP、网关等抽象成统一接口;
esp_netif_init在 esp_netif.h;esp_netif_create_default_wifi_sta实际声明在 esp_wifi 的esp_wifi_default.h,而esp_netif_defaults.h只有配置宏(16 章坑点小节)。
第 17 章(组件化与工程进阶)
组件(component)、REQUIRES/PRIV_REQUIRES、Kconfig 见上面按拼音的 C / R / K 节(已含第 17 章出处)。
- INCLUDE_DIRS / PRIV_INCLUDE_DIRS:组件里"对外公开"与"只自己可见"的头文件目录,是构建层的封装(17.2)。
- esp_driver_*(组件拆分):v5.x 起笼统的
driver组件被拆成esp_driver_gpio/esp_driver_ledc/esp_driver_uart等细粒度组件——REQUIRES driver在 v6 里 include 不到头文件,要用新名字(17.2)。 - 单元测试(unit test)/ Unity:不依赖整机、只测"零件"(纯逻辑:换算、边界、状态机)的自动化测试;ESP-IDF 用 Unity 断言框架(
TEST_CASE+TEST_ASSERT_*),本工程测试是根目录下的独立小工程(17.5)。
第 18 章(发布与 OTA)
分区(partition)见上面按拼音的 P 节;这里补 OTA 相关的新词。
- otadata:记录"下次从哪个 app 分区启动"的小分区(OTA 状态)(18.1/18.2)。
- app / data(分区 Type 列):分区表两大类型——
app= 放可执行固件(factory/ota_0/ota_1,offset 必须 64KB 对齐);data= 放元数据与资源(nvs、otadata、phy_init 等,4KB 对齐即可)。一行一个用途,别搞混 SubType 写法(18.1)。 - OTA(Over-The-Air,空中升级):通过网络下载新固件写进备用分区、重启切换启动,不用插线(18.2)。
- 回滚(rollback):新版起不来/校验失败时自动退回旧分区,设备不"变砖"(18.2)。开启要加
CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y,且新固件确认核心功能正常后尽早调esp_ota_mark_app_valid_cancel_rollback()“签收”,否则会被当作启动失败退回。 - esp_app_desc / PROJECT_VER:编译时写进固件头部的"身份证"结构(版本号等),
esp_app_get_description()->version读它,启动日志的App version就是它;版本由 CMake 的PROJECT_VER(即 menuconfig 的 Project version)决定,发布前记得更新(18.3/18.4)。 - 签名密钥 / Secure Boot(安全启动):
idf.py secure-generate-signing-key一次性生成密钥对,私钥用idf.py secure-sign-data --version 2给镜像签名,bootloader 按 eFuse 里的公钥摘要验签后才放行固件。本书只演示命令——烧 eFuse 是不可逆操作(18.2/18.5)。
缩写表
| 缩写 | 全称 | 含义 |
|---|---|---|
| ADC | Analog-to-Digital Converter | 模数转换器(14.2) |
| BEMF | Back Electro-Motive Force | 反电动势(9.2) |
| CPU | Central Processing Unit | 中央处理器 |
| GPIO | General Purpose Input/Output | 通用输入输出 |
| GPTimer | General Purpose Timer | 通用(硬件)定时器(14.1) |
| I2C | Inter-Integrated Circuit | 两线同步串行总线(14.4) |
| ISR | Interrupt Service Routine | 中断服务函数 |
| IWDT | Interrupt Watchdog Timer | 中断看门狗(13.8) |
| LEDC | LED Controller | PWM 硬件模块 |
| OTA | Over-The-Air | 空中升级(通过网络更新固件)(18.2) |
| PSRAM | Pseudo Static RAM | 伪静态随机存储器 |
| PWM | Pulse Width Modulation | 脉冲宽度调制 |
| RAM | Random Access Memory | 随机存取存储器 |
| SPI | Serial Peripheral Interface | 高速四线同步串行总线(14.5) |
| SRAM | Static RAM | 静态随机存储器 |
| STA | Station | Wi-Fi 客户端模式(连路由器的角色)(16.2) |
| TWDT | Task Watchdog Timer | 任务看门狗(13.8) |
| UART | Universal Asynchronous Receiver/Transmitter | 通用异步收发器 |
用法:看书遇到不懂的词 → 来此查定义 → 回对应章节看详细讲解。