自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (9)
  • 收藏
  • 关注

原创 makefile中连接库文件时-L和 -Wl,-rpath的区别

本文解析了Makefile中两个关键链接选项的区别: -L:指定链接时库文件搜索路径(用于查找.a或.so),仅影响编译阶段,不写入可执行文件。例如 -L. -lmylib 表示在当前目录搜索libmylib。 -Wl,-rpath,:指定运行时动态库搜索路径(仅.so),通过-Wl将参数传递给链接器,路径会硬编码到可执行文件中。如 -Wl,-rpath,. 使程序运行时自动搜索当前目录。 核心区别: -L作用于编译链接阶段,-rpath作用于程序运行时。 若仅用-L编译成功但运行报错,需补充-rpath才

2026-08-12 10:52:12 312

原创 为啥芯片中有的寄存器还有专门的set register和clear register

【摘要】芯片设置独立置位/清零寄存器(如STM32的BSRR)主要基于三个原因:1)避免"读-改-写"操作在中断环境下的竞态风险,通过硬件原子操作确保数据一致性;2)单周期写指令比传统三步骤操作更高效;3)写1有效的特性降低误操作风险。这类寄存器实质是"瞬时触发器",写入1时产生脉冲信号改变目标寄存器状态,自身不存储数值。连续多次写入1不会导致异常,仅维持目标位为1。对于分立的置位/清零寄存器,后写入的操作将产生最终效果。(149字)

2026-08-05 17:03:43 425

原创 linux系统中是如何open一个设备的

本文详细分析了Linux系统中open("/dev/spidev0.0")的系统调用过程。首先通过glibc的open函数转为openat系统调用进入内核,内核经过路径解析、inode查找等步骤后,最终调用do_dentry_open()完成文件打开。重点解析了字符设备文件的特殊处理:通过chrdev_open()将默认的def_chr_fops替换为驱动注册的spidev_fops,最终调用spidev_open()完成设备初始化。整个过程展示了用户空间到内核空间的完整调用链

2026-06-08 17:17:18 188

原创 linux内核网络协议栈分层及各层之间的传递解析

本文从分层处理的角度解析Linux内核网络协议栈的数据发送流程。以sendto系统调用为起点,详细分析了数据从应用层到网口驱动的处理过程:1)Socket接口层执行安全检测和初步封装;2)传输层进行IP数据合法性校验并构建skb结构;3)网络层确定路由路径和发送接口;4)数据链路层通过网口驱动完成物理信号转换。文章重点剖析了各层间的连接机制,包括sock->ops->sendmsg、skb->dst->output等关键结构体的形成过程,揭示了Linux网络协议栈的分层处理思想。通过

2026-04-30 17:39:59 364

原创 linux内核中是如何实现网络数据的发送的(二)

本文分析了Linux内核网络数据发送流程,重点追踪了ndo_start_xmit函数的实现路径。通过分析net_device结构体和net_device_ops接口,揭示了网络设备驱动的注册机制。以i.MX6Q芯片的FEC驱动为例,详细展示了从fec_probe初始化、fec_enet_init配置到fec_enet_start_xmit数据发送的完整流程。当应用层数据发送时,最终通过dev->netdev_ops->ndo_start_xmit调用到驱动实现的fec_enet_start_xm

2026-04-30 17:06:18 379

原创 linux内核中是如何实现网络数据的发送的(一)

本文详细分析了Linux内核中sendto系统调用的完整执行流程。从用户态sendto函数通过系统调用进入内核态开始,依次解析了sys_sendto、sock_sendmsg、inet_sendmsg等关键函数的调用过程,最终定位到网络协议栈的发送终点——网卡驱动的ndo_start_xmit函数。文章重点剖析了socket结构体的创建过程、原始套接字(raw socket)的操作函数集初始化,以及数据包在内核中的路由选择、邻居子系统处理和队列调度机制。通过层层深入的分析,揭示了用户态网络请求如何穿越内核协

2026-04-30 16:08:38 389

原创 Linux中用户态的函数是如何通过系统调用进入内核态的(二)

本文分析了Linux内核响应系统中断并调用驱动函数的机制。以ARM架构为例,硬件异常向量表中的vector_swi中断处理程序负责处理系统调用,通过系统调用号(如290)在内核预定义的调用表中查找对应的函数入口(如sys_sendto)。文中详细追踪了从用户空间触发系统调用到内核执行sys_sendto函数的完整路径,包括中断向量跳转、参数处理和系统调用表查询等关键步骤,最终实现用户态到内核态的切换和功能执行。该过程展示了Linux系统调用的底层实现原理。

2026-04-30 09:49:19 57

原创 Linux中用户态的函数是如何通过系统调用进入内核态的(一)

本文以sendto函数为例,详细解析了Linux用户态到内核态的系统调用实现机制。通过分析glibc库源码,展示了sendto如何通过宏展开转换为系统调用号__NR_sendto(290),并最终通过ARM架构特定的汇编指令触发软中断(swi 0x0)。关键步骤包括:参数通过寄存器传递(r0-r6)、系统调用号存入r7寄存器、软中断触发内核态切换。文章重点剖析了INTERNAL_SYSCALL_RAW宏的实现细节,揭示了用户态向内核态转换时寄存器使用和参数传递的完整过程,为理解Linux系统调用机制提供了具

2026-04-30 09:46:56 395

原创 linux驱动开发之pr_warn和pr_warning

Linux内核日志宏的演进:从4.4版本开始,pr_warn和pr_warning两个宏可互换使用,均定义为打印KERN_WARNING级别的日志。但在5.1版本中,内核移除了pr_warning的定义,只保留了pr_warn宏。这种变化反映了内核代码的标准化趋势,通过统一使用pr_warn来简化接口,减少冗余定义。开发者应将现有代码中的pr_warning更新为pr_warn以确保兼容性。这种改变体现了Linux内核持续优化的特点,在不影响功能的前提下精简代码结构。

2025-10-31 09:48:28 255

原创 cklink lite 连接电脑后红灯闪的解决方法

用户在Win11上使用cklinklite连接T-HeadDebugServer时遇到固件升级问题导致红灯闪烁,设备管理器显示cklink-litefirmwareloader。将设备接回Win7成功连接后,通过CskyDebugServer重新更新固件解决。更新方法为:停止运行CskyDebugServer,选择对应.hex文件进行更新。完成后设备在Win11上绿灯常亮,T-HeadDebugServer提示固件升级需完成。文章还解答了常见问题,说明不同系统对驱动和固件版本的要求差异,并提供参考文章链接(

2025-10-29 10:19:51 738

原创 vscode+gdbserver实现图形化调试Linux应用

vscode+gdbserver实现图形化调试Linux应用

2023-05-06 17:41:32 1085

原创 spi接口 接收不到数据的一种原因分析

spi 调试,收不到数据

2022-06-08 09:56:15 5328

原创 Jlink和Ulink啥区别

个人使用经验,Jlink使用时一定要VCC SWIO SWCLK GND四根线都连上,即使jlink的VCC不供电,也要连接,才能正确识别芯片和下载程序。Ulink 下载和debug需要必须连接SWIO SWCLK GND RST四根线,要是不连RST,也会报错。而VCC可以不连总结:Ulink需要使用RST,jlink不需要。Ulink不需要VCC,而Jlink需要。以上经验仅限于我用过的少数几款芯片。...

2022-05-24 16:06:00 2029 1

原创 keil下载程序报Contents mismatch at: 08000000H (Flash=00H Required=A0H)

Contents mismatch at: 08000000H (Flash=00H Required=A0H)Contents mismatch at: 08000001H (Flash=00H Required=4DH)Contents mismatch at: 08000003H (Flash=00H Required=10H)Contents mismatch at: 08000004H (Flash=00H Required=69H)Contents mismatc...

2022-05-09 20:55:49 4280 1

原创 vscode设置无法识别的文件格式为已知类型高亮显示

使用Ctrl + K+ (放开然后按)M这个快捷键,可以将当前文件高亮显示为指定的文件类型。如一个aaa.work文件,vscode无法识别,没有高亮显示。使用Ctrl + K+ (放开然后按)M这个快捷键,出现下图界面,可以选定为Makefile类型。之后文件显示如下,有高亮显示了。...

2021-03-10 17:18:11 5355

原创 Stm32g031芯片无法进入bootloader的及首次烧写完程序reset无法运行原因分析

遇到的问题如下:1.新的Stm32g031芯片能够使用ISP烧写程序,但写完程序后就没法再烧写了,芯片无法从系统存储区(system flash)启动。2.芯片一直可以使用swd模式烧写。3.boot0管脚拉高或拉低电平都不能从系统存储区(system flash)启动。...

2020-12-18 10:14:34 11042 8

原创 max3485和max485区别

max485电压容忍最大为12V,一般使用5V,通信速率最高2.5Mbps;3485最大为7V,一般使用3.3V,通信速率最大12Mbps。下面是max485数据截图:下面是max3485截图:...

2019-12-17 16:33:31 10358

原创 使用Ulink调试程序时停在断点处,但程序仍运行,或者函数返回位置不是进入位置的问题

今日使用ulink调试stm32f103c8的芯片,使用的是keil4 的swd模式,发现调试时会出现从定时器中断服务函数跳出后回到的程序位置不是原来进入的位置,同时当停在一个端点后,单板子上的芯片仍在执行的问题。初步分析是当电脑上的调试界面并没有和实际芯片中运行情况一致,也就是电脑上进入的断点处时,芯片的程序并没有同步停在断点处,而是继续运行了。我解决的办法是换成jlink。哈哈,一切调...

2019-11-20 10:33:11 826

原创 51单片机EA=0 这个中断总开关不能真正屏蔽中断

EA作为MCU的中断总开关,可以控制单片机是否响应所有的外部中断,但是这个强大的开关可不是随便用的,当要屏蔽某一确定的中断源时,一定要专门屏蔽这一确定中断源的中断响应开关,而不能使用EA=0来屏蔽。原因如下:拿外部中断INT4举例,从上面的中断结构图中可以看出,当下降沿来后,EX4闭合(EX4=1),若EA开关是打开的(EA=0),mcu不会响应此中断,但EX4的闭合状态会一直保存,当...

2019-09-16 14:04:00 8372

原创 Linux驱动编写入门-新解

1.驱动编写后是一个C文件,通过make命令对其进行编译,生成 .KO文件,这个文件就是可执行的驱动文件,通过使用insmod xx.ko即可执行此驱动文件。如下为一个完整的驱动程序C文件。(用的是讯为开发板教程文件)#include <linux/init.h>#include <linux/module.h>/*驱动注册的头文件,包含驱动的结构体和注册和卸载的...

2019-05-28 15:29:39 274

原创 virtualbox guest additions update available,如何处理

升级virtualbox后,每次开虚拟机就提示升级VirtualBox Guest Additions,怎么办呢?如图:我虚拟机用的win7,解决方法如下:先卸载掉win7里已经装的VirtualBox Guest Additions,从程序列表里可以找到,并卸载,重启,然后点左上角菜单的设备按钮,再点安装增强功能,然后安装镜像的程序就可以了。...

2019-04-26 14:00:02 565

原创 VirtualBox升级VirtualBox Guest Additions增强功能

升级virtualbox后,每次开虚拟机就提示升级VirtualBox Guest Additions,怎么办呢?如图:我虚拟机用的win7,解决方法如下:先卸载掉win7里已经装的VirtualBox Guest Additions,从程序列表里可以找到,并卸载,重启,然后点左上角菜单的设备按钮,再点安装增强功能,然后安装镜像的程序就可以了。...

2019-04-26 13:55:30 5103

原创 使用Altium Designer绘制PCB时,多个元器件重叠时,如何选中其中一个进行属性编辑

用AD画pcb,想对一个画好的器件进行属性编辑时,当此位置只有一个器件时只要双击就可对此元件或者走线进行编辑。但当多个走线或元件重叠时不找找规律还真是让人感觉是随机出来的,这当然不可能了,于是我进行了详细研究,发现如下结果:要是点一下就出来重叠的元件列表,你再怎么点列表中的元件也无法进入其属性编辑界面。正确的做法是双击此元件位置,出现此处重叠元件的列表,然后单击列表中的元件,就可进行编...

2019-04-09 10:29:57 12173 1

原创 常用db与倍数的关系

很多量是用db表示的,但对于很多同学没有明确的概念,这里列出了一些常用的db(或者dbm)数值对应的倍数关系,这里的db=10lgX,X是倍数。

2018-10-26 09:58:22 14796

原创 unable to load dll 的解决方法

自己写的A.dll,用C#写的demo,在自己电脑上运行良好,但到其他电脑上就出现unable to load dll A.dll的警告。开始以为是A.dll的问题,但后来看了牛人的帖子分析可能是A.dll引用的其他dll在他人电脑上没有。所以对A.dll的工程进行如下更改使用Release方式,并这样设置:解决方案->属性->常规->MFC的使用->在静态库中使用MFC->确定。原来

2017-03-02 16:31:08 16397

原创 zte中兴客户端掉线的一种解决办法

zte中兴客户端掉线有可能是与Windows的认证冲突造成的,可以尝试将“Wired autoconfig“服务停掉,具体的做法是在360中找到----优化加速----启动项----系统关键服务,然后禁止此服务启动,重启电脑即可。

2017-02-27 09:15:03 6772

原创 使用keil5.22调试USB设备时an not read register **while CPU is running

本人从keil5.14升级为5.22后发现在调试USB设备时遇到如下问题,点debug图标,程序进入main函数,然后点run(F5),此时程序运行,但USB是无法和电脑通讯的,需要重新插拔USB,以前用5.14时,重新插拔,然后再点run就ok了,但用5.22点run后出现***JLink Error: Can not read register **while CPU is running,经

2017-02-21 15:29:14 1198

原创 C语言运算符研究

括号优先级

2016-09-29 17:23:03 396

原创 FreeRTOS信号量的take与give逻辑分析

1.FreeRTOS信号量防止任务之间冲突的,比如A任务还没执行完,B任务就切入执行,这样会造成程序运行错乱,这是引入信号量,当A任务执行时take信号量,此时B任务启动,take不到信号量,只能等待,知道A任务执行完,give了信号量,B任务take到,就接着执行了。2.若是一个程序里只有一个任务,信号量的作用不大,且容易引起死机,比如一个函数take信号量,没有释放,另一个函数就来take

2016-07-04 11:18:17 3575

原创 联想笔记本SATA接口失效

用的联想t420,有一个SATA接口和USB是通用的,用他连的hub,在使用hub的USB接口时将接头插反,电脑弹出浪涌过大什么的提示,后来发现此接口不能用了,插U盘也不能用,而其他USB能用,重启电脑后接口功能恢复。        后来分析,此hub的USB口做的防倒插不好,使USB接头可以反着插,这样铁片的那一边就会和hub接口的4根线同时连接,导致短路,可能电脑有防过流保护,就把SATA

2016-06-22 16:38:35 1370

原创 VC6.0 生成mfc dll 无法加载

先用vs2013生成的dll,兼容性不好,于是尝试用VC6.0生成。将源代码拷贝,编译生成dll,dumpbin查看导出函数都正常,但用loadlibrary加载总是返回失败,开始怀疑代码问题,于是做了个最简单的sum函数,但仍不能加载;怀疑VC6.0问题,于是用其他机器上的,但导出的dll仍不行。最后将debug改成release————————ok了!郁闷+欢喜,并十分不解。1  在V

2015-07-27 19:02:42 836

原创 笑话,每天乐一乐

 1.从前有一个人叫阿爽。他死掉了。出殡那天。他的家人哭喊:‘爽阿……爽阿。’路人不解。问道:‘伱们爽什么阿。’家人痛哭流涕:‘爽死了……爽死了!! 2.有一隻貓發現了一隻老鼠…. 於是餓虎撲羊般衝向老鼠要把他吃掉 可是後來貓卻被這隻老鼠吃掉….. 為什麼??? 因為 ==>老虎 老鼠 傻傻分不清楚 3.医院精神科的患者常常会对医生或护士有爱慕的情结. 某日,一位女患者向某男医生走来…… 女病

2009-10-17 22:05:00 2790

milkshape使用教程

milkshape使用教程,介绍了milkshape基本方法,贴图,纹理等使用方法

2010-08-19

USB调试小工具

HID设备调试工具,支持字符和16进制发送,可修改ReportID,支持中断传输和控制传输,支持多设备选择,有点像串口调试助手。

2017-04-01

L293步进电机驱动芯片封装(L293B,L293C,L293D,L293E,L293DD).IntLib

st电机驱动芯片封装库L293B,L293C,L293D,L293E,L293DD,L293步进电机驱动芯片封装,ad封装库。

2019-10-31

st 模拟比较器封装库

ESM1600系列,lm111、LM119/LM293/LM311/TS3V393/TS339等封装库

2019-11-15

ST 音频驱动电路tda7250封装库

ST 音频驱动电路tda7250封装库,S

2019-11-15

tda7278.IntLib

st audio cd-player circuit.intlib,tda7278芯片封装库,ad封装库

2019-11-15

ActorX_221_Max2010_32bit

3dmax2010导出psa,psk的插件

2010-08-19

ST 时钟电路ad封装库

hcf4536bey/ne555/ne556/sa555/sa556/se555/se556/ts3v555/ts3v556/ts555/ts556等芯片ad封装库

2019-11-15

tda7316&tda7317;封装库

tda7316&tda7317;封装库,

2019-11-15

空空如也

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

TA关注的人

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