- 博客(17)
- 收藏
- 关注
原创 【FreeRTOS】任务、任务状态
时,调度器会选中空闲任务执行 —— 它本质是一个无限循环的空函数(或极简逻辑),用来 “消耗” CPU 的空闲时间,防止 CPU 处于无任务可执行的 “空转” 状态(空转会导致功耗浪费或硬件异常)在 FreeRTOS 中,删除任务的函数为vTaskDelete(),作用是将指定任务从系统中移除,被删除的任务不再参与调度。任务退出的本质是 “让任务从系统中消失,不再参与调度”,在 FreeRTOS 中唯一的方法是调用vTaskDelete(),是比阻塞态更 “被动” 的状态,只能通过手动 API 唤醒。
2025-12-02 15:28:39
759
原创 【FreeRTOS】堆与栈的理解
RTOS 的多任务,本质是多个 “独立的执行流” 在 CPU 上分时运行(任务 A 跑 1ms,切换到任务 B 跑 1ms),每个任务就像 “独立的小程序”,都需要自己的栈来存,在切换任务时,会把A自己的。如果所有任务共用一个栈,任务 A 刚在栈里存了局部变量x=1,切换到任务 B 后,任务 B 的局部变量会把x=1覆盖掉,等切回任务 A 时,x的值已经被改成任务 B 的数据,程序直接乱套。栈顶指针(ESP/RSP):指向最顶端,栈是从高地址往低地址生长的,所以 ESP/RSP 会随着数据压栈。
2025-11-28 21:58:04
723
原创 【嵌入式Linux】Makefile基础
1.延迟赋值(=)A = 123A = 456 # 后续修改A的值all:echo "$(A)" # 执行时输出“456”,因为A是延迟赋值,使用时取最新的值2.立即赋值(:=)A := 123A = 456 # 后续尝试修改A的值all:echo "$(A)" # 执行时输出“123”,因为A是立即赋值,定义时就固定了值3.空赋值(?=)A?= 123 # A未定义,所以赋值为123A?= 456 # A已定义,所以此赋值无效all:echo "$(A)" # 执行时输出“123”
2025-11-14 20:51:29
236
原创 裸机与Linux下编译运行代码程序过程的不同
第一步:代码的编写对于printf代码的实现,还需要串口驱动第二步:通过keil等编译工具直接编译第三步:烧录只需要通过烧录工具,一键烧录第四步:上电即可串口输出。
2025-11-08 20:55:04
247
原创 【嵌入式Linux】shell启动方式对变量的影响
变量仅在临时环境生效,不影响当前 shell。变量在当前 shell 永久生效。如果你写了一个 “设置环境变量” 的脚本(比如配置交叉编译器路径),必须用source或执行,否则变量不会生效。如果你只是想 “临时运行一个脚本,不影响当前环境”,就用子 shell 方式执行。
2025-10-28 19:12:58
258
原创 【嵌入式Linux】shell脚本编程基础讲解
shell 脚本编程是嵌入式 Linux 开发中非常实用的技能,简单说就是 “把一系列 Linux 命令写到一个文件里,让系统自动按顺序执行”,相当于给电脑写一个 “命令批处理小工具”。核心作用:“调度执行”—— 把用户的命令传递给 Linux 内核,让内核调用硬件资源(CPU、内存、硬盘)完成操作,本身不做 “翻译代码” 的工作。的二进制指令到 CPU,最终输出 “hello”——shell 只是 “传达命令”,不参与hello。时,shell 的作用是:告诉内核 “去执行当前目录下的hello。
2025-10-26 19:25:45
333
原创 【江协科技平衡车系列】二、编码器教学讲解
江协最近推出了平衡车,但是还没有出完整的教学视频,这导致一些同学买了但是没有非常适配的教程,所以博主想用江协平衡车出一个系列教程,带大家学会平衡车。文章中若出现错误欢迎大家指正。一、编码器初始化代码编码器初始化大概可以分成五步1.开启定时器与GPIO时钟// 1. 开启时钟(单片机外设工作前必须先“通电”,时钟就是“电”)// 给定时器3“通电”// 给GPIOA端口“通电”(编码器信号接在这里)2.GPIO初始化// 2. 配置GPIOA的引脚(接编码器的A相和B相)
2025-10-25 21:39:27
303
原创 【江协科技平衡车系列】一、电机驱动教学讲解(超详细易懂)
江协最近推出了平衡车,但是还没有出完整的教学视频,这导致一些同学买了但是没有非常适配的教程,所以博主想用江协平衡车出一个系列教程,带大家学会平衡车。文章中若出现错误欢迎大家指正。
2025-10-11 21:35:14
1314
原创 STM32单片机IAP固件升级讲解
STM32 的 IAP 升级本质是通过 “Bootloader + 分区 Flash + 跳转机制” 实现的,核心是让设备在不拆壳、不接编程器的情况下,自己更新 App 程序。这种方式极大简化了嵌入式设备的维护和升级,是工业控制、物联网设备的必备功能。实际开发中,需重点关注 Flash 分区、跳转逻辑和固件校验这三个关键点。
2025-09-29 14:43:15
1253
原创 CAN通信应用速成(配置步骤通俗易懂)
本文介绍了STM32上CAN通信的配置与应用,主要包含三部分内容:1. 使用CubeMX配置CAN总线波特率,以500kHz为例说明参数设置方法;2. 详细讲解CAN过滤器的两种模式(掩码模式和列表模式)及其实现原理,说明如何通过寄存器设置筛选特定ID报文;3. 给出CAN数据收发代码实现,包括发送函数封装和接收缓冲区处理。文章通过HAL库示例,完整呈现了STM32 CAN通信从硬件配置到软件实现的开发流程。
2025-09-24 20:21:49
1124
原创 【STM32】GPIO详解(含标准库、HAL库配置示例)
本文介绍了GPIO的四种输出模式(通用/复用推挽输出、通用/复用开漏输出)和三种输入模式(上拉、下拉、浮空输入)。重点分析了推挽与开漏输出的区别:推挽通过双MOS管直接驱动高低电平,而开漏仅能主动拉低,需外接上拉电阻获得高电平。文章还区分了通用模式(直接控制)和复用模式(外设控制)的应用场景,并提供了STM32标准库和HAL库的配置示例。适合嵌入式开发人员复习参考,尤其针对STM32F103C8T6等常用MCU的GPIO配置。
2025-07-24 13:44:47
1118
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅