- 博客(13)
- 收藏
- 关注
原创 FreeRTOS任务调度原理
机制,允许高优先级任务抢占低优先级任务的执行权。:若时间片耗尽或高优先级任务就绪,挂起 PendSV 中断。:允许高优先级中断优先执行,避免上下文切换阻塞关键操作。:仅在启动阶段使用,优先级通常与 PendSV 一致。:PendSV 优先级设为最低,确保其他中断可抢占。:一般优先级高于 PendSV,确保时间管理及时。:保存当前任务上下文,加载下一任务上下文。若需切换任务,挂起 PendSV 中断。,直接挂起 PendSV 中断触发切换。:设为最低优先级,允许其他中断抢占。
2025-04-29 11:20:19
1013
原创 mcu和FreeRTOS的出栈压栈
(一个错误处理函数)。如果任务函数意外退出(如未设计为无限循环),处理器会跳转到此函数(通常是一个死循环),防止系统崩溃。,模拟硬件中断压栈后的状态,使得任务首次调度时,处理器能像从中断返回一样启动任务。:ARM Cortex-M 架构中,栈通常从高地址向低地址生长(满递减栈)。- SP -= 32(假设每个寄存器占 4 字节,共 8 个寄存器)。:出栈后栈指针(SP)向高地址移动(ARM Cortex-M 为满递减栈)。3. SP += 32(假设每个寄存器占 4 字节,共 8 个寄存器)。
2025-04-25 17:30:59
665
原创 FreeRTOS系统移植
因此,c文件和h文件直接移植就好,剩下的就是移植portable的文件了。portable中的文件是需要根据。1. 文件中的c文件: 文件中的c文件都是FreeRTOS的核心c文件实现。2. include 文件夹:FreeRTOS系统需要包含的h文件。接下去就是需要修改代码让项目代码和FreeRTOS系统代码对接起来。3. portable 文件夹:是用于不同mcu架构下的移植文件。至此,所有需要的copy到项目的系统文件就已经完成了。Source中的文件即使FreeRTOS的源码。
2025-04-16 19:35:50
295
原创 Bootloader跳转代码解析
(Vector Table)是程序启动的核心数据结构。在 ARM Cortex-M 系列处理器中,这是一段从Boot跳转到App的代码。
2025-02-17 11:26:27
454
原创 mcu的存储空间分布
而 'ram' 则是用于存储运行code的中间变量,**掉电丢失**。'rom' 'ram' 打引号是因为,目前因为更新换代,它们已经不是严格意义上的rom和ram了。而是用于表示其掉电不丢失,和掉电丢失的特性。:这些变量的初始值存储在 ROM 中,但运行时会被拷贝到 RAM 的对应区域。(如多数 MCU):代码(ROM)和数据(RAM)使用独立总线,可并行访问。:初始化后的该变量区域,通常会被起始文件清零,以保证变量的默认值为0。:通常位于 ROM 的起始位置,存储中断服务程序(ISR)的入口地址。
2025-02-11 11:17:47
1354
原创 MCU的存储大小,数据总线宽度
在编程时,需要根据 MCU 的数据总线宽度正确访问存储器,避免对齐问题。决定了 MCU 一次可以传输的数据量,但不会改变每个地址的存储大小。决定了 MCU 一次可以传输的数据量,但不会改变每个地址的存储大小。每次访问多个地址(如 2 个或 4 个),读取或写入多个字节数据。每次访问 1 个地址,读取或写入 1 字节数据。每次访问 1 个地址,读取或写入 1 字节数据。每次访问 2 个地址,读取或写入 2 字节数据。每次访问 4 个地址,读取或写入 4 字节数据。,这是现代计算机和 MCU 的通用设计。
2025-01-21 16:08:22
392
原创 boot到app的跳转
一些芯片具有中断向量表重映射的功能。在硬件的重映射下,app和boot的中断向量表是并存的,两个表互不干扰。同一个中断,在boot时执行boot的中断,在app执行app的中断。如果中断中的一个函数在app和boot均有定义,那么执行的中断向量表是谁的,那么中断中执行的函数就是谁的。例如在2.2中的软件跳转,起初运行的是boot的中断向量表,其中的函数则是对应的boot层的,一旦跳转到app,则运行的是app的函数。有一些芯片例如arm0系列的,是不具有硬件重映射的功能的,只能进行软件跳转。
2025-01-13 16:16:46
579
原创 蓝牙学习日记
运行蓝牙协议栈(如BLE协议栈)。常见射频硬件: Nordic nRF52系列(集成射频和MCU)。实现蓝牙物理层(PHY)和链路层(Link Layer)的功能。小结:硬件上分为mcu与射频硬件,mcu通过蓝牙协议去驱动射频硬件,即完成了蓝牙功能。MCU是蓝牙设备的核心,负责运行蓝牙协议栈、处理数据、控制外设以及执行应用程序逻辑。逻辑链路控制与适配协议(L2CAP):数据包的分段和重组。主机控制接口(HCI):MCU与射频硬件之间的通信接口。射频硬件负责发送和接收蓝牙信号(2.4GHz频段)。
2025-01-06 13:57:59
258
原创 JFlash添加新芯片
在结尾的之前添加新芯片的数据,注意设备信息的参数都是以头表示芯片数据开始,以及为结尾表示芯片数据结束。注意不要把新芯片数据插入到其他的芯片数据之中。打开Jlink文件中的JlinkDevices.xml 记录文件。完成以上步骤就能够使用Jlink烧录新芯片的程序文件了。在Device文件夹中添加芯片厂商提供的芯片数据包。打开Device文件夹可发现,都是各个芯片的数据包。
2025-01-03 09:59:42
1210
4
原创 const关键字
每次使用Const关键字去限制指针变量的时候,总是会忘记const处于不同位置下的作用。因此记录记录整理一下const关键字的用法。
2024-08-27 11:32:48
343
原创 位置式PID学习
将PID公式离散化,e(t) == 目标值-实际值(target_value - measured_value)偏差值, ∫e(t) dt == 误差累加(integral += bias)偏差累计,de(t)/dt == 当前误差值 - 上一次的误差值 (bias - pre_bias)偏差变化趋势。PID控制器参数整定是至关重要的,因为它直接影响到控制系统的性能。是系统的偏差、误差数值与时间的曲线公式(设定值与实际值之差),三个参数,以达到理想的控制效果。是比例、积分和微分系数。
2024-08-26 19:30:35
474
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人