- 博客(419)
- 资源 (33)
- 收藏
- 关注
原创 联合体位域修改
/ 输出 512(2^9)printf("val = %d\n", val);直接读写整个 32 位值,适合批量操作或寄存器写入。的二进制第 9 位(假设小端)会被置 1,:禁止编译器插入填充字节,确保位域紧密排列。:强制结构体按 4 字节对齐,保证其大小与。// ... 其他位域。验证了通过位域修改联合体值的正确性。)直接操作特定位,代码可读性高。:通过联合体将位域结构体与。的 32 位,无内存浪费。:通过结构体成员(如。
2025-04-17 21:00:52
185
原创 Vscode使用小技巧
按住 alt 键 ,鼠标可以单独选 frame_idx 和 sensor_id。按住 alt + shift 键, 鼠标可以拖到选择,便于整体删除。
2025-04-13 22:43:59
183
原创 常用指令积累
在默认情况下,grep 的匹配规则使用了正则表达式,其中(点)在正则中匹配“任意单个字符”而不是字面上的点。因此,在执行时,实际上会把.loop中的当作通配符,从而匹配到只要含有 “任意字符+loop” 形式的内容。要想只匹配字面上的.loop这样\.loop中的\.就会被当作真正的点号来匹配。-F这样 grep 会将.loop当作普通字符串来匹配,而不是使用正则。搜索排除项目--exclude=
2025-04-09 16:30:39
157
原创 指针的理解
int a = 10;+-- p ------>|&a | // p存储a的地址+-----+变量a存储整数值10。指针变量p存储变量a的地址&a,即p指向a不建议直接修改p 值, 如 p=20,这里指 p 指向了 内存地址值 20 ,如果20不是一个有效地址,将导致未定义的行为*p = 20;+-----+通过*p = 20;,我们修改了p指向的变量a的值,将其改为20,即将修改为 20.+-----+| pp | // pp存储p的地址&p的地址。
2025-04-09 13:34:38
994
原创 遍历SD卡jpeg目录存图
将 JPEG 数据保存到按序号递增的文件中。若目录为空或无数字文件,返回。:用于目录操作(如打开目录、读取文件项)。:遍历目录,找出文件名中数字最大的文件。:仅处理普通文件,忽略子目录和特殊文件。:从文件名中提取连续数字并转换为整数。打开目录,检查是否为普通文件(:将数据写入文件,并调用。:若文件名无数字,返回。不存在,则创建(权限。:提供字符处理函数(如。
2025-04-08 10:24:35
348
原创 使用typedef和不使用的区别
特性使用typedef不使用typedef目的定义一个新的类型别名,用于表示函数指针类型声明一个具体的函数指针变量可读性和简洁性更高,尤其在多次使用时较低,语法复杂且冗长重用性高,可以多次使用定义的类型别名低,每次声明都需要重复复杂的语法代码维护和扩展更容易维护和扩展,减少错误难以维护和扩展,容易出错示例// 假设 sensor_drv_params_t 已定义char* name;// 示例加载函数int x;int y;} Point;。
2025-04-07 17:21:46
884
原创 CMA内存分配器
CMA是什么?为什么需要CMA?Linux伙伴系统(Buddy)使用 Page 粒度来管理内存,每个页面大小为4K。伙伴系统按照空闲内存块的长度,把内存挂载到不同长度的 free_list链表中。free_list 的单位是以 (2^order个Page) 来递增的,即 1 page、2 page、… 2^n,通常情况下最大 order 为10 对应的空闲内存大小为 4M bytes。
2025-04-07 16:53:55
870
原创 SWAP的作用
swapfile并不是从物理内存中获取内存,而是使用磁盘上的空间来扩展虚拟内存。它的作用是当物理内存不足时,提供额外的空间存储不活跃的数据。虽然可以增加系统的内存容量,但频繁使用swapfile会影响系统性能,因此应尽量避免频繁依赖 Swap。在虚拟机中查看swap的位置嵌入式设备中查看。
2025-04-07 16:49:42
826
原创 指针的指针地址图解
hComp | ----> main中的handle的地址。所指向的实际数据内容,通过两次解引用可以访问和修改具体的数据。,用于传递指向指针的指针,使得函数内部可以修改指针指向的地址。通过上述分析和示例代码,可以清晰地理解。,在函数内部被赋值为分配的内存地址。分配内存,假设分配到地址。main中的handle。main中的handle。之间的关系及其指向。hComp指向的地址。
2025-04-07 16:44:59
314
原创 双向链表示例
每个节点的结构如下:头节点(head的next指向链表的第一个节点,prev指向最后一个节点。每个节点prev指向前一个节点,next指向下一个节点。这样就形成了一个环形链表。环形链表的特点:最后一个节点的next指向头节点,头节点的prev指向最后一个节点。| |v v。
2025-04-06 23:22:15
1024
原创 内存管理模块
在大多数 32 位和 64 位系统中,Linux 内核为自己保留了一个独立的虚拟地址空间。这些地址空间被划分为不同的区域,每个区域负责特定的功能,如直接映射物理内存、动态分配内存、设备映射等。以下是常见的内核虚拟地址空间布局(以 x86 架构为例):| 用户空间(User Space) || 内核空间(Kernel Space) || 0xC0000000 - 0xFFFFFFFF (32位) |
2025-04-06 22:54:01
934
原创 TOP数据记录有提取
top:持续运行并实时更新,显示的CPU使用率是一个动态值,可能会随着时间的推移而变化。它会根据最近一段时间的CPU活动计算这些值,提供一个实时的视图。top -n 1:仅在命令执行时获取一次快照,输出的值反映的是在执行时的瞬时状态。这意味着如果在这次快照前后系统负载发生了变化,值可能不会完全代表系统的整体使用情况。如何更加快捷的记录top值,如下代码,通过修改tokenCount的值分别提取出usr,sys和idle的值。执行如下操作加top值输出到top.txt中。
2025-04-06 21:46:58
254
原创 存储模块cache
一级缓存(L1 Cache)和二级缓存(L2 Cache)通常都使用静态 RAM(SRAM),因为它们需要高速度和低延迟。动态 RAM(DRAM)通常用于主内存,而不是用于缓存。
2025-04-06 21:05:34
847
原创 利用多线程加速内存拷贝
最好在多核,大数据块的情况下使用该操作,否则可能会起到反作用。可以探索使用指令集拷贝的方式,有不错的效果。利用多线程加速大块数据的拷贝过程。
2025-04-06 21:00:46
261
原创 常见的代码示例
表示一个函数指针。void表示该函数没有返回值。表示这是一个指向函数的指针。表示该函数接受一个参数,该参数是一个指向任意类型的指针(void *typedef用于给现有的类型定义一个新的名字。typedef之后的部分定义了一个函数指针类型,该函数指针指向的函数返回void,并接受一个void *类型的参数。CLI_HANDLE是这个新定义的函数指针类型的名字。定义完成后,CLI_HANDLE可以用作类型名,表示一个指向符合上述签名的函数的指针。
2025-04-04 21:17:05
381
原创 YUV转RGBA的操作
这样确保了,不管处理的是2x2块中的哪一个像素,我们总是从对应的UV坐标(同一个UV值)提取色差分量,保持了UV分量正确的对应和采样逻辑。当 i = 0(二进制 000)时,i & ~1 的结果是 0(二进制 000)。当 i = 1(二进制 001)时,i & ~1 的结果是 0(二进制 000)。当 i = 2(二进制 010)时,i & ~1 的结果是 2(二进制 010)。当 i = 3(二进制 011)时,i & ~1 的结果是 2(二进制 010)。i:表示当前像素的横坐标。
2025-04-04 19:44:59
568
原创 主机和虚拟机间的网络通信
仅主机模式会创建一个虚拟网络,此时虚拟机只能和物理机和其他仅主机模式的虚拟机进行通信,此时虚拟机的地址要和物理机的vmnet1的网络地址处于同一网段。这种模式虚拟机不能直接访问外网。虚拟机和主机之间是同一个网络,用一根线连接了虚拟机和物理机的网卡,可以选择桥接的位置,默认情况下是自动桥接,虚拟机和物理机的网卡处于同一个网段。桥接之后可以与其它主机通信和上外网。在主机和虚拟机间创建一个虚拟网络VMent8,虚拟机通过VMnet8的虚拟地址做网络间转换,从而通过物理机的网卡和其他主机建立连接和访问外网。
2025-04-04 16:34:08
475
原创 主机与虚拟机间的网络通信
仅主机模式会创建一个虚拟网络,此时虚拟机只能和物理机和其他仅主机模式的虚拟机进行通信,此时虚拟机的地址要和物理机的vmnet1的网络地址处于同一网段。这种模式虚拟机不能直接访问外网。虚拟机和主机之间是同一个网络,用一根线连接了虚拟机和物理机的网卡,可以选择桥接的位置,默认情况下是自动桥接,虚拟机和物理机的网卡处于同一个网段。桥接之后可以与其它主机通信和上外网。在主机和虚拟机间创建一个虚拟网络VMent8,虚拟机通过VMnet8的虚拟地址做网络间转换,从而通过物理机的网卡和其他主机建立连接和访问外网。
2025-01-11 17:08:08
458
原创 MMap的用法示例
mmap()是一个功能强大的系统调用,广泛应用于各种内存管理和进程间通信的场景。通过匿名内存映射,可以高效地在进程间共享数据;通过文件内存映射,可以简化文件操作并提升性能;通过将同一文件映射到多个进程的地址空间,实现高效的共享内存通信。理解并熟练使用mmap()能够显著提升程序的性能和灵活性,尤其是在需要高效内存管理和进程间协作的复杂应用中。
2025-01-06 20:33:34
1083
原创 一级、二级页表
二级页表通过分层管理页表,将页表的内存分配与实际使用的虚拟地址空间相对应,避免了单级页表中大量未使用的页表项所造成的内存浪费。这种分层结构使得页表更加高效地利用地址空间,特别是在虚拟地址空间较大且实际使用较为稀疏的情况下,二级页表能够显著减少操作系统的内存开销。
2024-12-27 14:10:16
1402
原创 SWAP的作用
swapfile并不是从物理内存中获取内存,而是使用磁盘上的空间来扩展虚拟内存。它的作用是当物理内存不足时,提供额外的空间存储不活跃的数据。虽然可以增加系统的内存容量,但频繁使用swapfile会影响系统性能,因此应尽量避免频繁依赖 Swap。在虚拟机中查看swap的位置嵌入式设备中查看。
2024-12-27 11:25:16
1205
原创 地址踩踏问题
malloc分配地址大小不足,如 pstruct只分配了一个字节的地址,handle访问时需要访问8个字节的数据,此时虽然可以正常打印,但如果其他程序使用了未分配的7个字节地址,就会导致该handle无法正确访问。
2024-12-24 17:46:32
233
原创 zlog的使用方式
正因为zlog是一个日志函数库,故zlog没有独立的进程进行维护,需依赖实际调用zlog的进程,故需留意进程崩溃时的日志丢失情况。但也因为zlog是一个日志函数库,故其具有简单易用的特点,虽然简单但能满足普通日志记录的需求。安装方式,详细可参考工程的readme文件,这里不想污染环境变量,直接编译到本地。zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。支持格式化输出,如给日志添加时间、文件位置信息等。CMakeList.txt配置如下。支持日志按时间、按大小存储。
2024-12-23 20:52:47
637
原创 结构体变量和结构体变量指针作为函数形参的区别
(3)结构体因为自身太大,所以传参应该用结构体指针来传(但是程序员可以自己决定,你非要传结构体变量过去C语言也是允许的,只是效率低了);回想一下数组,为什么C语言设计时数组传参默认是传的数组的首元素地址而不是整个数组?(2)因为结构体一般都很大,所以如果直接用结构体变量进行传参,那么函数调用效率就会很低。(因为在函数传参时需要将实参赋值给形参,所以当传参的变量越大调用效率就会越低。(1)结构体变量作为函数形参的时候,实际上和普通变量(类似于int之类的)传参时的表现是一模一样的。
2024-09-28 17:42:39
469
原创 fd_set
遍历位图时,它需要知道需要检查的最大文件描述符是多少,因此它需要传入。内部使用一个位图来表示文件描述符集,每个位对应一个文件描述符。这四个文件描述符(注意,文件描述符从 0 开始编号)。(即最大文件描述符值+1)来确定要检查的范围。,导致它无法正确监控该文件描述符的状态。这范围的所有文件描述符。
2024-09-12 15:46:51
312
原创 ls -l 查看文件信息
字符设备文件(character device),例如终端或串行端口等设备。:块设备文件(block device),通常用于表示硬盘、光盘等设备。:门文件(door),主要在 Solaris 操作系统中用于进程间通信。:普通文件(regular file),例如文本文件、二进制文件等。:命名管道(named pipe),用于进程间通信。:套接字文件(socket),用于网络通信。:符号链接(symbolic link)。:目录(directory)。
2024-09-12 15:18:31
429
原创 Samba配置共享服务
查看是否将 * - nofile 16384 插入文件尾部 tail -n 5 /etc/security/limits.conf。#在 windows 的运行访问共享,输入用户名。如果看到 rlimit_max信息 ,使用以下设置。#添加 samba 访问用户 输入密码。使用testparm 分析参数设置。修改系统配置文件后生效。
2024-04-24 09:28:11
457
原创 linux常用命令2
因此,这个指令的意思是将远程的 /root/rootfs 目录(位于IP地址为 192.168.1.141 的NFS服务器上)挂载到本地的 /mnt 目录。三组分别表示:第一组表示文件属主的权限,第二组表示属主所在的组用户的权限,第三组表示其他用户的权限。tar -cjvf dir.tar.bz2 dir/ 将dir目录打包成dir.tar.bz2。tar -czvf dir.tar.gz dir/ 将dir目录打包成dir.tar.gz。
2024-04-21 15:26:45
297
雷霄骅——FFmpeg视频解码器
2021-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人