单片机等零碎知识点(笔记)

CPU与寄存器的关系:

将CPU比喻为皇帝,寄存器比喻为太监,寄存器外设比喻为大臣

RAM:针对当庭讨论事件的临时文件,主要用来方便沟通用退朝后就丢掉了。(草稿?)
ROM:朝代制度,祖先、习俗规定等不可更改的。

或者:

CPU是厨师,寄存器是服务员,外设是菜单
菜单有啥厨师才能做啥;服务员负责点菜传菜,两者之间沟通;

计时器代替延时函数(delay)

CPU(多核心):(人类的大脑) 取指令、解码指令、执行指令
显卡的单个核心比作小学生,那 CPU 的核心就是老教授。如果要解微积分方程,
几千个小学生凑一起也比不上一个老教授,但如果只是 100 以内的加减法,
几千个小学生的效率肯定比老教授要高很多。
因此 CPU 是任务并行(大家分别处理不同的任务),显卡是数据并行,大家一起搞同一个任务。


以下是为什么建议使用计时器而不是延时函数的几个原因:

1. 精确性:延时函数通常是基于循环计数的,其延时时间受到CPU时钟频率和编译器优化的影响,因此不够精确。而使用计时器可以更精确地控制时间,因为计时器的时钟源通常是固定的,不受其他因素的干扰。

2. 并发性:在单片机应用中,可能需要同时执行多个任务或响应外部事件。
如果使用延时函数,它会阻塞程序的执行,而计时器可以在延时的同时执行其他任务。

3. 可维护性:使用计时器编写的延时代码通常更易于维护和调试,因为你可以清晰地定义和管理计时器中断。

4. 灵活性:计时器可以用于各种时间相关任务,例如定时触发传感器读取、生成PWM信号、测量时间间隔等,而延时函数通常只用于简单的延时操作。

类似魂斗罗、超级玛丽等游戏如何做到小内存并且存储播放大量图片?

方法一

可以参考:https://v.douyin.com/ier5Q5tR/ 

帧缓存复用是一种优化技巧,通过在内存中复用帧缓存来存储多个连续帧的像素数据,以减少内存占用。以下是一种可能的实现方法:

1. 确定帧缓存大小:首先,确定每帧像素数据所需的内存空间大小。这取决于您的OLED显示器的分辨率和色彩深度。假设每帧需要的内存大小为frame_size。

2. 创建帧缓存:在MCU的内存中分配一个足够大的帧缓存,大小为frame_size * num_frames。其中,num_frames是您希望存储的连续帧数。

3. 解码和渲染过程:在解码和渲染GIF动图时,按照逐帧解码的方法,将每一帧的像素数据依次解码到帧缓存中。

4. 复用帧缓存:在渲染下一帧之前,不需要清空或重新分配帧缓存。相反,将当前帧的像素数据保留在帧缓存中,并将下一帧的像素数据解码到帧缓存的空闲区域中。

5. 更新屏幕:在渲染每一帧时,只需将帧缓存中的像素数据直接发送到OLED显示器进行更新。由于帧缓存已经包含完整的连续帧像素数据,您可以通过简单地指定要显示的帧在帧缓存中的偏移量来更新屏幕。

这种方法的关键在于帧缓存的复用,即将连续帧的像素数据存储在同一个帧缓存中,而不是为每一帧分配独立的内存空间。这样可以大大减少内存占用。

#include <stdio.h>
#include <stdlib.h>

// 定义帧缓存大小和帧数
#define FRAME_SIZE 1024
#define NUM_FRAMES 10

// 模拟解码和渲染帧的函数
void decodeAndRenderFrame(unsigned char* frameData, int frameNumber) {
    // 在这里,您可以根据实际情况实现解码和渲染帧的逻辑
    // 将帧数据显示在OLED屏幕上或进行其他相关操作
    printf("Rendering frame %d\n", frameNumber);
}

int main() {
    // 分配帧缓存
    unsigned char* frameBuffer = (unsigned char*)malloc(FRAME_SIZE * NUM_FRAMES);
    if (frameBuffer == NULL) {
        printf("Failed to allocate frame buffer\n");
        return 1;
    }

    // 模拟连续帧数据
    for (int frame = 0; frame < NUM_FRAMES; frame++) {
        // 假设每帧数据大小为 FRAME_SIZE
        unsigned char* frameData = frameBuffer + (frame * FRAME_SIZE);

        // 解码和渲染帧
        decodeAndRenderFrame(frameData, frame);
    }

    // 释放帧缓存
    free(frameBuffer);

    return 0;
}

方法二

PDF存储图片方式:

传统上使用位图格式存储,需要很大的空间,沃诺克的解决方法是不用存储整个图像的数据,而是按一定规则向电脑描述图像的组成格式,例如大小 形状 色彩,然后由电脑画出图像

图形学算法?

uboot

猜你喜欢

转载自blog.csdn.net/qq_42241352/article/details/132725786