- 博客(47)
- 资源 (20)
- 问答 (1)
- 收藏
- 关注

原创 柔性数组使用详解
柔型数组详解柔型数组的概念结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组(flexible array)成员(也叫伸缩性数组成员)。在日常编程中,有时需要在结构体中存放一个长度是动态的字符串(也可能是其他数据类型),一般的做法,实在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间。这种方法的最大缺点是导致结构体成员地址不连续,导致内存碎片化。在通常情况下,如果想要高效的利用内存,那么在结构体内部定义静态的数组是非常浪费的行为。其实柔性数组的想法和动态数组的想法是一
2020-08-06 15:19:35
749

原创 数据队列的用因及用法
数据队列文章目录数据队列@[toc]常规存储机制弊端数据队列的实现数据队列实战总结在日常收发数据过程中,尤其多线程操作,数据的收发需要用到数据队列去处理,那么为什么要使用数据队列?什么是数据队列呢?常规存储机制弊端在接收或者发送数据的时候,你的数据的存储机制是什么样的呢 ?是否是采用下述方式?#define MAX_BUF_SIZE 2048unsigned short recv_len;unsigned char recv_buf[MAX_BUF_SIZE];int
2020-07-25 21:03:15
1759
原创 链式编程返回值是引用而非对象的原因
链式编程思想函数返回的是this指针的解引用,也就是被调用函数的对象。例如c++的输出函数 cout,它可以无限追加,这就是链式编程思想cout << "hello" << "world" << "Tony" <<endl;返回值为什么是引用采用链式编程思想的函数的返回值是引用,即对象本身,而非值拷贝示例-返回值为引用 #include <iostream> #include <vector>
2022-04-23 18:31:11
1600
2
原创 jenkins 部署详细教程
jenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,Jenkins只是一个平台,真正运作的都是插件。主要用于持续、自动的构建/测试软件项目、监控外部任务的运行jenkins 相关网站Jenkins官网 https://jenkins.io/Jenkins官网文档 https://www.jenkins.io/zh/doc/学习文档 https://www.w3cschool.
2022-04-10 15:34:19
2526
1
原创 jenkins部署流程,对接gerrit详细教程
jenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,Jenkins只是一个平台,真正运作的都是插件。主要用于持续、自动的构建/测试软件项目、监控外部任务的运行jenkins 相关网站Jenkins官网 https://jenkins.io/Jenkins官网文档 https://www.jenkins.io/zh/doc/学习文档 https://www.w3cschool.
2022-04-09 16:02:28
10080
1
原创 搭建gerrit服务器+LDAP认证+集成gitewb详细流程
本篇文章详细介绍了gerrit服务器搭建的每一个步骤,对接LDAP认证,集成gitweb的配置流程,非常详细。
2022-04-07 00:14:28
6197
3
转载 Lamada表达式(匿名函数)使用详解
使用 STL 时,往往会大量用到函数对象,为此要编写很多函数对象类。有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费。定义函数对象类的地方和使用函数对象的地方可能相隔较远,看到函数对象,想要查看其 operator() 成员函数到底是做什么的也会比较麻烦。对于只使用一次的函数对象类,能否直接在使用它的地方定义呢?Lambda 表达式能够解决这个问题。使用 Lambda 表达式可以减少程序中函数对象类的数量,使得程序更加优雅。定义Lambda 表达..
2021-06-11 15:13:54
870
1
原创 sscanf 导致栈溢出的问题
今日工程中用sscanf时候出现 *** stack smashing detected *** 的问题。问题#include <stdio.h>void test(){ unsigned short buf[6] = {0}; for(int i=0;i <6;i++) printf("before sscanf buf[%d] = %d\n", i, buf[i]); sscanf("2021-06-07 17:55:05", "%d-%d-%d %d:%d
2021-06-07 19:24:15
1052
原创 字节对齐的原因
什么是字节对齐?变量存取地址为在它所属类型的倍数的地址单元上,例如double要放在8的倍数的地址上,int要放在4的倍数的地址上…字节对齐的原因这样做的原因是,内存的存取并不是按照1个字节,而是按照计算机位数对应的字节来访问,例如:在32位机器上,每次访问4个字节,64位机器上,每次访问8字节。如果按照字节对齐的方式,访问数据速度更快。如果不按照字节对齐,则访问数据的周期数会增加。字节对齐与字节不对齐的对比例如:在 32 位机器上:按照字节对齐,访问 double 数据,只需要 2 个指令周
2021-05-31 19:53:11
940
原创 程序员必备网站合集
在线画图工具在线画图工具ProcessOn:https://www.processon.com/在线画图工具draw.io:https://app.diagrams.net/在线思维导图工具:http://www.mindline.cn/webappPlantUML在线编辑器:http://haha98k.com/在线开发辅助工具在线编解码工具Unicode编解码工具:https://www.zxgj.cn/g/unicodeUTF-8编解码工具:https://www.zxgj.cn
2021-04-24 14:02:03
252
原创 单片机 MQTT 读取数据问题(串口通信)
单片机 MQTT 读取数据问题(串口通信)问题描述使用stm32F10x单片机串口接收数据时,接收中断只能按字节接收。将接收到的数据放入数据队列中。这种接收中断按字节接收数据的方式,无法像Linux一样利用接收超时机制判断无后续帧。(接收到一段数据后,不会立即退出接收,而是等超时时间到表示本轮接收完毕)mqtt 读取到数据队列中有数据,就开始解析数据,然而此时有可能串口并没有将一帧完整的数据帧读取完毕,所以此时解析数据会出现解析失败问题。解决方法解决此问题的方法,可以参考Linux的思路。具
2021-04-14 21:52:27
2150
原创 vs code 自定义代码字体颜色,局部变量、全局变量、函数、宏、属性
vscode自定义代码字体与颜色风格在setting.json中修改即可:"editor.semanticTokenColorCustomizations": { "enabled": true, // enable for all themes "rules": { "*.static": { "foreground": "#ff0000", "fontStyle": "bold"
2021-04-06 10:39:27
12202
5
转载 STM32移植到GD32
一、移植说明最近有个项目想用GD替代原有的STM32,因为GD的成本更低。然后我就找了一些GD的资料,发现目前网上已有的一些资料都比较老,比如ST移植到GD的攻略,很多都停留在GD刚推广不久的过渡时期,目前已经不适用。就是当时有些GD的芯片官方还开发出对应的pack包或固件库,那时移植GD只能在工程里面选择STM32的芯片,然后修改32的固件库。而现在,GD的芯片都有了自己的固件库和pack包,只要安装对应的pack包就能在芯片选型那里选择对应的GD芯片。所以如果你是用GD做一个全新的项目,那么完全可以用
2021-03-18 15:31:46
4393
4
原创 git 回退机制详解
git 可以对程序进行版本管理,其中很重要的功能就是可以进行版本回退。试想下这样一种场景:新程序发布后,发现运行过程中出现问题,时间紧迫,此时需要赶紧返回之前运行良好的版本。操作流程1. 第一次建立git项目,提交到远程分支,并且记录为第一个版本2. 更改项目中文件的内容,提交到远程分支,记录为 第二个版本3. 更改项目中文件的内容,提交到远程分支,记录为第三个版本本地分支的源文件的内容,如下图所示:经过三次提交以后,我们可以在github上看到项目的提交记录,如下图:也可以通过.
2021-03-16 18:31:12
909
原创 git使用教程
git 可以对程序进行版本管理,其中很重要的功能就是可以进行版本回退。试想下这样一种场景:新程序发布后,发现运行过程中出现问题,时间紧迫,此时需要赶紧返回之前运行良好的版本。操作流程1. 创建本地仓库创建本地仓库 gitBackTestExample:目前,这只是一个文件夹,并非本地git仓库,下面进行本地仓库创建:进入当前项目根路径,右键打开git bash here 窗口,输入 git init, 将当前项目变成一个git项目;此时 gitBackTestExample 文件夹中出现.
2021-03-16 18:20:58
119
原创 国内外免费公用mqtt测试服务器推荐
引言mqtt协议在物联网开发中十分重要,测试过程中我们的程序一般都是mqtt客户端,往往需要mqtt服务器来配合测试,此时我们有三种方法:1.本地搭建mqtt服务器此种方法只可以在本地使用,无法接入外网。更适用于本地测试开发。2. 租用远程mqtt服务器此种方法可以接入外网,可以管理mqtt服务器,但需要money3. 使用开源远程mqtt测试服务器此种方法可以接入外网,但不可以管理mqtt服务器,但是免费,满足基本测试需求。这里主要介绍一下远程mqtt测试服务器。国内外免费mqtt测试服
2021-01-27 14:29:42
21378
8
原创 C语言实现将文件中数据一次性全部读出并打印
将文件中数据一次性全部读出并打印。文件示例文件名:json_str3.txt文件内容:{ "people": [ { "firstName": "z", "lastName": "Jason", "email": "bbbb@126.com", "height": 1.67 }, { "lastName": "jadena",
2021-01-22 17:29:42
4019
5
原创 自定义更改虚拟机中Ubuntu的ip地址
亲身经历在自定义更改ubuntu的ip地址的路上,我踩到很多坑例如:更改/etc/network/interfaces、使用 dbclient 指令等等,但是都没有解决我随机指定虚拟机ip的问题。今天我无意发现一个办法,和大家分享一番。此种方法无须更改ubuntu中任何配置,仅需通过虚拟机配置,即可完成ubuntu指定ip。更改 ip 前更改ip前我的虚拟机中 ubuntu 的 ip 为 192.168.79.130 ,现在我想将 ip 更改为 192.168.80.131。一起来看下具体如何
2021-01-17 12:22:40
5146
1
原创 Linux 通信之CAN通信程序(socket)示例
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <net/if.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <linux/can.h>#include <linux/can/raw.h>#defin
2021-01-14 13:41:03
1845
原创 CRC4校验C语言源码实现
#include<stdio.h> #include <string.h> //该程序中二进制数用字符串表示,比如二进制的110就用"110"表示 //该函数完成二进制数的异或 //result保存异或的结果,s1和s2为两个二进制串 char* strxor(char *result, const char *s1, const char *s2) { int i=0; while(s1[i] && s2[i
2021-01-13 09:19:09
1973
原创 消息收发的同步机制与异步机制
消息发送与接收,存在同步机制与异步机制。同步机制消息发送与消息接收存在先后关系,例如先执行消息发送,再执行消息接收。试用场景:请求数据查询组织数据查询请求这帧消息将请求消息进行发送发送完毕后,立即进入消息接收状态,在里面循环等待,直到等到请求响应帧,将响应的数据返回。或者没有等到响应帧,可以设置一个超时时间,超过超时时间后,返回请求失败。异步机制消息发送和消息接收没有先后关系,相互独立,接收和发送可以同时进行。试用场景:qq聊天消息发送和消息接收相互独立,无需等待。可以持续发送也
2021-01-07 23:50:37
1540
原创 Linux系统加载/读写U盘操作
用命令读取u盘信息,检测U盘是否存在fdisk -l[root@MY-EVC3000S-V2 bin]# fdisk -lDisk /dev/mtdblock0: 512 KiB, 524288 bytes, 1024 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 5..
2021-01-06 10:30:52
1514
原创 mqtt服务器搭建(ubuntu)
一、MQTT介绍1.1 简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT是一个基于客户端-服务器的消息发布/
2021-01-01 18:26:43
5249
1
原创 永久修改Linux系统时间的方法
1. 先使用 data -s 暂时修改系统时间例如:data -s '2020-12-31 15:31:20'2. 使用 hwclock -w 命令同步硬件时间hwclock 命令简介[root@MY-EVC3000S-V2 bin]# hwclock --helpBusyBox v1.23.1 (2016-02-23 09:52:57 CST) multi-call binary.Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc
2020-12-31 15:35:51
2258
1
原创 secureCRT直接登录ubuntu的root用户
VMware网络配置VMware的网络连接我们要选择NAT模式,还有一种方式就是选择桥接模式(这里就不做说明,不推荐这个方式,由于每次路由器动态分配给虚拟机的IP地址不一样,导致每次通过SecureCRT连接的时候host地址要更改)。进入到Ubuntu下,先查看Ubuntu虚拟机的IP配置,打开终端(Ctrl+Alt+T),通过ifconfig命令查看,可以看到Ubuntu下的IP地址信息。可以看出,该IP地址为192.168.172.168,然后就可以到Windows下设置VMware Net
2020-12-25 16:02:08
1133
原创 ubuntu设置中文失败解决办法
ubuntu设置中文失败解决办法我在修改系统设置的语言选项时,遇到了安装好汉语语言包之后,无法将灰色的汉语选项拖上去。如图,已经安装上了汉语的语言包,但在设置的时候无法把汉语选项拖动设置成第一个。而且进入Regional Formats页面无法将English转为Chinese。解决办法不要用root用户登录,换为主用户登录,再行设置即可。1.在语言栏将汉语从最下面拖到最上面2.点击应用到整个系统3.重启...
2020-12-18 16:38:59
5857
1
原创 Ubuntu安装qt4.8.6步骤
简介:本人Ubuntu版本为14.04,安装的qt4.8.6版本为:qt-everywhere-opensource-src-4.8.6.tar步骤:1.安装依赖库apt-get install libX11-dev libXext-dev libXtst-dev或apt -get install libfontconfig1-dev libfreetype6-dev libx11-dev libxcursor-dev libxext-dev libxfixe -dev libxft-dev l
2020-12-17 19:19:35
1182
原创 UDP通信流程
UDP通信流程描述UDP没有所谓的服务器与客户端,只需双方绑定对方的Ip和端口号即可。步骤一、先初始化本地以及对方IP以及端口号char hostIp[32];char localIp[32];int hostport;int localport;本地IP及端口号设置1. struct sockaddr_in Mcast_addr;2.bzero(&localIp[0],32); 3.sprintf(localIp,"192.168.2.200",); 4.local
2020-12-02 11:25:32
3388
原创 C 语言的学习总结
学习总结1 利用带参宏定义实现信息打印#include <stdio.h>#include <stdlib.h>#define DEVICE_EXAMPLE_TRACE(...) \ do \ {
2020-11-23 13:20:42
147
原创 库文件(动态库/静态库)的编译及链接
库文件的编译及链接库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a)和动态库(.so)。静态库简介之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件 .o 与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。试想一下,静态库与汇编生成的目标文件一起链接为可执行文件,那么静态库
2020-09-12 18:57:09
1909
原创 大小端模式判断的代码实现(另类)
大小端模式判断的代码实现(另类)大端模式:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。小端模式:小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。区分方法下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况:内存地址小端模式存放内容大端模式存放内容0x40000x780x120x40010x560x340x40020
2020-09-10 11:21:58
329
原创 makefile 学习历程
makefile 学习心得1. wildcard 展开通配符将通配符中包括的所有文件展开。示例1:不使用 wildcard-rm *.o -f结果:rm *.o -f示例2:使用 wildcard-rm $(wildcard *.o) -f结果:rm data_queue.o dlt698.o main.o process_manager.o public.o tcp_client.o -f2. VPATH 与 vpath 文件搜索正常情况下,makefile 只会
2020-08-12 13:44:06
317
1
原创 Linux 下获取进程名及运行路径
Linux 下获取进程名在可执行程序中有时候会需要获取当前程序的进程名,在这里介绍下运用 readlink 函数或命令获取程序运行的路径及进程名。示例代码1:运用 readlink 函数,填充 /proc/self/exe 参数实现#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define MAXBUFSIZE 1024int main ( int argc, char * a
2020-08-12 09:48:39
1126
原创 C 语言细节总结
C 语言细节总结1. sizeof 对于数组的用法sizeof( 数组名 )得到的是整个数组在内存中所占字节数。示例:#include <stdio.h>int main(){ unsigned char str1[] = "hello"; unsigned char str2[10] = "hello"; int int1[] = {44,55,88,11,22}; int int2[10] = {44,55,88,11,22};
2020-08-10 10:57:17
112
原创 Linux 文件锁 fcntl 函数详解
Linux 文件锁 fcntl 函数详解#include <unistd.h>#include <fcntl.h> int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);简介:fcntl() 功能是针对文件描述符提供控制,根据不同的 cmd 对文件描述符可以执行的操作也非常多,用的最多的是文件记
2020-08-07 15:52:15
2703
原创 文件操作之标准IO与系统IO
文件操作之标准IO与系统IO文件操作既可以用系统IO实现,也可以用标准IO实现,那二者又有和联系和区别呢?联系标准IO的实质是调用系统IO完成文件操作,即标准IO的执行依附于系统IO。区别系统IO是低级IO,通过API直接与操作系统内核进行操作,标准IO属于C库,在用户空间的可移植性强。标准IO在打开文件时候就会建立起缓冲区,缓冲区有三种模式。而系统IO没有,需要手动创建。数据流向无缓存IO操作数据流向路径:数据–内核缓存区–磁盘标准IO操作数据流向路径:数据–流缓存
2020-08-05 10:06:17
295
原创 SecureCRT连接本地虚拟机Linux系统很慢
CRT连接本地虚拟机Linux系统很慢主要是 SSH 配置问题解决方法打开 ssl 的配置文件并编辑gedit /etc/ssh/sshd_config提示:如果你的 sshd_config` 中没有 UseDNS ,可以自己补充一个。重启sshd服务service sshd restart如果执行失败,可以重启系统。然后可以在打开 CRT,发现速度就很快了。...
2020-07-31 23:54:02
883
原创 Ubuntu NAT模式下无法联网的解决办法
Ubuntu NAT模式下无法联网的解决办法设置虚拟机不能联网是很痛苦的,这里我就ubuntu的NAT上网问题就个人经验讲一下,其他的桥连接等没有使用就没有经验了。查看/设置下NAT的网络打开VMware Workstation点击编辑——虚拟网络编辑器,查看NAT模式的网络。如下图示,如果你对自动分配的子网IP不喜欢的可以点击还原默认设置,不过还是会自动分配的,不能自己设置的。点击NAT设置,查看子网IP子网掩码以及查看和设置网关IP点击DHCP设置,可以查看并设置自动分配的I
2020-07-31 23:34:33
8579
4
原创 安装Ubuntu16.04、VMware tools以、交叉编译器心得
安装Ubuntu16.04心得因为我虚拟机中的Ubuntu是14.02版本的而且是32位的,一个项目开发需要 用到64位的,所以我选择了一款64位的Ubuntu16.04 ,因为需要用到共享文件夹,导致一路遇到很多问题,所以这里做个总结。ios镜像下载第一步肯定是需要去下载镜像文件的,由于资源源在国外,所以从官网上下载速度很慢,所以不推荐,这里介绍几个国内靠谱的Ubuntu下载资源链接,这几...
2020-04-15 16:08:45
553
ldap+gerrit+gitweb集成化安装部署
2022-04-06
文件编码批量转换工具.tar
2020-09-22
Linux C 时间获取函数与时间设定函数详解(搭配代码).zip
2019-07-04
UDP多播(客户端+服务端).zip
2019-07-03
UDP单播发送与接收.c
2019-07-03
sscanf 导致栈溢出的问题
2021-06-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人