分类 C/C++编程 下的文章 - 田帅康学习笔记

【经验分享】怎样在ESP32平台上实现高效刷图动画

怎样在ESP32上流畅的播放动画最近有一个预研项目,在ESP32上播放动画,于是来测试一下ESP32刷动态图的极限性能1. 硬件以及内容描述名称描述CPUESP32S3@240MhzRAM512KB (IRAM (192KB ) + DRAM( 328KB ))LCDILI9341分辨率240*240图像位深16bit RGB565SPI速率60Mbps图像数量400张原始数据总大小45MB图片占

- 阅读全文 -

TLSF内存算法

TLSF内存算法1、动态内存算法管理背景项目中经常需要使用malloc进行动态内存分配,但是存在两个缺陷由于分配算法的复杂度,分配时间不确定在不断地申请、释放过程中,容易因为内存对齐产生碎片内存这两个缺点在项目中华通常是不被允许的,因此需要一套较为合理且时间可确定的动态内存管理机制,目前有以下两种解决方案:动态内存堆管理算法(mmheap),用于不定长分配静态内存池管理算法(mmblk),用于定长

- 阅读全文 -

【技能储备】J-link RTT的使用

技能储备系列是一些暂时由于时间或者其他客观因素暂时无法进行的工作,但是觉得很有用,因此做个记录,文章参考自Snow_2018在CSDN上的文章,原文链接为点击我写在前面本文介绍了J-Link RTT的部分使用内容,很多地方参考和使用了J-Link的官方资料,有的地方可能翻译的不太准确,请见谅。什么是RTT?RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术,它结合

- 阅读全文 -

C语言中的字符串操作函数

盘点C语言中的字符串操作函数1、字符串复制和连接#include <stdio.h> #include <string.h> int main() { // strcpy char src1[] = "Hello"; char dest1[20]; strcpy(dest1, src1); printf(&quo

- 阅读全文 -

低成本使用MCU播放提示音方式

1、音频产生原理物体的振动产生声音,下图是一段音频波形,可以从这张图片中了解一下声音的关键参数采样率:一秒钟有多少个采样点,常见的有8K,16K、32K、44.1K等,可以说采样率越高,音质越高采样位深:一个采样点的音频深度,常见的有8bit或者16bit,震动引起声音,同样是3.3V的电平变化,8bit位深的变化范围是0~255,16bit位深的变化范围是0~65535,位深越高,能表达的音频变

- 阅读全文 -

STM32G0系列的bootloader启动问题

问题描述:最近在使用STM32G0的bootloader下载时,发现拉高boot0后,空片只能烧录一次,然后无论如何拉boot0,再也无法线刷固件了,通过查看文档解决了此问题1、STM32G0系列与旧款STM32启动的不同之处旧款STM32 boot启动方式:STM32G0 boot启动方式:不同之处:简单来说,G0系列多了个选项标志位,也就是nBOOT_SEL,如果nBOOT_SEL为0,则外部

- 阅读全文 -

lvgl中存在的内存泄漏问题

在lvgl中,当两个页面之间互相切换时,先将第一个页面的控件全部删除,在创建新页面的控件,但是有时执行后会发现会出现内存泄漏:两个页面来回切换,内存占用不断提高,直到卡死。1、情况复现使用最简单的方式复现问题,模拟器新建两个页面,每个页面在创建时新建一个style对控件进行修饰,不断切换页面后,内存占用会不断升高现象截图:测试代码:static lv_style_t style ; static

- 阅读全文 -

嵌入式组件-----层次状态机

前段时间写了一篇文章描述FSM(有限状态机),但是在有些情况下业务比较复杂,就会使用到HFSM(层次状态机),使用层次状态机,将复杂的业务分解为几个大状态,每个大状态再维护自身内部的小状态,可以使代码更加条理,增加代码的可读性与可维护性1、层次状态机思想类似于FSM,层次状态机也具有这几个部分:状态、事件、转换、运行。状态(State):系统或程序可能处于的不同状态,例如"待机"、"运行"、"暂停

- 阅读全文 -

lvgl静态文件系统

1. 前言在lvgl中经常需要显示大量图片,但是MCU的内部flash不足以保存大量的图片,因此需要将图片保存在外部flash上,通过SPI或者QSPI方式读取。适用于嵌入式的文件系统较多,例如fatfs,但是较为占用资源,并且在文件较多的情况下,读取文件需要查目录,导致速度慢,fatfs的增删改功能我们也用不上,因此想到写一个精简版的静态文件系统。2.实现过程lvgl静态文件系统就是将文件保存在

- 阅读全文 -

LVGL双缓冲处理流程

1、LVGL单缓冲区刷屏流程任务启动之后,lvgl按需往屏幕上刷数据,阻塞等待刷屏完成,继续运行lvgl任务,重复此流程2、LVGL双缓冲区刷屏流程启动之后,lvgl按需往屏幕上刷数据,在触发SPI DMA发送后,前台继续处理LVGL任务,并且渲染在另一个缓冲区中,SPI传输则在后台发送,不占用CPU时间,等到后台的SPI传输完成,向上告知LVGL可以继续刷屏了,lvgl再将另一个缓冲区的数据推到

- 阅读全文 -