
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
微信发一条“Hello”消息,竟完整走完了OSI七层模型的旅程。从应用层生成原始数据,到表示层加密编码,会话层维护连接,传输层分段传输,网络层路由寻址,数据链路层物理寻址,最后物理层转换为信号。接收端则逆向解封装,最终在对方屏幕上显示消息。整个过程展现了网络分层如何像接力赛一样协同工作,让抽象的网络模型变得生动可感。

MCU 资源受限(RAM < 64KB,Flash < 256KB),无力运行 LwIP 或 Linux 网络栈。追求开发效率,不想花几个月调试软件协议栈的内存泄漏和死锁。对网络稳定性要求高,需在恶劣电磁环境和弱网条件下保持 TCP 长连接不中断。W5500 用硬件逻辑承担了 OSI 模型中传输层和网络层的绝大部分工作,让嵌入式工程师能够将精力聚焦于应用层业务逻辑(如解析 Modbus 指令、控制

上电 → Reset_Handler → __main → main()│├─ xTaskCreate() → 自动调用 prvHeapInit() 初始化堆├─ 创建空闲任务├─ 创建定时器任务(可选)├─ 关闭中断│ ├─ 配置 SysTick 和 PendSV│ └─ 触发 SVC → 启动第一个任务└─ 调度器运行,永不返回核心要点FreeRTOS 不需要用户显式初始化内核,创建第一个任务

在定义任务控制块(TCB)或初始化任务堆栈时,会用到一些伪指令和内存操作指令。指令/伪指令作用在FreeRTOS中的应用场景EQU给数字常量设置符号名,类似C语言的#define。用于定义常量,如任务优先级、堆栈大小等。在汇编中可用表示。AREA汇编一个新的代码段或数据段。将汇编代码组织在不同的段中。例如,.text段存放代码,.data段存放数据。EXPORT声明一个标号具有全局属性,可被外部文

保存上文:将当前任务的 r4-r11 手动压入其栈,并将新的栈顶指针保存到 TCB。选择下文:关中断保护全局数据,调用更新,然后开中断。恢复下文:从新任务的 TCB 中获取栈顶指针,恢复 r4-r11,更新 PSP,最后异常返回,硬件自动恢复剩余寄存器。通过这个机制,FreeRTOS 利用 Cortex-M 的 PendSV 实现了高效、可嵌套的任务切换,同时通过 BASEPRI 精细控制中断,保

主栈指针(MSP)和进程栈指针(PSP)是Cortex-M内核实现安全、高效任务调度的基石。隔离内核和用户任务的栈空间。利用硬件自动压栈/出栈的特性,简化上下文切换。通过异常返回机制无缝切换任务。理解MSP和PSP的工作原理,是深入掌握RTOS调度器底层实现的关键。希望本文能帮助你更好地理解之前调度器代码中涉及栈操作的部分,从而更自信地编写和调试RTOS应用。《ARM Cortex-M3与Cort

启动:设置中断优先级 → 获取MSP → 触发SVC → 进入第一个任务。切换:通过PendSV异常,在中断服务中保存当前任务状态、选择新任务、恢复新任务状态。关键寄存器:PSP(进程栈指针)、MSP(主栈指针)、BASEPRI(中断屏蔽)、SCB_VTOR(向量表偏移)。理解这些底层细节,不仅有助于我们更好地使用RTOS,也能在遇到问题时快速定位。希望这篇博客能帮助你把调度器的原理看得更通透。如

这些宏共同构成了 FreeRTOS 中高效、简洁的链表操作接口。它们被广泛用于任务调度、延时管理、事件处理等核心模块中。通过内联宏的方式,既保证了代码的紧凑性,又避免了函数调用的开销,符合嵌入式实时系统对性能和资源的要求。

C语言宏定义中的副作用问题源于宏的简单文本替换机制,可能导致带有副作用的表达式被多次求值。以FreeRTOS的listGET_OWNER_OF_NEXT_ENTRY宏为例,通过将参数赋给const局部变量,既避免了多次求值带来的副作用问题,又增强了代码安全性和可读性。编写宏时,对可能产生副作用的参数应先保存到临时变量再使用,这是防御性编程的重要实践。

主栈指针(MSP)和进程栈指针(PSP)是Cortex-M内核实现安全、高效任务调度的基石。隔离内核和用户任务的栈空间。利用硬件自动压栈/出栈的特性,简化上下文切换。通过异常返回机制无缝切换任务。理解MSP和PSP的工作原理,是深入掌握RTOS调度器底层实现的关键。希望本文能帮助你更好地理解之前调度器代码中涉及栈操作的部分,从而更自信地编写和调试RTOS应用。《ARM Cortex-M3与Cort








