自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(207)
  • 资源 (2)
  • 收藏
  • 关注

原创 GPIO驱动实例代码

【代码】GPIO驱动实例代码。

2025-05-28 15:29:49 163

原创 RK3588 Linux 系统GPIO功能分析

硬件原理图中使用的是GPIO1_C4,按照RK3588的计算方法(GPIO0_C4:32 x 0(GPIO0) + 2(C) x 8 + 4(C4) = 20)去配置GPIO。上述设备树中配置了20号GPIO(RK_PC4)的用法,通过compatible = "gpio-keys";如果不在设备树中配置GPIO的用途,系统启动后在/sys/class/gpio中配置指定的GPIO。如果需要指定GPIO的用途,比如需要绑定中断,就需要额外的驱动去实现,首先在设备树中配置GPIO。

2025-05-21 13:53:30 307

原创 高云FPGA-新增输出管脚约束

在原来的代码基础上新增加一个gpio输出,绑定到25管脚上。重新打开FloorPlanner出现了新增加的约束。打开工程文件夹中的cts文件,新增gpio的绑定。

2025-05-15 14:49:30 235

原创 EDITPLUS配置CTags实现函数跳转

后续执行run ctags命令时,会在当前源码目录中产生该文件,其中*.c指定c文件产生ctags文件。执行Run Ctags后会在在源码目录中产生tags文件,配置tag对话框中选择该tags文件。解压下载的压缩包,将ctags.exe拷贝到editplust安装目录。配置EditPlus。

2025-05-10 16:32:00 163

原创 Openwrt 编译树莓派4B固件

解压img.gz文件,用树莓派镜像烧录器,将img文件烧录到sd卡中。make menuconfig 选择树莓派4B处理器。make 编译后生成img.gz文件。文件系统增加iperf3。

2025-04-21 17:02:24 285

原创 优化iproute2中的tc流控规则下发机制

tc守护进程是在tc进程外面套一个壳,增加一个socket 服务端,用来接收业务程序发送的tc 配置规则。业务程序通过system方式调用tc,当并发用户量比较大时,业务进程会fork出大量tc,影响系统性能。优化的思路是用一个tc守护进程代替并发的多个tc,业务程序通过socket将配置参数发送给tc手机进程。上面的tc 是一个配置工具,本身是一个应用程序,tc后面的参数通过应用程序参数形式传递给tc工具。

2024-03-27 17:22:23 285

原创 解决linux系统网卡加载慢的问题

第一步先确认是不是第一时间挂载到PCI总线上了,在ath10k_pci_probe函数中添加调试信息,另外查看/sys/bus/pci/drivers/ath10k_pci/确认系统启动后已经识别到PCI设备。这个阻塞时间可以通过/sys/class/firmware/timeout设置,开发板默认用的是60s,总共有5个bin文件,所以阻塞了5分钟左右的时间。方法1,查看源码发现网卡firmware,没有添加到指定的路径中,所以没有找到固件。方法2,有阻塞和非阻塞方式,目前开发板默认用的阻塞模式。

2024-03-20 17:21:19 824

原创 C语言几个比较实用的宏定义

这里介绍几个比较使用的宏,把编译时间加入到执行文件中,然后再通过日志或者printf打印出来,这样运行版本的时候就能知道编译的时间了,可以作为版本号的辅助手段。最近同事远程调试设备,为了定位问题临时发布了好几个版本,有些版本号改了有些没改,结果调试完,准备备份版本的时候,忘了哪个版本是最新的了。__FUNCTION__:打印当前函数名。__LINE__:打印当前源码所在的行。__FILE__:打印当前源码文件名。__DATE__:打印编译日期。__TIME__:打印编译时间。另外几个在调试代码时非常实用。

2024-03-14 10:22:22 647

原创 交叉编译(hostapd)

交叉编译

2024-03-13 16:20:17 1105

原创 固态硬盘分区挂载失败的问题

尝试将第二个分区格式化成vfat格式,可以挂载。再格式化成ext4格式后,可以挂载了。

2024-03-06 11:21:00 866

原创 BSP-串口乱码问题

联想笔记通过UART转串口调试设备,发现出现乱码,检查串口波特率、编码等配置项都没问题,最后接上笔记本电源就正常了,估计应该和接地有关。

2024-01-22 16:02:08 417

原创 xilinx平台如何确认EMIO GPIO序号

MIO GPIO 序号是0-53,所以EMIO GPIO 基础序号是54,W_o_lcd[0]中的0代表EMIO GPIO的序号,所以LCD_RESET的GPIO序号即为54+0.vivado工程文件中找到管脚约束文件XDC,在xdc文件中找到A3引脚对应的变量O_LCD_RESET。在.v源码文件中找到变量O_LCD_RESET定义的地方。确认原理图中LCD_RESET对应的引脚。

2024-01-17 08:58:08 655

原创 BSP-D2000平台调试CM9434串口芯片

原理图显示两块9434的INT分别接到D2000的GPIO0_A3和GPIO0_A5.

2024-01-16 18:09:01 640

原创 C语言float变量异常的问题

发现这个y,打印的值不对,后来将该函数在头文件中声明一下就正常了。写了一个函数,函数参数是两个浮点数。

2023-12-21 16:18:03 495

原创 BSP-硬件基础-FLASH

BSP

2023-11-15 10:49:47 172

原创 HTML_ 读文件显示曲线

【代码】HTML_ 读文件显示曲线。

2023-11-07 16:09:11 273

原创 BSP-STM32移植FreeRTOS

STM32 FreeRTOS

2023-11-07 09:59:05 767

原创 BSP-设备树

/sys/firmware/devicetree/base里面是以目录结构呈现设备树,base是设备树根节点/sys/firmware/fdt 原始dtb文件/proc/device-tree -> /sys/firmware/devicetree/base 链接 文件 指向设备树内核中设备树信息linux-xlnx\Documentation\devicetree\bindings设备树加载之后,内核会自动把设备树节点转换成 platform_device这种格式,同时把名字放到of_node这个地

2023-06-15 10:37:46 1232

原创 BSP-浅谈Linux驱动到设备模型再到设备树

1.最初Linux驱动架构  Linux驱动会在初始化函数中向内核注册file_operations结构体,结构体里面就包含一些基本的open,close函数。Linux驱动中也会去实现这些函数。并且相对应的硬件信息也在这个驱动中。以LED为例,驱动程序中会将LED的引脚地址映射成虚拟地址,然后在open函数里面进行写操作。  当APP调用open函数的时候,就会通过一系列转换,最后调用到驱动中的open函数。(这边就不具体描述APP怎么调用到驱动中的open函数)。弊端:    可以发现这

2023-06-15 10:35:50 1003

原创 Xilinx BSP开发流程

1.打开vivido工程中的xpr文件2.生成bit文件Flow->Generate Bitstream3.接仿真器,找到设备PROGRAM AND DEBUG->Open hardware Manage4.烧录选中hardware中的7z020芯片右击,选择Programe Device 选择bit文件目录点击Program 烧录,烧录成功LED灯亮了...

2022-07-05 15:38:21 880

原创 Vim开发环境搭建

目录基本配置函数跳转函数预览拷贝、复制选中分屏sudo vi /etc/vim/vimrc显示行数:set nusudo apt-get install exuberant-ctags代码目录中执行:ctags -R光标指向指定的函数后ctrl+] 跳转到函数定义之处,ctrl+t 返回原处:ptag write_char:pclosev + y + pShift + *1,输入命令tmux使用工具2,上下分屏:ctrl + b 再按 "3,左右分屏:ctrl + b 再按 %4,左右分屏:ctrl +

2022-06-23 17:36:49 711

原创 LM75温度传感器驱动

lm75 i2c驱动

2022-06-23 14:56:30 859

原创 Vivado 生成BOOT.BIN

1 创建fsbl打开xilinx SDKFile->New->Application ProjectFinish后,系统编译在工程目录的DEBUG文件夹下生成elf文件2 合成BOOTBIN文件SDK菜单选择Xilinx->Create Boot ImageADD 添加要合并的文件,第一个是fsbl的elf文件,Partition type 为bootloader,后面几个文件按顺序分别是.bit u-boot.elf,Partition type都是datafile...

2022-06-14 15:25:59 3298 2

原创 python+wget快速搭建文件下载环境

1.在工作目录中创建一个待下载文件a.gz2.python搭建一个http serverpython -m http.server3.wget http://192.168.31.133:8000/a.gz

2021-04-26 19:27:06 575

原创 Redis服务启动过程中用到的几个系统函数(非常有用)

1.setlocale(LC_COLLATE,""); //地域信息设置2.tzset(); /* Populates 'timezone' global. */ //时区设置3.srand(time(NULL)^getpid());//随机数种子

2021-01-28 17:07:24 234

原创 用代码语言描述UML中两个类之间的几种关系

泛化extends子类继承父类实现implements 一种类与接口的关系,类实现接口中的方法关联成员变量,A可以是B的成员变量,B也可以是A的成员变量共享聚合成员变量,与关联的区别是,共享聚合中的成员变量可以单独使用,A是B的成员变量,A可以单独使用组合集合成员变量,组合是关联中的一种,关联可以试双向的,组合一般是单向的A组成B依赖局部变量、方法的参数或者对静态方法的调用。依赖是一种调用关系,使用的时候才会用到...

2021-01-13 16:48:29 236

原创 Redis 定时处理机制实现流程

int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) /* Types and data structures */typedef void aeFileProc(struct aeEventLoop *eventLoop, int fd, void *clientData, int mask);typedef int aeTimeProc(struct aeEventL...

2020-12-17 14:40:28 2568

原创 BITMAP几种使用场景

使用bitmap优势就是降低资源,比如将两个小于16的值存放到一个字节的高四位和低四位中,这样即节省了存储空间,通信是又节省了带宽。降低网络带宽下图第一张是IP头部结构,第二张是TCP头部,都有BIT的用法。另外bitmap还能用来做数值标记,数值标记可以用来做排序,也可以用在大数据的场景中,比如打卡、签到。排序做排序就是将待排序数列中的每个数值对应的bitmap置位,然后从bitmap的低位或者高位开始检查,如有下面一组数,将其从左向右对应到bitmap中【4、8、3、1、2、

2020-12-11 15:20:16 1774

原创 Localtime函数导致的内存泄漏及性能下降的问题

今天发现项目用C写的采集端程序性能始终跑不上去,看代码发现取时间用了localtime函数,这个函数有两个大坑:第一个坑是它返回的指针是固定的;第二个坑是它内部有个锁。第一个坑是多次调用的时候虽然指针变量不一样,但是地址一样,所以前面的调用会被最后一次调用的值给覆盖掉,但如果每次调用都是返回不同的地址那问题就更大了,会导致内存泄漏。第二个坑是在并行处理的程序中调用会存在锁等待的问题。今天就是遇到这个坑了。redis代码里面有个无锁版的localtime,换上之后问题解决void nolocks

2020-12-10 17:59:13 1221

原创 Android设备导致个别蓝牙音箱死机的问题

调用MediaPlay对象播放语音时,间隔不能大于3s,否则会导致蓝牙A2DP协议频繁终端,导致个别蓝牙音响死机或者中断。

2020-12-04 16:56:26 531

原创 Android 系统启动入口

启动入口文件system\core\init\init.c当Android系统启动时候,会解析init.rc文件,然后根据里面的定义,启动各种服务,如netd、zygote、servier_manager等等init.rc中对服务做了分类,在service section里面有一个’class’标签,指明了该服务所属的类。如:service surfaceflinger /system/bin/surfaceflinger class core //所属类为‘core’ u...

2020-12-04 16:26:59 482

原创 C语言在一块共享内存上实现多个程序间共享的容器类型,如链表、HASH等操作

在单个应用程序中,hash、链表等结构通过指针来串接节点,但是在多个程序间因为地址空间不同,无法通过指针来定位。我们利用共享内存地址连续的特点,将连续的共享内存看做是一个节点数组,然后通过数组下表来定位节点。这样就能实现在多个程序间利用共享内存实现链表、HASH等数据结构。C语言实现的容器类型如链表、HASH、队列等,一般都是通过指针将多个节点链接起来。如HASH结构一般如下定义:typedef struct hash_node{ int value; struct has.

2020-11-30 16:31:38 696

原创 Linux C语言热加载技术

ptrace

2020-11-30 11:42:58 530

原创 C语言实现的通用链表

大部分C实现的链表(包括教材上的实例)都是将链表结构和链表节点的值写在同一个结构体中,如下typedef struct mlist_node{ int value; struct mlist_node *next; struct mlist_node *prev;}mlist_node_t;很显然这样代码无法通用性,换一个功能value可能就是char或者结构类型了。为了实现通用性,节点可以这样定义,将节点的value定义成指针类型,他可以指向任意值typed

2020-11-25 15:42:32 442 1

原创 linux基础之-sysrq-trigger

1.立即重新启动计算机echo "b" > /proc/sysrq-trigger2.立即关闭计算机echo "o" > /proc/sysrq-trigger3.导出内存分配的信息echo "m" > /proc/sysrq-trigger4.导出当前CPU寄存器信息和标志位的信息echo "p" > /proc/sysrq-trigger5.导出线程状态信息echo "t" > /proc/sysrq-trigger6.故意让系统崩溃echo

2020-11-25 14:19:11 1041

原创 一种优化TC(流控)规则下发的方法

标准用法tc命令在tc代码中增加一个socket侦听,将tc命令

2020-11-24 09:40:52 527

原创 Linux C 几种异常问题解决方法

段错误1.gdb调试https://blog.youkuaiyun.com/oria_2006/article/details/80982704?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160612186719725225060985%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=160612186719725

2020-11-24 09:07:59 2009

原创 一种能够提升CS架构中服务端性能的方法

服务端并发处理数据目前基本都是在数据处理阶段采用并发技术,这主要有两个原因:第一,一般情况下瓶颈都卡在数据处理阶段,比如磁盘读写;第二,实现不了并发接收数据,因为服务端口,比如WEB服务80端口,只能绑定到一个socket上。对于有些使用场景,比如客户端向服务端推送大量数据包,这时候如果接收端不能并发处理可能会存在丢包丢数据的情况。为了能够实现并发接收数据,可以为服务端绑定多个服务器端口。但是标准的端口号只有一个,比如WEB服务80端口,绑定的其它扩展端口,网络中的其它客户端是不知道的,客户端只

2020-11-23 16:36:16 572

原创 Socket 安全读和写(read/write)

接手的一个小程序,因为原本已经在线上运行了一段时间,本着能不动就不动的原则,没有调整源码。但是看到源码中读写还是直接调用的read和write的,还是忍不住把这块改了int myRead(int fd, char *buf, int count){ ssize_t nread, totlen = 0; while(totlen != count) { nread = read(fd,buf,count-totlen); if (nread == 0)

2020-11-23 16:22:21 268

原创 Socket KeepAlive问题

最近接手的一个C/S架构的小程序,据说一直有个小问题:运行一段时间后三个socket中的一个就无法send数据,PRE环境正常,PRD环境才会出现该问题。前两天又被我遇到了,看了一下代码send的时候对链接状态都做了判断,看了socket状态也是ESTABLISHED。分析原因可能是该socket长时间没数据,然后中间设备超时导致的。增加keepalive验证了几天,就没再出现问题。keepalive代码直接用的redis中的源码:/* Set TCP keep alive option

2020-11-19 16:15:31 417

GD32 F470 开发包

GD32 F470 开发包

2024-03-21

Xilinx平台BSP调试文档

Xilinx平台BSP调试文档

2024-03-21

DB2数据库网络协议分析报告

DB2数据库网络协议分析报告,DB2网络报文报文格式,用于解析DB2协议,该文档详细说明了DB2报文格式,根据该文档能够解析出SQL语句,以及数据库的其它信息 ,如表、库、用户名等

2020-11-24

基于GO语言雪花算法库

基于GO语言实现的雪花算法库,用于唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID,雪花算法生成的最终结果其实就是一个long类型的Java长整型数字,这是一个大前提!算法所有的内容都是针对这个数字进行运算的。

2020-11-24

空空如也

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

TA关注的人

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