自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2025 Vscode插件离线下载方式

null。

2025-06-04 20:02:45 413

原创 svn 远程服务搜索功能

svn服务器没有远程搜索功能,靠人工检索耗时耗力,当服务器文件过多时,全部checkout到本地检索,耗时太久。

2025-04-27 09:39:59 246

原创 ini配置文件解析之iniparser

iniparser是一个C语言库,是针对ini配置文件的开源解析器。ini文件则是一些系统或者软件的配置文件。iniparser可以对配置文件进行解析、添加、修改、删除等操作。

2025-04-25 15:10:26 140

原创 inih轻量级的ini文件解析库

在C语言开发中,经常需要处理INI配置文件。而inih,这个仅用几页代码写成的轻量级INI文件解析器,凭借其简洁高效的设计,成为了嵌入式系统和资源受限环境下的首选方案。接下来介绍inih的特点,并提供一个简单示例。inih (INI Not Invented Here) 是一个用C语言编写的INI文件解析器,它秉承“简单就是美”的设计理念,代码精简,易于理解和维护。

2025-04-25 11:22:26 851

原创 nanopb编程示例

编译生成.c 和 .h 文件;添加生成文件到工程中。编译生成.c 和 .h 文件;添加生成文件到工程中。编译生成.c 和 .h 文件;添加生成文件到工程中。生成的头文件中结构体的定义如下。生成的头文件中结构体的定义如下。simple.proto文件。simple.proto文件。simple.proto文件。序列化和反序列化编程。序列化和反序列化编程。序列化和反序列化编程。

2025-04-25 09:14:53 351

原创 Nanopb 使用

nanopb 是一个非常轻量级的 C 库,用于 Protocol Buffers 的序列化和反序列化。它专为嵌入式系统设计,可以运行在内存和存储空间有限的环境中。nanopb 支持 Protocol Buffers 2.3 和 3.0 版本的标准,因此可以用于大多数现有的 Protocol Buffers 定义文件。

2025-04-23 17:34:30 189

原创 Protobuf 使用

enum Week// 第一个枚举项的值必须为 0,在 proto2 中没有此限制,这是因为对于枚举类型默认值是 0// 后续的枚举项值可以是任意的、不重复的Sun = 0;Tue = 1;Wed = 2;Thu = 3;Fri = 4;Sat = 5;Mon = 6;使用如下命令生成demo.pb.cc 和 demo.pb.h。

2025-04-23 14:23:09 322

原创 Protobuf 语言

Protocol Buffers 使用了一种中立、平台无关的语言来定义数据结构,使得不同编程语言、不同平台之间能够进行数据交互。Protocol Buffers 目前主要有 Proto2 和 Proto3 两个版本,Proto3 保持了与 Proto2 的一定程度的兼容性。但是,某些 Proto2 特性在 Proto3 中不再支持。在 Protobuf 中,标量类型(Scalar Types)是指一些基本的数据类型,可以直接在 文件中定义并用于数据字段。这些类型对应于原生的简单数据类型,类似于编程语言中的

2025-04-23 10:58:36 659

原创 Protobuf 安装

Google Protocol Buffers(简称 Protobuf)是一种由 Google 开发的,用于定义结构化数据并在不同的系统或编程语言之间高效地传输和存储数据。它可以看作是一种更轻量且更高效的替代方案,类似于 XML 或 JSON,但在性能和数据大小上表现更优。

2025-04-23 09:49:42 396

原创 Ubuntu18.04 升级最新版本Cmake

ubuntu18.04默认安装的cmake版本为 3.10.2;在编译一些软件的时候,版本太低导致无法编译。

2025-04-23 09:34:53 616

原创 内核高精度定时器

标准的定时器不够精确,不适合对时间要求比较高的场景,比如说实时应用。要使用高精度定时器,需要开器配置选项CONFIG_HIGH_RES_TIMES,定时的精度为微秒,与标准定时器的区别是标准定时器取决于HZ(依赖jiffies),而HRT实现是基于ktime。

2024-10-12 11:37:20 325

原创 内核中延迟的工作delayed_work

对于周期性的任务,除了定时器以外,在Linux内核中还可以利用一套封装得很好的快捷机制,其本质是利用工作队列和定时器实现,这套快捷机制就是delayed_work。

2024-10-10 15:30:48 370

原创 Linux 内核定时器

在Linux设备驱动编程中,可以利用Linux内核中提供的一组函数和数据结构来完成定时触发工作或者完成某周期性的事务。这组函数和数据结构使得驱动工程师在多数情况下不用关心具体的软件定时器究竟对应着怎样的内核和硬件行为。

2024-10-10 14:50:28 337

原创 ubuntu18.04 关闭 hostpot login

ubuntu 每次开机后,都会弹出一个网页,比较不爽。重启服务或者reboot。

2024-10-09 16:46:42 215

原创 linux udev详解

Linux 2.6以后的内核引入了sysfs文件系统,sysfs被看成是与proc、devfs和devpty同类别的文件系统,该文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的proc文件系统十分类似。sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性。

2024-10-09 11:57:12 1792

原创 使用vs编译paho.mqqt.c

6.点击generate,然后点击open project。8.进入你选择的生成目录,在src下就可找到你的库。5.点击configure,选择VS版本。3.运行cmake-gui.exe。下载对应系统的msi文件安装即可。可以去我之前的文章中找到下载地址。2.下载paho.mqqt.c。在界面中选择配置选项勾选即可,4.在如图1处选择你的源码。1.首先下载cmake。在如图2处选择输出路径。

2024-01-26 09:41:44 443

原创 开源libmodbus编译为32位和64位动态库

libmodbus 是支持Linux,Mac OS X,window 的一个开源库,支持modbus TCP和RTU 两种模式。

2023-12-15 09:56:18 1579

原创 ubuntu离线安装包下载和安装

找到ubuntu20.04 对应的deb包,点击进去,找到 Download --> BinaryPackage。比如需要下载 lm-sensors, 在 search栏中添加搜索。复制粘贴 对应的url到浏览器即可完成下载。

2023-12-01 14:26:02 3317 2

原创 Linux操作系统不同大小硬盘之间的系统拷贝

修改 /mnt/boot/efi/EFI/ubuntu/grub.cfg /mnt/boot/grub/x86_64-efi/load.cfg /mnt/boot/grub/grub.cfg 三个文件中的UUID。拷贝数据到/mnt 目录:就是把/dev/sda2 对应的目录的内容拷贝到 /mnt/拷贝数据到/mnt 目录:就是把/dev/sda1 对应的目录的内容拷贝到 /mnt/修改 /mnt/EFI/ubuntu/grub.cfg 文件中的UUID。加载 /dev/sdb1。

2023-07-10 11:47:15 1669 1

原创 Linux磁盘分区UUID查看和修改

不要轻易修改磁盘的UUID,尤其是系统盘的UUID,修改后需要修改对应的grub和fstab,否则系统无法加载起来。

2023-07-07 10:27:37 4440

原创 Linux 系统守护进程管理 --(start-stop-daemon)

目录一、功能二、格式2.1 搜索匹配的过程2.2选项2.2.1匹配选项2.2.2只对–start有效的选项2.2.3只对–停止有效的选项2.2.4其他选项三、应用3.1 启动进程3.1.1 强制启动3.1.2 默认启动3.1.3 启动进程,并生成进程的PID文件3.2停止进程3.2.1 使用进程名称停止进程3.2.2 使用PID文件停止进程一、功能启动或停止系统守护进程。二、格式start-stop-daemon [–

2022-05-10 16:17:45 3896

原创 Linux proc目录详解

目录1. 什么是proc2.proc目录介绍2.1/proc/cpuinifo CPU的信息(型号、家族、缓存大小等)2.2/proc/meminfo物理内存、交换空间2.3/proc/mounts 已加载的文件系统的列表2.4/proc/devices 可用设备的列表2.5/proc/filesystems 被支持的文件系统2.6/proc/modules 已加载的模块2.7/proc/virsion 内核版本2.8/proc/cmdl...

2022-05-10 15:23:41 7188

转载 ubuntu里设置从串口登录

1) Create a file called /etc/init/ttyS0.conf containing the following:# ttyS0 - getty## This service maintains a getty on ttyS0 from the point the system is# started until it is shut down again.start on stopped rc or RUNLEVEL=[2345]stop on runl.

2021-06-10 16:04:59 1785

转载 Linux模块加载流程及如何让系统开机自动加载模块

Linux模块加载Linux系统加载哪些内核模块,和配置文件有关系。模块保存在/lib/modules/下。使用/etc/modules-load.d/来配置系统启动时加载哪些模块。使用/etc/modprobe.d/下配置模块加载时的一些参数,也可以利用blacklist来屏蔽模块的自动加载。例如,在安装NVIDIA显卡驱动时,需要屏蔽开源的nouveau驱动,就可以将其加入blacklist。如何添加一个自己编译的模块将编译好的.ko模块放到目录/lib/modules/`uname

2021-06-10 15:41:42 2482

转载 Linux之systemd服务配置及自动重启

layout: posttitle: Linux之systemd服务配置及自动重启date: 2019-09-09tags: linuxLinux之systemd服务配置及自动重启0 背景在linux上开发时,往往需要将自己的程序做成服务,并且实现服务开机自动重启,以及服务崩溃后自动重启功能,本文就对该功能的实现做简单介绍,实现方法很简单,使用linux系统的systemd即可实现1 systemd介绍历史上,linux的启动一直采用init进程,比如$ sudo /etc/

2021-06-09 08:43:34 1165

转载 Systemd 入门教程:命令篇

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。本文介绍它的基本用法,分为上下两篇。今天介绍它的主要命令,下一篇介绍如何用于实战。一、由来历史上,Linux 的启动一直采用init进程。下面的命令用来启动服务。$ sudo /etc/init.d/apache2 start# 或者$ service apache2 start这种方法有两个缺点。一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一.

2021-06-09 08:28:15 233

转载 Linux 守护进程的启动方法

"守护进程"(daemon)就是一直在后台运行的进程(daemon)。本文介绍如何将一个 Web 应用,启动为守护进程。

2021-06-09 08:09:56 517

转载 linux git 问题:fatal: early EOF fatal: The remote end hung up unexpectedly fatal: index-pack failed

linux从github git较大的文件时出现的问题,查找以下,暂时关闭防火墙可行,或许还有其他好的解决办法,暂时记录下:出现问题:git clone --recursive https://github.com/arq5x/lumpy-sv.gitfatal: early EOFfatal: The remote end hung up unexpectedlyfatal: index-pack failed123过早的文件结束符。解决办法,逐条执行以下语句export GIT

2021-06-02 16:10:25 829

原创 setsockopt函数功能介绍

功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include <sys/types.h>#include <sys/socket.h>int g...

2020-10-20 10:22:06 2188

转载 epoll实现socket通信

epoll是Linux特有的I/O复用函数,它在实现和使用上与select和poll有很大差异。epoll使用一组函数来完成任务,而不是单个函数。epoll把用户关心的文件描述符上的事件放在内核的一个事件表中,无需像select和poll那样每次调用都要重复传入文件描述符集或事件集,但epoll需要一个额外的文件描述符,来唯一标示内核中的这个事件表,这个文件描述符使用epoll_create函数来创建。 epoll是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用.

2020-08-23 22:22:35 7080

原创 lua 和 c交互详解(一)

lua与c之间交互是通过“lua堆栈”通信的。不管是lua调用c还是c调用lua,都是通过操作lua堆栈实现的。顾名思义,lua堆栈也满足后进先出的特点,入栈/出栈都围绕栈顶进行的。与通用的栈不同的是,这个虚拟栈每个位置都对应一个索引,可以通过索引操作指定位置的数据。1代表栈底,向栈顶依次递增;-1代表栈顶,向栈底依次递减,如图。1. lua中类型在c中如何表示要实现c和lua之间的交...

2019-12-02 15:52:24 2333

原创 lua闭包函数详解

词法定界:当一个函数内嵌套另一个函数的时候,内函数可以访问外部函数的局部变量,这种特征叫做词法定界 table.sort(names,functin (n1,n2) return grades[n1]>grades[n2] end) //内部匿名函数可以访问外部函数的n1,n2第一类值:lua当中函数是一个值,他可以存在变量中,可以作为函数参数...

2019-11-27 18:52:54 568

原创 lua5.3 获取table的元素数量

最近更新了lua版本到最新的版本Lua 5.3.4 Copyright (C) 1994-2017 Lua.org, PUC-Rio在运行旧的项目的时候出现了如下错误xxx: attempt to call a nil value (field 'getn')stack traceback:网上查了一下,发现也有许多朋友出现了这样的问题,原因是lua在5.1以后的版本去除了table.g...

2019-11-27 18:47:42 5961

原创 Makefile.am和makefile.in生成Makefile

很多时候,我们在网上下载的linux开源软件都会遇到一个问题,就是源码里面没有直接的makefile,但是它有Makefile.am和makefile.in或者它有Makefile.am和configure.in,这里就不详细解释他们直接的关联,直接给出如何操作生成makefile。具体操作步骤如下:1. 执行aclocal,产生aclocal.m4文件aclocal是一个perl 脚...

2019-11-14 16:22:26 631

转载 __init、__initdata和__exit、__exitdata

由于4年前对于C语言和Linux的知识贫乏,所以当时对于模块中的函数定义没有细看。这次在温习《LDD3》的时候,重新看了一下关于__init、__initdata和__exit、__exitdata的知识,记录如下:对于__init、__initdata和__exit、__exitdata的定义位于<linux/init.h>,这些宏定义的作用是告诉编译器将这些函数或者数据放...

2019-08-06 08:58:15 763

原创 Centos7选定默认启动的内核版本

#使用cat /boot/grub2/grub.cfg |grep menuentry 查看系统可用内核[root@bigapp-slave27 ~]# cat /boot/grub2/grub.cfg |grep menuentryif[ x"${feature_menuentry_id}"= xy ];thenmenuentry_id_option="--id"...

2019-08-02 09:42:33 6668

转载 Linux ar命令

当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量。这里介绍命令ar,用来对库操作。1.ar基本用法  ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都...

2019-04-29 16:27:43 242

原创 linux 的间隔定时器函数setitimer

1.介绍  在linux下如果定时如果要求不太精确的话,使用alarm()和signal()就行了(精确到秒),但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数。  setitimer()为Linux的API,并非C语言的Standard Library,setitimer()有两个功能,一是指定一段时间后,才执行某个function,二是每间隔一段时间就执行某个fu...

2019-03-26 11:39:59 820

转载 关于抓包出现TCP DUP ACK问题

最近在跟一个CDN服务器端做对接,从CDN服务器下载内容(http),发现抓包出现非常多的Tcp Dup Ac​k异常提示。通过查阅质料得知Tcp Dup Ack xxx#y代表了数据段丢失TCP状态,xxx代表数据丢失的位置,#后代表第几次丢失文。然后我我又再看了下报文,的确是2次数据发送到我这边,我才回复一次ack,但是这个ack回复是正确的。 对比对接其他地方的CDN的抓包,发...

2019-03-16 09:33:51 6988

转载 tcp retransmission原因

TCP协议是一个可靠的协议。它通过重新发送(retransmission)来实现TCP片段传输的可靠性。简单的说,TCP会不断重复发送TCP片段,直到片段被正确接收。TCP片段丢失TCP头部的checksum接收方(receiver)可以通过校验TCP片段头部中checksum区域来检验TCP片段是否出错。我们已经接触过了IP协议详解的checksum算法。TCP片段的ch...

2019-03-15 19:04:32 101690 1

GBK和Unicode的对照表

GBk和unicode的转换对照表,用于解决编码转换的问题。

2017-12-06

adt下载地址的链接

主要提供给安卓开发需要下载adt资源的人,quxiazai对应的adt

2015-10-30

空空如也

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

TA关注的人

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