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

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

龙虾哥:嵌入式学什么?

嵌入式主要学习哪些内容?_哔哩哔哩_bilibili

映射:强制类型转换

指令总线:读程序

数据总线:读数据 

存程序:NOR FLASH(CPU直接访问)

AD画图:规则、注意事项(模电走线 )

例如:

电源电路VCC,一般前面加一个电容滤波;VCC先连电容再连到单片机(直线)

电流大,线越宽

元器件摆放规则,走线规则

画图:参考原厂或别人的开发板

选FLASH,能不换厂家就不换厂家,尽量用一个系列的

移植肯定越少越好(学习得移植全面,uboot移植得会)

1.uboot移植:1.基本外设的移植(SDRAM初始化)  ST-LINK要会

uboot功能:加载操作系统,把操作系统从这个硬盘(网络、SD卡)里面搬出来;简单的调试,调试就是你这个操作系统没有加载起来之前,对硬件进行基本操作,测试。

2.操作系统:那么操作系统其实我们大部分的其实是裁剪,删除不用的,不需要那么大的存储器,降低成本

3.加载文件系统:有了文件系统,更方便管理,按照要求制作文件系统。

单片机和嵌入式都要学QT,菜单、按键、键盘、网络、数字、数据库、软件键盘(实现一个功能完成任务)

硬件工程师,主要的工作:

 把这个整个一个工作环境搭建起来,画电路板,移植uboot,把uboot下载到板子里面,保证硬件没问题,uboot测试硬件(FLASH内存、验证内存有没有问题)

画板子:2层板和4层板

Linux文件挂载到 window

交叉编译

软件:

嵌入式Linux应用开发+相关行业(产品 )知识,如汽车(CAN )

软件学1-7,9 , 13-14

硬件学8-11

总结:

一个产品从上电到运行第一个应用程序,需要做什么?

1.会画板子(硬件工程师),画板子简单,难的是设计电路板(用什么内存、uboot放在那里、操作系统放在那里、如何跟MPU相连接、触摸屏怎么连接选什么触摸屏、用不用到硬件如:USB键盘、什么时候用网卡、uboot怎么移植上电整个过程、应用程序开发有无界面、采集数据控制数据、如何登陆网络下载一个视频、然后在你的产品上播放、掌握工具后还得走业务方面的开发)

单片机:串口屏 

板子 + uboot移植 + 通过uboot把操作系统内核加载 + 再通过操作系统内核加载文件系统 + 运行qt的软件

QT:你能通过串口接触到数据,能在电脑上面就是就是画曲线,把它数据变化,采集个温度,在电脑上面弄个曲线显示出来,或者说在电脑上面画个仪器仪表,画个什么表盘对吧,播放视频,联网看网页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值