自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-03-27 17:22:23 135

原创 解决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 332

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

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

2024-03-14 10:22:22 393

原创 交叉编译(hostapd)

交叉编译

2024-03-13 16:20:17 411

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

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

2024-03-06 11:21:00 381

原创 BSP-串口乱码问题

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

2024-01-22 16:02:08 350

原创 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 418

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

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

2024-01-16 18:09:01 457

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

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

2023-12-21 16:18:03 363

原创 BSP-硬件基础-FLASH

BSP

2023-11-15 10:49:47 86

原创 HTML_ 读文件显示曲线

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

2023-11-07 16:09:11 152

原创 BSP-STM32移植FreeRTOS

STM32 FreeRTOS

2023-11-07 09:59:05 664

原创 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 750

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

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

2023-06-15 10:35:50 737

原创 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 594 1

原创 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 630

原创 LM75温度传感器驱动

lm75 i2c驱动

2022-06-23 14:56:30 641

原创 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 2461 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 479

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

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

2021-01-28 17:07:24 161

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

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

2021-01-13 16:48:29 175

原创 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 2166

原创 BITMAP几种使用场景

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

2020-12-11 15:20:16 1569

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

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

2020-12-10 17:59:13 758

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

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

2020-12-04 16:56:26 435

原创 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 395

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

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

2020-11-30 16:31:38 571

原创 Linux C语言热加载技术

ptrace

2020-11-30 11:42:58 437

原创 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 368 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 922

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

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

2020-11-24 09:40:52 405

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

段错误1.gdb调试https://blog.csdn.net/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 1760

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

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

2020-11-23 16:36:16 432

原创 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 203

原创 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 321

原创 MinGW 屏蔽命令CMD窗口

源码文件增加:#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )编译时增加--subsystem,windowsg++ -o mysql_client.exe mysql_client.c -lmysql -Wl,--subsystem,windows

2020-11-18 17:02:27 480 1

原创 C语言实现的内存池

用C语言写了个插件,在第三方服务器上跑。对方基于稳定、安全性等方面的考虑,提出了各种限制条件,其中有一个要求是程序运行期间,只允许申请一次内存空间。逼着只能自己实现一个内存池。步骤1.程序启动时申请一块内存M;步骤2.封装malloc函数,该函数实现申请的内存节点都从M内存块中划分;步骤3.封装free函数,该函数实现将内存节点还给M内存块;步骤4.为了避免内存节点碎片,释放后的小内存节点需要合并成一块。相比直接调用malloc,有下面几点优点:1.提升了性能,相对于malloc调用

2020-11-18 16:40:55 359 1

原创 Socket几种使用模式

1. socket->accept->rcv(阻塞/非阻塞)->read/write(单线程\多线程)2.socket0/socket1->select/poll/epoll->accept->rcv(阻塞/非阻塞)->read/write(单线程\多线程)3.socket0/socket1->select/poll/epoll->accept->rcv(阻塞/非阻塞)->aio_read/write...

2020-11-17 16:23:53 431

原创 Linux 进程空间地址映射(smaps)说明

00400000-00404000 r-xp 00000000 08:03 803280 //文本区,如字符串参数Size: 16 kBRss: 12 kBPss: 12 kBShared_Clean: 0 kBShared_Dirty: 0 kBPrivate_Clean: 0 kBPr...

2020-11-13 17:07:42 900

原创 软件质量相关的十一个属性

性能(Performance)性能是指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理事件的个数。可用性(Availability)可用性是系统能够正常运行的时间比例。可靠性(Reliability)可靠性是指软件系统在应用或错误面前,在意外或错误使用的情况下维持软件系统功能特性的基本能力。健壮性(Robustness)健壮性是指在处理或环境中,系统能够承受压力或变更的能力。安全性(Security)安全性是指系统向合法用户提供服务的同

2020-10-10 14:58:58 897

Xilinx平台BSP调试文档

Xilinx平台BSP调试文档

2024-03-21

GD32 F470 开发包

GD32 F470 开发包

2024-03-21

基于GO语言雪花算法库

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

2020-11-24

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

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

2020-11-24

空空如也

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

TA关注的人

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