- 博客(26)
- 收藏
- 关注
原创 嵌入式Linux产品开发笔记
开发流程分为:①硬件设计→②系统移植→③驱动开发→④应用开发→⑤测试阶段→⑥量产阶段。选择合适的硬件和软件平台。确定项目需求和开发方向。
2025-03-22 15:29:06
655
原创 U-Boot的移植流程
1、设置状态寄存器 cpsr ,使CPU进入 SVC 特权模式,并且禁止 FIQ 和 IRQ;2、关闭看门狗、中断、MMU、Cache;3、初始化部分寄存器和外设(时钟、串口、Flash、内存);4、自搬移uboot到内存中运行;5、设置栈空间并初始化global_data;6、剩余大部分硬件的初始化;7、搬移Linux内核到内存;
2024-10-21 22:15:18
1099
原创 C++ 智能指针
智能指针智能指针是一种自动管理动态分配(使用new操作符)的内存的机制,是对裸指针的封装,初衷是让程序员无需手动释放内存,来避免内存泄漏。它们在对象不再使用时自动释放内存,从而帮助防止内存泄漏。C++标准库提供了几种智能指针,其中最常见的是unique_ptrshared_ptr和weak_ptr。
2024-10-17 13:38:26
1035
原创 C++ 匿名函数 Lambda表达式
在C++中,匿名函数也称为Lambda表达式,字面意思即为没有名字的函数。可以让我们随手定义一些短小的函数,并把这个函数作为参数给其他函数调用。
2024-10-15 15:47:59
557
原创 秋招笔试题
2、单链表的冒泡排序,要求首先将数组转换成链表,头节点有数据,并且是交换节点而不交换数据。是一个无限循环,当满足条件的时候通过break跳出语句。1、请你解释你对DMA的理解,并举例说明。循环内具体内容不记得了,但是知识点是。1、下列for循环的循环次数。2、可重入函数和不可重入函数。1、最长无重复字符子串。
2024-09-22 15:23:58
284
原创 SDIO总线
SDIO总线,全称为Secure Digital Input and Output,即安全数字输入输出接口,是一种用于在设备之间传输数据的接口标准。它是在SD(Secure Digital)内存卡接口的基础上发展起来的,不仅兼容SD内存卡,还可以连接各种SDIO接口的设备。全速的SDIO卡传输率:这种SDIO卡的传输率可以超过100Mbps,提供了高速的数据传输能力。应用场景:全速的SDIO卡适用于需要高速数据传输的场景,如网卡、电视卡以及组合卡(存储器+SDIO)等。
2024-09-22 15:20:28
634
原创 嵌入式八股文
大端字节序是指将数据的高位存储在内存地址中的低位,将数据的低位存储在内存地址的高位中。这与我们平常的阅读顺序相同,先看到的是高位,后看到的是低位,因此被称为“大端”。例如,对于一个四字节整数0x12345678,在大端模式下,它的高字节是0x12,低字节是0x78小端字节序是指将数据的高位存储在内存地址中的高位,将数据的低位存储在内存地址的低位中管道,Pipe;通常指无名管道,用函数创建信号量,Semophore;信号,Signal;消息队列,Messge Queue;共享内存,Shared Memory
2024-09-10 22:41:36
715
原创 LCD屏幕显示
Framebuffer驱动和底层显示驱动之间的数据传输是通过mmap机制实现的,上层应用通过mmap映射的虚拟地址写入帧缓冲区,底层显示驱动则通过DMA等机制将帧缓冲区中的数据传输到显示设备的SRAM中,并最终由LCD控制器驱动LCD屏幕显示图像。。
2024-08-28 11:04:30
2432
原创 GDB调试程序
在PC端为gdb,在开发板上为gdbserver交叉编译器中自带gdb工具,存放在arm-linu-gnueabihf目录下,需要移植到开发板上在交叉编译时需要加上-g。
2024-08-11 16:46:55
280
原创 C++ 动态规划
动态规划(DP)的基本思想:可以用于解决:动态规划的求解思路:例子:https://www.bilibili.com/video/BV1ub411Q7sB/?
2024-07-17 15:12:01
255
原创 静态库与动态库
库是写好的,现有的,成熟的,可以复用的代码。本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。
2024-07-12 17:12:10
415
原创 Linux常用命令 (持续更新中)
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推。当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推。当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其此类推。
2024-07-12 10:42:08
488
原创 C++ 多态机制
在函数返回值前加上virtual关键字修饰子类重写父类的虚函数,函数名、返回值类型、参数类型、参数个数及顺序必须完全一致;函数体自定义public:public:public:Dog dog;return 0;/*Stdout*/
2024-07-11 19:39:53
1262
原创 C++ 继承,子类与父类的一些特性
子类重定义父类的成员函数和重载父类的成员函数在函数名称、参数列表以及返回类型等方面存在区别。函数名称重载:在同一个类中,函数名相同。重定义:在子类中,与父类中函数名相同。参数列表重载:参数列表不同,即参数的个数或类型有所改变。重定义:参数列表可以不同,但如果完全相同且父类函数未声明为virtual,则基类的函数被隐藏。返回类型重载:返回类型可以相同也可以不同,但重载不依据返回类型来判断。重定义:若与父类原型完全一致(包括返回类型),则为重写;否则,只是简单地隐藏了父类方法。
2024-07-11 16:39:40
1999
原创 C++ STL string容器
/删除从pos开始的n个字符。//pos位置插入字符。//把字符串 s 中从 pos 开始的 n 个字符连接到当前字符串结尾。//从 pos 位置查找 s 的前 n 个字符第一次位置。//查找 str 第一次出现位置,从 pos 开始查找。//从 pos 查找 s 的前 n 个字符最后一次位置。//查找 str 最后一次位置,从 pos 开始查找。//查找 s 最后一次出现位置,从 pos 开始查找。//查找 s 第一次出现位置,从 pos 开始查找。//字符串 s 从 start 开始的 n 个字符。
2024-07-10 14:45:43
1310
原创 C++ Vector和List的区别
总的来说,如果需要高效的随机访问和较低的内存开销,vector是更好的选择;而如果需要频繁进行插入和删除操作且不需要随机访问,选择list则更为合适。根据具体的应用场景和需求选择合适的容器可以显著提升程序的性能和开发效率。vector和list是C++标准模板库(STL)中的两种不同的容器类,它们在。但是两个迭代器都重载了 “++” 运算符。
2024-07-10 12:33:07
1571
原创 C++ Vector容器
数组array,一旦配置了就不能改变。如果要改变空间大小,就需要重新定义一个数组,将旧数据搬到新空间中,并释放原来的空间。vector是一个封装了动态大小数组的顺序容器(单端数组,向量),能够存放各种类型的对象。与普通数组不同,vector可以动态地增长和缩小,以适应程序的需求。vector具有连续存储的特点,这意味着它的元素在内存中是连续存储的,使得访问元素非常快速。为了使用vector,需要包含头文件v.begin();//获取容器的其实迭代器(指向第0个元素)v.end();
2024-07-09 20:29:08
1201
原创 内存对齐原因
总之,内存对齐主要是为了提升内存使用效率和满足不同硬件平台的特定要求,从而优化程序性能和稳定性。对于开发者来说,掌握内存对齐的原理和应用,将有助于编写高效、可移植的代码。内存对齐针对现代计算机内存的物理结构和处理器特性,通过对数据在内存中的位置进行优化,从而提升整体系统性能并确保数据的稳定存取。内存对齐的主要原因是。
2024-07-09 17:16:07
227
原创 C/C++ 结构体小知识
对于这个结构体来说,char型占1个字节,int类型占用4个字节,short类型占用2个字节,那么直观来看这个结构体应该总共占用1+4+2=7个字节。打印结果如上图所示,通过地址,我们可以看到结构体中变量的存放是依次进行的。openAI 的 GPT 大模型的发展历程。4个字节 ✖ 3个变量 = 12个字节。
2024-07-09 16:40:17
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人