- 博客(61)
- 收藏
- 关注
原创 Linux下使用c编写简单的日志系统
1、日志系统用来干什么的?在大型软件系统中,为了检测运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件,在日志文件中存放程序流程中的一些重要信息,包括:变量名称及其值、消息结构定义、函数返回值及其执行情况、脚本执行及调用情况等。通过阅读日志文件,我们能很快地跟踪程序流程,并发现程序地问题。因此,熟练掌握日志系统地编写方法并快速地阅读日志文件,是对一个软件开发工程师地基本要求。2、打印等级函数需要有打印等级,目前分为ERROR、WARNING、INFO、DEBUG几种,等级越高,数字
2020-08-12 16:51:03 1729 3
原创 使用mosquitto库编程实现与腾讯云的通信(subscriber)
源码链接地址https://gitee.com/ma_kung/mqtt在学习mosquitto之前,大家先了解一下怎么使用mqtt.fx和腾讯云的通信,可以参考一下我的博客:https://blog.csdn.net/makunIT/article/details/107330190一、使用mosuqitto命令接入阿里云实现通信如果看过我MQTT.fx连接腾讯云那篇文章的同学,一定记得我们在创建产品时,一定要选择证书认证,证书认证为非对称加密方式,而密钥认证方式为对称加密方式,而MQTT.fx不支
2020-07-20 17:22:58 933 1
原创 在Ubuntu上搭建树莓派交叉编译环境
交叉编译一、什么是本地编译二、什么是交叉编译三、为什么要有交叉编译四、搭建交叉编译环境一、什么是本地编译我们之前常见的软件开发,都是属于本地编译:比如说ununtu下gcc的编译就是本地编译,也就是说在当前平台编译,编译得到的程序也是在本地执行。二、什么是交叉编译交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台
2020-07-14 23:47:08 2763
原创 腾讯云物联网平台实现MQTT双向通信(MQTT.fx测试)
打开腾讯云官网,注册并登录登录之后点击右上角的控制台点进去点击控制台进去之后,我们在右侧上栏云产品下搜索《物联网通信》然后我们点击创建新产品在认证方式这,我们一点要选择证书认证,因为证书认证为非对称加密方式,而密钥认证方式为对称加密方式,并且MQTT.fx不支持对称加密PSK,所以本篇博客仅仅演示非对称加密连接设置。!划重点!!!!创建完成之后,我们点击管理,进去创建一个设备!在这里我们要把它下载下来因为后面连接MQTT.fx连接时要用到以上设备创建好了之后,我们就用MQTT.f
2020-07-14 12:10:38 8042 4
原创 使用树莓派(基于官方link SDK)接入阿里云物联网平台实现温湿度上报
这里写目录标题一、什么是link SDK二、Link SDK适用产品实例三、 树莓派使用 C SDK 接入阿里云一、什么是link SDKlink SDK由阿里云提供给设备厂商,由设备厂商集成到设备上后通过该SDK将设备安全地接入到阿里云IOT物联网平台,继而让设备可以被阿里云IOT物联网平台进行管理。设备需要支持TCP/IP协议栈才能集成Link SDK、 Zigbee、433、KNX这样地非IP设备需要通过网关设备接入到阿里云IOT物联网平台,网关设备需要集成Link SDK。阿里云IOT物联网平
2020-07-13 23:17:00 3390
原创 树莓派使用mosquitto库搭建客户端将SHT20采样的温湿度上报阿里云
做这项工作之前,我已经做了一些准备工作了,我之前写的 “基于mosquitto库搭建mqtt客户端发布实现与阿里云的通信”以及“基于树莓派3B SHT20温湿度采样”都是为此项目做好准备的,大家如果想要完成树莓派与阿里云的通信,请务必先了解一下,我之前的博客,链接:基于树莓派3B SHT20温湿度采样https://blog.csdn.net/makunIT/article/details/107269016再有了这些准备工作之后,我们就可以完成此项任务了,首先我们要了解基本的流程:如下图我把sht
2020-07-13 12:44:44 790 1
原创 基于树莓派3B SHT20温湿度采样
二、硬件准备与连接硬件准备:树莓派3B、SHT20传感器模块、杜邦线4根(母头对母头)接线方式:不懂树莓派引脚的顺序去百度一下,有很多的回答,SHT20的引脚的定义看下图:2、使能I2C 的驱动远程登录树莓派后,输入 sudo raspi-config后,选择5.Interfacing Options 选择P5 I2C 选择 是,如下图所示:以上就完成了I2C驱动的使能,接下来我们检查I2C是否开启网络:使用命令 lsmod。如果列表中出现2c_bcm2835 i2c_dev这两个
2020-07-13 12:22:43 1453 2
原创 怎么把树莓派连接到电脑上(基于window10)
我相信对于刚玩树莓派的新手来说,尤其是没有带显示屏的同学来说,四处碰壁,可能出现的原因有很多种,ssh登录不上,wifi连接不上,内存不足,很多问题,而对于更多新手来说,如何给树莓派连接网络更是关键,今天我给大家讲一下如何用树莓派连接电脑。第一种方法,在我之前的博客,有讲解到,这篇博客,不仅讲解了新手拿到树莓派后,如何烧录以及远程登录的过程,以下连接是我写的博客:https://blog.csdn.net/makunIT/article/details/107109438如何使用树莓派连接电脑一、准备
2020-07-13 11:22:16 10059 1
原创 在树莓派上安装软件时,出现内存不足——解决方案
今天我在安装vim时,出现了一个bug,如下:方法一:我们查看一下空间,发现root被占满了我们可以清除安装但不再使用的过期安装包sudo apt-get autoremove清除所有已下载的安装包sudo apt-get clean如果这种方法不行,那我们就用方法二。方法二将SD卡大部分存储设置为系统盘...
2020-07-12 12:32:48 4804 4
原创 mosquitto库中常见的函数应用总结
我今天讲的函数是我用到的,也是我们常见的函数,更多的API学习:请参考:https://mosquitto.org/api/files/mosquitto-h.html1、int mosquitto_lib_init(void)功能:使用mosquitto库函数前,要先初始化,使用之后就要清除。清除函数;int mosquitto_lib_cleanup();返回值:MOSQ_ERR_SUCCESS 总是2、int mosquitto_lib_cleanup(void)功能:使用完m
2020-07-11 15:18:31 12870 2
原创 基于mosquitto库搭建mqtt客户端发布实现与阿里云的通信
在学习此之前,我们要先明白iniparser库以及cJSON库,为什么要学习这个呢?首先iniparser库可以对ini文件进行解析、设置、删除等操作,我们知道当我们与阿里云进行通信时,需要很多参数,比如要知道阿里云的域名,端口、以及username、passwd、客户端id以及发布的主题、服务质量都需要进行配置,所以使用iniparsesr库可以解决很多配置的问题。如下图是我写的ini文件关于iniparser库的学习可以参考以下我之前写的博客,博客链接为:https://blog.csdn.net
2020-07-10 22:21:56 1997 3
原创 Linux下gitee的使用—— 一看就懂得操作
在做基于ds18b20温度监控的项目开始时,就一直在使用git仓库,一直没有写过博客,基于今天家里没事,刚好可以写一下git版本控制的使用!废话不多说,上教程!git一、什么是git二、git与svn的区别三、gitee仓库的创建四、在树莓派(Linux)上对git进行配置五、Linux上git的基本操作一、什么是gitgit是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制
2020-07-10 18:19:56 9240 1
原创 iniparser库的使用
iniparser一、iniparser的概念二、iniparser.h中的一些API三、dictionary.h中的一些API四、在linux上用代码实现对ini文件的修改一、iniparser的概念iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。iniparser库的API可以对ini文件(配置文件)进行解析、设置、删除等操作。下载iniparser:Github:https://github.com/ndevilla/iniparser主要代码都在sr
2020-07-08 22:12:23 4847 2
原创 在Linux下使用cJSON解析JSON
[ {"eRANName":"eNB1", "eRANID":3002, "ctlPort":36412, "dataPort":2152}, {"eRANName":"eNB2", "eRANID":10000, "ctlPort":36412, "dataPort":2152}, ]
2020-07-08 15:44:23 3010 2
原创 【MQTT学习】在树莓派上安装Mosquitto和使用
Mosquitto一、Mosquitto的安装1.1 用wget下载源码包1.2 解压压缩包1.3 进入目录1.4找到配置文件config.mk,其中包含了所有Mosquitto的安装选项,详细的参数说明如下:1.5 编译1.6 安装二、配置&运行三、mosquitto_pub和mosquitto_sub 命令参数说明四、Linux c编程使用mosquitto库中常见函数的使用在了解Mosquitto之前大家可以参考我之前写的一篇博客学习一下MQTT协议的基本概念:https://blog.c
2020-07-05 14:49:13 2472
原创 树莓派(Raspberry Pi 3)烧录raspbian系统并使用SecureCRT远程登录
raspbian的安装过程一、准备的工具及烧录过程中所使用的软件二、安装过程2.1格式化SD卡2.2在SD卡中烧录树莓派镜像(操作系统)2.3将空白的ssh文件放入SD卡的boot盘2.4怎么获取树莓派的ip地址三、远程登录树莓派一、准备的工具及烧录过程中所使用的软件读卡器电脑SD卡(手机的内存卡)树莓派——我这里使用的是3B充电器——我使用的是5V、2A的SDFomatter(格式化SD卡)Win32Disklmager(镜像烧录工具)局域网ip扫描(获取树莓派的ip的地址)二、安
2020-07-03 22:47:52 1484
原创 串口通信协议和Linux下的串口编程
一、串口通信介绍:串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节,尽管比按位字节(byte)的并行通信慢,但是串口可以使用一根线发送数据的同时用另一根线接收数据。串口通信属于异步串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。二、串口接头:常见的串口接头有两种,一种是9针串口(简单DB-9),一种是25针串口(简称DB-25)。以DB9为例为例,如图:母头:泛指所有带孔状的接头(5针朝下,从左到
2020-06-30 18:35:19 3668
原创 AT命令的简单介绍和使用
一、AT命令的简单介绍AT即Attention,AT指令集是从终端设备(Terminal Equipment, TE)或数据中断设备(Data Terminal Equipment, DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业
2020-06-30 08:29:25 9618
原创 I2C基础知识学习
I2C基础知识1、I2C串行通信协议2、I2C总线概述3、I2C总线特点4、I2C总线的相关术语5、I2C总线通信协议1、I2C串行通信协议采用串行总线技术可以使系统的硬件设计大大简、系统的体积减小、可靠性提高。同时,系统的更改和扩展极为容易。单片机应用系统中常用的串行扩展总线有:IIC(Inter IC BUS)总线、单总线(1-WIRE BUS)、SPI(Serial Peripheral Interface)总线等。2、I2C总线概述IIC(Inter-Intergrated Circuit
2020-06-28 17:21:01 2867
原创 【MQTT学习】阿里云物联网平台实现MQTT双向通信
打开阿里云官网https://www.aliyun.com/?utm_content=se_1000301881,注册并登录登录之后点击右上角的控制台点进去点击左侧的栏目找到《产品与服务》,然后在界面直接搜索《物联网平台》点进去之后有侧栏目中找到《设备管理》下的《产品》,点进去产品之后,点击《创建产品》这里面的内容可根据自己的需求填写,填写的时候注意节点类型和联网里面的选项,产品名称和分类自己定义就可以,完成产品的创建之后,我们就要创建设备了,设备属于产品里面的一个子集,怎么说?打个比方苹果手
2020-06-27 22:10:30 3366
原创 【MQTT学习】MQTT协议中的基本概念
MQTT协议1、MQTT的概念2、MQTT的协议特点3、MQTT协议原理3.1MQTTT协议实现方式3.2网络传输与应用消息3.3MQTT客户端3.4MQTT服务器3.5MQTT协议中的订阅、主题、会话、控制报文3.6数据表示 Data representations3.6.1二进制位 Bits3.6.2整数数值 Integer data values3.6.3UTF-8编码字符串(UTF-8 encoded strings)1、MQTT的概念MQTT(Message Queuing Telemetry
2020-06-26 16:34:00 2015
原创 冒泡排序、插入排序、选择排序
排序1 冒泡排序1.1冒泡排序的流程及代码2 插入排序2.1插入排序的流程及代码3 选择排序3.1选择排序的流程及代码1 冒泡排序它是通过一系列的”交换“动作完成的。首先第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不交换;然后第二个关键字和第三个关键字比较,如果第二个大,则二者交换,否则不交换…一直按这种方式进行下去,最终最大的那个关键字被交换到了最后,一趟起泡排序完成。经过多趟这样的排序,最终使整个序列有序。这个过程中,大的关键字像石头一样”沉底“,小的关键字像气泡一样逐渐向上”浮动
2020-06-17 11:54:37 4426 2
原创 快慢指针的常见应用
快慢指针:快慢指针是解决数组和链表问题的常用方法,该方法也被称为“龟兔算法”。从名称就可以看出气基本思想是使用两个指针以不同的速度在数组或链表中移动。在处理循环链表或数组时,此方法非常有用。快慢指针的应用:(1)判断单链表是否存在环如果链表存在环,就好像操场的跑道是一个环形一样,此时让快慢指针都从链表头开始遍历,快指针每次向前移动两个位置,慢指针每次向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,没有环。如果快指针追上慢指针,则表示有环。代码如下:bool HasCircle(N
2020-06-16 21:53:39 643
原创 嵌入式硬件必知道的基础知识
硬件基础知识总线(Bus)总线通信方式串行通信方式分类之同步、异步通信串口通信TTL、RS232和RS485简介总线(Bus)总线是各种信号线得集合,是嵌入式系统中各部件之间传送数据、地址和控制信息的公共通路。在同一时刻,每条通路线路上能够传输一位二进制信号,按照总线所传送的信息类型,可以分为:数据总线(DB)、地址总线(AB)和控制总线(CB)。总线的主要参数:总线带度:一定时间内总线上可以传送的数据量,一般用MByte/s表示总线宽度:总线能同时传送的数据位数(bit),即人们常说的32位、6
2020-06-03 19:56:13 1685
原创 continue、break、return的区别
在做项目中,逻辑清晰是非常重要的,代码的规范也是非常重要的,我们在写代码时,一定要理解语言的作用以及使用方法和场景,对于continue、break、return这是我们做项目时,经常用到的,而有的人不理解他们的语法,有时候不知道在什么语句中,合理的使用它们,今天我就来讲一下它们之间的区别。1、break:break关键字的作用:结束当前整个循环,忽略循环体中任何其他语句和循环条件测试。我们看一下没有break代码:#include <stdio.h>int main (int a
2020-06-01 09:49:13 328
原创 yed工具的使用(画流程图)及流程图的简单介绍
在做项目之前,一定要画流程图,一个好的流程图,可以帮你在设计代码的时候少走弯路,对于画流程图,我想对于每一个程序员,是必备的技能吧,对于初次做项目的我而言,深刻的认识到了画流程图是如此的重要,我是用yed绘制流程图,我将分享一下yed流程图的使用。yed工具是操作极其符合直觉(有基础的鼠标和键盘操作经验者),充分利用了鼠标的左键,右键,滚轮和常见键盘快捷键,让绘图的过程尽可能少去点一些工具栏按钮,少一些编辑/选取模式的切换。这里写目录标题yed工具的安装yed的软件界面三级目录yed工具的安装htt
2020-05-19 10:08:47 17877 1
原创 当printf以十六进制打印char类型数组时引发的bug
以下代码是我做项目时,遇到的问题,我将以代码出现的问题,进行此次的总结。代码如下:/********************************************************************************* * Copyright: (C) 2020 makun<1394987689@qq.com> * All rights reserved. * * Filename: char.c
2020-05-17 23:14:03 6336 3
原创 数据库sqlite3之 sqlite3_exec()第三个参数回调函数的使用
在写这篇文章之前大家先了解我之前写的关于用c语言操作sqlite3的博客,链接地址如下:https://blog.csdn.net/makunIT/article/details/105192076关于sqlite3_exec的回调函数的知识,我也是在做一个项目中学习到的,看了一些博客吧,很多博客,都表达的不是很清楚,所以我想写这篇博客,记录自己的学习过程。大家先了解一下sqlite3_exec()函数吧。1、sqlite3_exec()函数原型#include <sqlite3.h>
2020-05-17 00:02:00 4119 7
原创 Linux下的调试工具gdb的使用
文章目录gdb的介绍gdb的常用基本命令gdb调试代码示例gdb的介绍gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,gdb主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以...
2020-04-29 21:25:52 305
原创 Linux下的检测工具valgrind的使用(memcheck)
Valgrind 是在linux系统下开发应用程序时用于调试内存问题的工具。它尤其擅长发现内存管理的问题,它可以检查程序运行时的内存泄漏问题。文章目录Valgrind的安装1、Valgrind一 工具集简绍2、Valgrind工具Memcheck的介绍3、 Memcheck的使用示例(3.1) 对未初始化内存的使用(3.2)内存泄漏的检测Valgrind的安装在Ubuntu上安装Valgri...
2020-04-28 09:58:18 3334
原创 浅谈自定义通讯协议——TLV(封装)
最近在写一个温度实时监控的项目,要用到TLV通讯协议,看了很多博客,慢慢的从里面明白了TLV的实现方式及用c语言实现TLV的编码,下面我将浅谈一下TLV,在讲TLV之前我们先讲一下什么是通讯协议。通讯协议1、通讯协议协议可以使双方不需要了解对方的实现细节的情况下进行通信,因此双方可以是异构的,server可以是c++,client可以是java,基于相同的协议,我们可以用自己熟识的语言工具来...
2020-04-23 09:03:00 3311 2
原创 gcc的编译过程
文章目录gcc的使用方法和选项gcc的编译过程我们在linux下写的.c文件,编译的时候只需要gcc xxxx.c 默认生成可执行文件a.out,其实编译的过程要经历四个过程,在此之前我先不讲这四个过程,我先讲一下,Linux下gcc的使用方法和选项gcc的使用方法和选项gcc的使用方法gcc [选项] 文件名在linux下我们可以使用 gcc --help 查看gcc的各个选...
2020-04-16 08:25:48 579
原创 连续存储数组的算法
最近一直在学习数据结构,所以想把自己学习的知识用微博记录下来此微博记录对数组的各种操作具体如下:void init_arr();//对数组进行初始化bool append_arr();//在数组后追加bool insert_arr();//往数据中添加元素bool delete_arr();//删除数组中的元素bool is_empty();//判断数组中是否为空bool is_fu...
2020-04-14 20:44:51 286
原创 snprintf()函数的使用
最近一直在写一个小项目,要用到snprintf()函数,所以今天想写一篇博客记录一下有什么错误的地方还请大家指出来,谢谢!一、snprintf()函数的原型int snprintf(char* dest_str,size_t size,const char* format,…);二、snprintf()函数的功能先将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至...
2020-04-09 15:16:08 537 1
原创 Linux下的Makefile的简单使用(简单粗暴)
文章目录Makefile的简介Makefile的通用结构以‘#’开头的行表示注释Mkfile的简单示例Makefile的简介Makefile 是和 make 命令一起配合使用的.很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂.Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以...
2020-04-06 10:50:30 1339
原创 linux下C语言编程操作数据库sqlite3
文章目录1、安装数据库2、sqlite的相关函数2.1 sqlite3_open()2.2 sqlite_close()2.3 sqlite3_exec()2.4 sqlite3_get_table()3、代码示例3.1 创建一个数据库3.2插入数据3.3查看表的内容3.4删除数据1、安装数据库我们从SQLi官网下载页面,https://www.sqlite.org/download.html...
2020-03-30 14:54:19 1402
原创 数据结构——二叉树
文章目录二叉树的定义(1)特殊的二叉树二叉树的主要性质二叉树的存储结构(1)顺序存储结构(2)链式存储结构二叉树的遍历算法二叉树的定义二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。(1)二叉树的每个个结点最多只有两颗子树,即二叉树中结点的度只能为0、1、2.(2)子树有左右顺序之分,不能颠倒。根...
2020-03-25 09:03:46 496
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人