自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

“Struggle”的博客

随心所欲,不逾矩

  • 博客(101)
  • 收藏
  • 关注

原创 EtherCAT 报文结构 寻址方式

分析介绍了EtherCAT的报文结构,以及不通的寻址方式对应的address 32bit的不通解析方法。

2026-01-14 08:48:12 460

原创 EtherCAT 驱动控制系统控制协议及方式

EtherCAT驱动控制系统分为 控制端 和 驱动端,控制端一般为EtherCAT master(控制器), 驱动端一般为被控设备,比如EtherCAT slave。下图是EtherCAT总线的基本架构,EtherCAT被多数机器人以及伺服电机厂家作为基本通信总线。EtherCAT Master为控制端,Master通过解析ESI文件来获得要驱动电机的基本参数。ESI文件由从站的供应商提供(比如你买了个汇川伺服电机,就得找他要对应的XML文件)。

2026-01-13 09:12:15 1050

原创 Zephyr 的 Counter alarm

区别在于里的flags和ticks的含义。

2025-12-11 17:05:33 267

原创 IP 混叠

IP混叠与网络配置摘要 IP混叠(IP aliasing)允许在单个网络接口上配置多个IP地址,使设备能同时参与不同网络或提供多个服务。Linux支持通过ip addr add命令添加混叠IP,而U-Boot仅支持单一IP。服务器可通过混叠IP与开发板在同一子网通信,注意会议一下子网划分(CIDR表示法)和ARP协议知识点。

2025-12-11 13:45:10 980

原创 【git rebase 的使用】

演示了如何通过git rebase -i命令将debug分支上的4个commit合并为1个patch并附加到feature分支上。具体步骤包括:确定共同祖先作为基准点,在交互式rebase界面使用reword和squash命令合并commit,以及修改最终的提交信息。整个过程都在vim编辑器中完成,并提供了放弃变基的操作方法。

2025-11-28 08:48:25 642

原创 Linux 工具: libgpiod 工具控制 GPIO

libgpiod 是 Linux 标准 GPIO 控制库,提供命令行工具和 C 接口。通过 gpiodetect 识别控制器,gpioinfo 查看引脚状态。使用 gpioset 控制输出电平(如 gpioset gpiochip1 0=1),gpioget 读取输入,gpiomon 实时监测电平变化。需内核启用 CONFIG_GPIO_CDEV 支持中断等高级功能,适用于嵌入式开发和硬件调试。

2025-11-27 08:50:41 200

原创 strtok strchr strcspn 解析字符串优略

本文介绍了C语言中字符串分割的几种方法。首先详细讲解了strtok函数实现方法,指出它会直接修改原字符串内存的副作用。通过代码示例展示了strtok的使用及常见问题(如分隔符字符串缺少终止符的问题)。接着提出了两种保持原字符串完整的分割方法:使用strchr和sscanf组合,以及使用strcspn函数。两种替代方法都通过示例代码展示了其实现原理和优势,避免了strtok破坏原字符串的问题。文章最后还比较了不同方法的特点,为需要保持字符串完整性的场景提供了实用的解决方案。

2025-11-26 10:01:32 788

原创 一级指针&二级指针 函数传参

摘要:函数参数传递为值传递,想要改谁存储的值就传递谁的地址。

2025-11-07 09:50:36 212

原创 MMU,Cache,页表 一图搞定

本文摘要:文章探讨了MMU(内存管理单元)与页表的关系,用字典查询类比解释虚拟地址到物理地址的转换过程。介绍了MMU中的TLB(转换后备缓冲器)和TWU(页表遍历单元)的工作机制,TLB用于缓存最近访问的地址映射,TWU负责在TLB缺失时查询页表。同时分析了Cache与MMU的协作关系,Cache通过物理地址加速数据访问。最后对比了VMSA(虚拟内存系统架构)和PMSA(物理内存系统架构)与MMU的关系,VMSA依赖MMU实现虚拟内存管理,而PMSA直接使用物理地址无需MMU参与。

2025-09-11 08:50:10 1251

原创 安装pthread man手册

摘要:查找pthread_cond_init手册的几种方法:1) 通过apt-get安装manpages-posix包;2) 在线查阅Linux官方文档或POSIX标准;3) 直接查看头文件定义。系统默认man手册可能不完整,这些方法可帮助获取更全面的API文档说明。

2025-08-31 17:24:03 381

原创 用户态 kill 与 pthread_kill 的区别?

摘要:pthread_kill和kill在Linux用户态中均可发送信号,但核心区别在于接收者不同。kill向进程(或进程组)发送信号,由进程内任意线程处理;pthread_kill则针对同一进程内的特定线程,信号由该线程独立处理。典型场景上,kill用于进程间通信(如终止进程),pthread_kill用于线程间通信(如唤醒阻塞线程)。注意:终止类信号(如SIGKILL)无论通过哪种方式发送,最终都会终止整个进程。

2025-08-31 17:20:43 526

原创 内核等待队列以及用户态的类似机制

本文介绍了Linux内核中的等待队列机制,该机制通过让进程在条件不满足时进入睡眠状态,避免无效占用CPU资源。介绍了用户态与内核态等待队列使用需要的API。

2025-08-31 17:01:38 784

原创 Win11输入法异常解决方案

文章摘要:作者分享了解决Win11输入法频繁切换问题的详细方法。最初错误地开启了兼容模式,导致后续出现输入法异常。核心解决步骤包括:删除并重新添加微软拼音输入法、检查CTF加载程序、关闭兼容性设置、调整输入法默认选项等。针对应用间输入法不切换问题,建议不同场景使用不同输入法(中文简体/English美国)。文章还提供了输入法工具栏、快捷键等个性化设置方法。最后作者表示虽然经过复杂设置,问题仍可能反复出现,透露出对系统稳定性的无奈。全文包含大量具体操作截图和详细步骤说明。

2025-08-31 16:55:11 2660

原创 Linux 共享内存:进程间的 “秘密白板”,快到飞起!

摘要: Linux共享内存是最高效的进程间通信(IPC)方式,通过内核分配的物理内存区域实现多进程直接数据共享,避免了数据拷贝开销。核心API包括:ftok()生成唯一键值、shmget()创建/获取共享内存、shmat()映射到进程空间、shmdt()解除映射、shmctl()控制/删除内存。其优势在于极速传输(如视频帧处理),但需注意同步问题(需配合信号量)和内存清理(避免残留)。典型应用场景包括高频数据交换和大文件传输,适合对性能要求苛刻的实时系统。

2025-08-06 17:59:55 554

原创 与vsnprintf类似的格式化输出 API 总混淆

vsnprintf类似的输出函数一大堆,怎么记忆?记住“输出目标是标准输出还是文件还是缓冲区、是否带v(va_list)、是否带n(安全限制)”这三个特征,就能准确区分并使用这些函数了。核心原则:优先用带 `n` 的安全函数,封装可变参数时用带 `v` 的函数。

2025-08-05 18:14:13 861

原创 打印级别控制

展示如何用c实现打印分级

2025-07-14 09:45:25 235

原创 CMAKE学习总结(简单易操作)

跟着大丙学CMAKE的层级结构,熟悉多层CMAKE编写思路。后来发现CMAKE版本升级了,于是采用新版本CMAKE对教程进行了优化,并补充了一些易错点,之后如果用到CMAKE的功能可以直接复制本文中的代码。

2025-07-09 16:09:49 799

原创 【Linux 内核同函数多重定义】

通过实验验证也可知道上面的才是真正的实现,但是drivers/pci/of.c中调用了<linux/of_address.h>让我很疑惑内核是怎么做到的,为什么这么做,这就需要看看第一篇参考文章了。这个头文件,而且他仅仅使用了这个结构体的一部分,所以干脆自己定义了,即使传进来的结构体类型与自己定义的结构体类型有点不同,但也不影响使用。中定义一个不一样的呢?阅读驱动源码,会发现同一个函数有不同的定义位置,比如。虽然通过文件的使用判断第二个文件是真的,但是为啥要在。

2025-06-27 10:06:17 197

原创 ALSA音频用户态APP

本文介绍了Linux ALSA音频应用编程的基础知识和实践方法。首先讲解了音频基本概念如采样精度、通道数、帧、周期和缓存大小等。然后介绍了ALSA的编译方式,通常需要芯片厂商提供的交叉编译环境。文章详细分析了ALSA用户空间API与内核交互的机制,包括各种接口设备文件的用途。还展示了如何使用标准ALSA命令行工具进行音频操作。最后提供了一个使用ALSA库编程的示例代码,演示了如何打开设备、配置参数和进行音频数据传输。文章为初学者理解ALSA编程提供了实用的入门指导。

2025-06-10 09:37:42 992

原创 emmc/SD mode “signal voltage“ 值

eMMC信号电压(signal voltage)由主机控制器(如SDHC)与eMMC芯片协商确定,通常为3.3V或1.8V。调试发现当工作在High Speed模式时,内核显示3.3V但实际硬件为1.8V。解决方法包括:检查硬件接线(上拉电压是否可调)、验证芯片与控制器支持的模式、在mmc_select_hs函数中添加电压切换功能(调用mmc_set_signal_voltage)。关键调试点包括mmc_send_op_cond命令的电压协商过程和模式选择函数的电压切换实现。

2025-06-05 08:47:10 744

原创 Linux上给SD卡创建分区并格式化

本文介绍了对SD卡进行分区操作的步骤:1)先卸载已挂载分区(如/dev/sdb1、/dev/sdb2);2)使用fdisk工具删除旧分区并创建新分区,注意设置起始扇区地址;3)用mkfs命令将新分区格式化为ext4或FAT32文件系统;4)最后创建挂载目录并挂载新分区。操作涉及umount、fdisk、mkfs和mount等关键命令,需谨慎执行以确保数据安全。

2025-05-28 17:27:46 884

原创 编译器ar命令参数

ar(Archive)是 Unix/Linux 系统中用于创建、修改和提取静态库(.a 文件)的工具。静态库是多个目标文件(.o)的集合,常用于打包和分发代码库。以下是ar.alibmylib.afile1.ofile2.orcs.aqtxd。

2025-05-23 10:35:01 1266

原创 为啥农民能造飞机,我却觉的找工作好难?

低学历者的 “个体化成功”自制飞机的农民,追求的往往是个人理想的实现(如 “我就想飞上天”),这种目标不需要与他人比较,只要自己认可就有意义。他们的 “成功” 是内向型的,更关注过程而非结果。高学历者的 “系统性竞争”社会对高学历者的期待是在既定赛道(如职场、学术)中超越他人。当学历从 “稀缺资源” 变为 “入场券”(如研究生遍地走),竞争维度从 “有没有” 变成 “好不好”,压力指数级上升。许多人在 “内卷” 中迷失了自我价值,只能用 “找工作难”“不如别人” 等外部评价。

2025-05-22 21:45:59 801

原创 Linux shell 正则表达式高效使用

正则表达式是Linux命令行中强大的文本处理工具,能够极大提高搜索和匹配效率。下面为新手提供一个简单教程,介绍如何在`grep`和`find`命令中使用正则表达式。使用建议:**使用`grep`时要加`-E`选项**使其支持扩展正则表达式,配合`find`和`xargs`得到更精确的匹配结果。

2025-05-22 16:33:53 1294

原创 shell 中$?表示最后命令退出状态,最后命令是啥?

在 Shell 中,$? 表示 上一条命令 的退出状态(Exit Status)。这里的 “最后命令” 指的是 Shell 执行的上一个前台命令(包括脚本、函数、管道中的最后一个命令等)。以下是详细解释和示例:

2025-05-20 09:49:17 1191

原创 shell命令 - basename 获取基本文件名

basename命令用于从文件路径中提取文件名,并支持对文件名进行进一步操作。通过-s选项可以删除指定后缀,-a选项可以同时处理多个文件路径,-z选项则用于拼接后缀。示例中展示了如何使用`

2025-05-19 17:23:44 250

原创 Shell 脚本-从头学

本文介绍了Shell脚本的基础知识,包括Shell环境、变量定义与使用、变量类型、环境变量、字符串操作、数组操作以及注释和参数传递。

2025-05-18 22:26:01 901

原创 gcc工具使用(编译静态库,动态库)

本文介绍了在Linux系统中使用GCC编译器进行预处理、编译、汇编和链接的基本操作,并详细讲解了如何 生成 调查 和 使用 静态库与动态库。

2025-05-15 09:37:15 1222

原创 shell中各种括号的作用`‘()‘‘{}‘‘[]‘`等

本文详细介绍了Shell脚本中各种括号的使用方法及其功能。小括号()用于命令组、命令替换和数组初始化;双小括号(())用于整数扩展、C语言运算规则的表达式转换和算术运算比较。中括号[]是bash内部命令,用于条件判断和数组元素引用。大括号{}用于常规用法、特殊替换结构、模式匹配替换以及字符串提取和替换。符号$后的括号用于变量引用、命令替换和数学表达式计算。这些括号在Shell脚本中具有不同的功能和用途,掌握它们的使用可以提升脚本编写的效率和灵活性。

2025-05-15 08:19:21 523

原创 TF卡写保护原理解决

TF卡写保护的实现或者是否支持写保护不在于SD卡,而在于安装TF卡的装置(比如读卡器、PCB上的TF卡槽)。拆开TF卡,你会发现TF卡上的写保护装置与其他部分是分隔开的。并没有与任何电路有连接。而且查看TF卡的数据手册,也找不到任何与写保护有关的信息。参考博客:https://blog.csdn.net/hamsky/article/details/3853488所以:从SD卡引脚上去研究写保护是错误的。而应该研究安装TF卡的装置(比如读卡器、PCB上的TF卡槽)。

2025-05-07 11:26:31 884 1

原创 Vim 命令从头学习记录

用了两年的vim,为了配置花里胡哨的界面没少折腾,从vim到nvim, 再到 lvim, 但是连最基础的跳转都没整明白,后来真心想花点时间搞一个只要能多tag切换,实现单一vim打开多文件就行了的编辑器,其实人家vim都包含了,又回到了最初的起点。

2025-05-05 10:54:14 1578 1

原创 Linux Device Drivers-第五章 并发和竞争情况

linux/spinlock.h> //需要包含的头文件/* 初始化 *///定义时初始化//或者在运行时初始化/* 进入临界区前 *///在进入一个临界区前, 你的代码必须获得需要的 lock????这段乱七八糟的。/* 退出临界区前,释放锁 */还有很多自旋锁相关函数,无外乎加锁和解锁。

2025-04-21 08:27:02 902

原创 数字音频接口(I2S,PCM/TDM)概念总结

DAI: Digital Audio Interface. 数字音频接口。古时候都是一堆芯片组成的音频电路,电路板上还得走模拟信号,对硬件工程师的要求是相当高。但随着半导体的发展,一堆音频芯片被集成到了一颗音频芯片上。MPU直连codec芯片传输数字音频数据,codec输出模拟信号连接到硬件音频插孔就完啦。硬件工程师的九阳神功慢慢失传了。

2025-04-01 10:11:35 4410

原创 【VirtualBox VMware 安装问题总结】

网上教程良莠不齐,有一个CSDN的教程虽然很全面,但是截图冗余,看蒙了给我,这里记录一个整洁的教程链接。UP还在记录生活,看的我好羡慕,呜呜。

2025-03-28 14:16:40 457

原创 Linux Device Drivers-第四章 调试技术

Linux 程序调试方法,学会通过监视调试如控制printk,学会使用各种调试工具如gdb。

2025-03-25 09:32:35 741

原创 Vim - 实现基础跳转-简约不简单

vim + ctags + cscope 实现跳转到定义,跳转到调用。

2025-03-17 22:10:20 902

原创 【strace命令】

让Linux管理员在没有源码的情况下跟踪系统调用(系统调用为用户空间程序向内核请求更高运行权限的服务)。常显示有关进程的系统调用,用于快速定位系统调用过程中失败的原因。

2025-03-05 08:27:07 449

原创 Linux DMA Engine 基础

讲解Linux DMA 子系统中如何查看DMA的使用情况,查看DMA哪些channel在使用。如何使用DMA engine接口编写M2M测试代码。

2025-02-23 16:48:21 1179

原创 【GIC LPI 及 ITS 介绍】

参考arm官网。这个文档为需要理解MSI是如何被GIC转换的、LPI是如何被管理的人以及需要在裸核条件下配置GIC的人设计的。

2025-02-23 15:31:39 1540

原创 Linux I2C 命令

Linux I2C设备的读取方法与相关命令总结。

2025-02-19 09:39:55 1004

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除