
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
DMA是直接内存访问,它允许外设和内存之间直接搬运数据,不需要CPU参与每一个字节的传输。│ 方式1:轮询(Polling) ││ CPU一直在等,干不了别的事 ││ while(!flag);← CPU在这空转 ││ 适合:数据量小、对实时性要求不高 ││ 方式2:中断(Interrupt) ││ 每传完一个字节/一组数据,中断通知CPU ││ CPU被打断 → 保存现场 → 处理 → 恢复现场
Bootloader是启动加载器初始化硬件判断是否需要更新固件如果需要,从串口/USB/网络接收新固件并写入Flash跳转到应用程序执行│ Bootloader工作流程: ││ ││ 上电 → Bootloader启动 → 检查更新标志 ││ ↓ ↓ ││ 有更新请求 无更新请求 ││ ↓ ↓ ││ 接收新固件 跳转到APP ││ 写入Flash ↓ ││ 清除标志 APP运行 ││ 跳转到APP

安装VScode(略)安装GCC和mingw(上网找教程,很简单)安装插件:C/C++CMake。
首先将 EIM 仓库添加到 APT 源列表,以便后续使用 APT 安装 EIM。然后APT安装EIM CLI。
CubeMX 配好 SPI 和 GPIO— LCD 硬件接口下载 LVGL 源码,修改 lv_conf.h— 配置分辨率、颜色深度、内存实现 disp_flush— 把 LVGL 的画点操作映射到你的 LCD 驱动主循环调用 lv_timer_handler()— 驱动 UI 刷新和事件处理移植完成后,就可以用 LVGL 的可视化工具拖拽设计界面,导出 C 代码直接用,开发效率极高。如果本文对你有

用EIDE插件打开并编译KEIL工程后,生成的HEX文件跟KEIL生成的路径不同,在VScode的终端可以看到具体路径。
统计利用率的方式是,在一段时间里程序运行的情况。比如100ms中,A任务总共占用50ms,B任务总共占用20ms,中断任务占用10ms,空闲20ms,那么这100ms中CPU利用率就是80%。
在FreeRTOS中,系统调度本质上是产生PendSV中断,也是一种中断,所以FreeRTOS对临界段的保护本质上就是对中断的开关控制。FreeRTOS在进入临界区的时候需要关闭中断,处理完临界区后再打开中断。FreeRTOS本身就有很多临界区,且都加了临界区保护。的值的中断会被临界段屏蔽,反之不会屏蔽,不受FreeRTOS管理。比如有的外设启动初始化的时候需要严格的时序,不能被打断。FreeRT
允许内存堆跨越多个不连续的内存段,比如从单片机的RAM开始,到外接的SRAM,都可以作为内存堆,其他分配方法的内存堆都不能跨越不连续的内存段。申请到一部分内存后,剩下的内存块组成一个新的空闲内存块,按照空闲内存块起始地址插入到空闲块链表中,合并算法会将地址相邻的空闲内存块进行合并。根据释放的内存块起始地址,偏移后找到内存堆链表节点,然后将被释放的内存块插入到空闲内存块链表中,插入过程中会执行合并算
每个任务都有一个32位的通知值,在创建任务时会自动初始化任务通知值。在任务或中断中都可以向其他任务发送通知。只有在任务中可以等待通知,中断中不允许等待通知。与其他任务通信方式相似,若通知暂时无效,会根据指定的阻塞超时时间进入阻塞态,直到通知有效,或超过指定的阻塞时间。任务通知值为一个32位的变量,可以通过按位操作再发送,当作轻量事件组,或者当作计数信号量、消息队列等多种用法。







