- 博客(59)
- 收藏
- 关注
原创 linux
启动过程中的uboot ,其实 uboot 就是一个裸机程序,上电的第一时间会去初始化寄存器,进行硬件自检,然后会去配置启动参数,这个启动参数主要是一些环境变量还有就是配置一些启动过程,接着就是会加载和传递设备树,这个时候会将对应的文件 boot.bin 传递到内核里面,传递进去以后就会加载内核镜像并调用内核入口。然后控制权就给了内核,内核第一步做的就是初始化硬件,(MMU和定时器),然后内核会解析和初始化设备树,此时内存管理初始化执行完毕,此时就开始加载内核模块并挂载根文件系统。
2025-04-27 11:57:01
617
原创 arm64体系结构编程与实践
以 <Xn>|SP 为基地址,读取 <Xn>|SP{,#<imm>} 寄存器的值到 <Xt1> 寄存器中,读取X n /SP寄存器的值 + imm + 8地址的值到X t 2寄存器中。它以X n /SP寄存器的值为基地址, 然后把X t 1寄存器的内容存储到[X n /SP + imm]处, 把X t 2寄存。●X n /SP: 用于基地址寄存器, 它对应指令编码中的R n 字段, 也可以使用SP寄存器。MOV 用于在寄存器之间移动数据,或者将立即数加载到寄存器,但是立即数的范围有限。
2025-04-10 15:00:26
728
原创 跟我学Makefile
/在头文件中的定义#endif//在main函数中的使用//在编译过程中会出现问题,因为在 G 和 (x)中间多了一个空格,导致编译器将 G 看成一个宏,而不是 G(x).// 宏定义和typedef 一致// T1和T2所表示的类型有可能会不一致//比如T1 a , b;a是指针类型,b是结构体类型T2 a , b;a和b都是指针类型。
2025-04-07 17:19:52
168
原创 哈希表(力扣用法记录)
int key;//可以就只有key不加valueint value;} Hash;return tmp;it = NULL;return 1;
2025-04-07 17:14:01
168
原创 MCU SOC 上电不启动问题总结
在 boot rom 中,芯片启动的时候会先去读 boot mode寄存器中的值,根据 boot mode 的值选择启动模式,通常有 nand nor emmc sd 等,然后去对应的 memory 中读取启动文件。3、在场效应管(或COMS器件)中,VDD为漏极,VSS为源极,VDD和VSS指的是元件引脚,而不表示供电电压。1、对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc>Vdd),VSS是接地点。进一步说,还有因电路形式不同而必须区分的两种“地”:数字地,模拟地。
2024-09-19 22:41:55
962
原创 linux驱动开发-磁盘管理
在中,mount命令是一种非常常见且有用的工具,用于将文件系统连接到指定的挂载点。通过使用mount命令,管理员可以访问和管理存储设备上的文件和目录,包括硬盘驱动器、CD或DVD驱动器、闪存驱动器等。-l:以列表的形式显示当前已挂载的文件系统。-t :指定要挂载的文件系统的类型,例如ext4、ntfs等。-o :指定挂载选项,比如读写权限、访问控制等。:指定要挂载的设备的名称或路径。:指定要挂载到的目录路径。mount -l。
2024-09-11 22:34:33
1754
原创 DC 板 boot 测 nor 兼容性记录(qspi )
2、由于socket与DC板接触可能不是很好,所以怀疑在数据传输过程中如果 IO频率过高会导致数据读出来的和flash中原本存储的数据对不上,这个一般会怀疑是驱动问题,但其实只是频率问题,所以遇到flash 读写有问题时,可以先考虑将qspi降成 spi模式,也就是将 4线模式转换成 1 线模式,或者是降低 IO频率;IO 频率在驱动的硬件cfg 参数中修改即可。1、EC前芯片能使能各项外设,在测试过程中发现能够读 flash ID ,但是在boot的过程中会遇到问题,包括之前boot的大电流问题;
2024-09-11 19:28:10
1045
原创 printf 和 \r \n的故事
linux编译环境和win编译环境下的 \r\n 含义是不同的;\r :是指将光标移动到本行的开头;\n : 是指另起一行;
2024-07-12 15:02:04
288
原创 UNUSED宏用法
有些函数入参用不上的时候,会在编译的时候报 warning,在编译参数里面添加-Werror这个编译选项时,会将所有的warning信息转换为error,对编译造成影响;所以为了避免编译终止问题,我们对于一些函数入参需要用UNUSED_PARA 做下处理;
2024-07-12 14:51:26
244
原创 BSP驱动教程-CAN/CANFD/CANopen知识点总结分享
博世的CAN2.0和CANFD规格书。MDK的CAN入门教程。Kvaser入门教程。
2024-06-15 15:20:28
543
原创 ulog记录(RTTulog部分)
首先计算颜色信息的长度,然后根据颜色信息的长度确定新的日志起始地址和日志长度,去除颜色输出的标记后,再调用后端的输出函数),输出函数ulog_output_to_all_backend相关参数主要包括:日志级别,标签,是否为原始日志,缓冲区,长度。- `rt_err_t ulog_backend_set_filter(ulog_backend_t backend, ulog_backend_filter_t filter)` 函数用于设置日志后端的过滤器。参数 `tag` 是要设置的全局日志标签。
2023-08-02 16:56:58
1533
原创 makefile中的常用关键字和函数
其中的function为函数名,argument是参数,函数名与参数之间用空格或者Tab隔开,如果有多个参数,之间用逗号隔开。
2023-07-29 15:13:40
397
原创 位段和位域
计算机内存是以字节为单位进行划分的,CPU通过地址总线访问内存时,一次能处理多少字节的数据就会让地址总线读几个字节的数据,32位的CPU一次处理4字节的数据,每次就从内存中读取4字节的数据,少了浪费主频,多了没有哟个。当相邻成员的类型相同时,如果它们的位宽之和小于类型的 sizeof 大小,那么后面的成员紧邻前一个成员存储,直到不能容纳为止;这里插播一下大小端存储的简单介绍:大小端存储是计算机用于处理多字节数据的不同方式,在内存中存储多字节数据时,字节的存储习惯。在 : 后面数字来限定成员变量占用的位数。
2023-07-29 14:38:47
226
原创 makefile学习记录
本记录仅用于记录自己makefile学习的知识点,侵权删!跟我学makefile,极力推荐,神书!makefile是为了自动化编译设计的,程序首先需要把源文件编译成中间代码文件,在win下为.obj文件,在unix下为.o文件,这个就是编译(compile)的过程,将大量的obj文件合成为执行文件就是链接过程(link)。
2023-07-23 14:32:55
157
原创 git指令记录
集中式版本控制有一个主版本号,每次版本迭代都会以这个版本号为主,分布式因为每个客户端都是服务器,git没有固定的版本号,代码回滚会有一个哈希值作为代码ID,一般以master作为主仓库,我们可以push到master并合并到主仓库上,主仓库的版本号就会迭代一次,客户端的git迭代与master无关,只有在merge时才会合并一次。分布式版本控制系统:每一个电脑都属于一个服务器,在主仓库拉一份代码以后,则可以将自己的电脑作为服务器,自己在本地做的修改可以提交到主仓库。其中HEAD指向最新放入仓库的版本。
2023-07-15 10:39:32
388
原创 [Linux+gcov+lcov]测试代码覆盖率总结
会生成原始的代码覆盖率文件test.gcov,因为此时没有运行test的可执行文件,所以没有test.gcda的统计数据,覆盖率为0。lcov属于gcov的图形化工具,可转换为html格式的代码覆盖率报告,需要自己安装,网址如下。在编译时会产生.gcno文件,包含重建基本图块和相应的块的源代码的行号信息;(2)运行gcov会生成test.gcda文件,其中包含代码覆盖率信息。在运行编译的程序时会产生.gcda文件,包含弧跳变的次数信息。每行前面的数字表示行运行的次数。其中#####表示未运行的行。
2023-07-07 13:30:17
655
原创 win10+Ubuntu双系统安装教程
Ubuntu桌面版的安装镜像文件名为:ubuntu-<版本号>-desktop-amd64.iso。将镜像文件写入U盘就行。在选择文件的时候要注意文件的类型;选中D盘,右键单击压缩卷,我分了一个60G的空间盘。6、重启并按照设定对Ubuntu进行分区即可。然后安装一下这个工具,在桌面上就可以启动。右键单击WIn按钮,然后打开磁盘管理。用win32diskImage。1、下载Ubuntu镜像文件。3、制作Ubuntu安装盘。2、下载安装镜像工具。5、查看磁盘分区格式。
2023-04-19 21:43:32
1134
RT-Thread OS
2023-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人