- 博客(37)
- 收藏
- 关注
转载 5.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()针对(文件...
2018-06-29 08:11:03 176
原创 5.使用printf来调试程序
#define OUT_PRINTF(...) \ do { \ printf("\e[0;32m%s@line%d\t:", __FUNCTION__, __LINE__); \ printf(__VA_ARGS__); ...
2018-06-28 10:02:44 584
转载 4.使用assert函数来调试程序
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}else{ 报错&&终止程序!(避免由...
2018-06-28 09:29:24 253
转载 串口、COM口、TTL、RS-232的区别详解
Point: 1、串口、COM口是指的物理接口形式(硬件)。而TTL、RS-232、RS-485是指的电平标准(电信号)。 2、接设备的时候,一般只接GND RX TX。不会接Vcc或者+3.3v的电源线,避免与目标设备上的供电冲突。 3、PL2303、CP2102芯片是 USB 转 TTL串口 的芯片,用USB来扩展串口(TTL电平)。 4、MAX232芯片是 TTL电平与RS232电平...
2018-06-27 17:32:16 22101
转载 2.1立即数的判断方法一
在ARM汇编的数据处理指令中经常会使用到常数,而ARM汇编中规定使用的常数必 须是立即数。ARM立即数的是由一个8位的常数循环右移偶数位得到的,其中循环右移 的位数由一个4位2进制的两倍表示,公式如下:immediate=immed_8&<(2*rotate_imm4) “<<”表示循环右移 简单的说一个常数如果可以由一个8位的常数循环移位偶数位得到,那么就是立即数。为什...
2018-06-27 16:17:46 2044
转载 1.MQTT协议介绍
MQTT协议摘要MQ遥测传输(MQ Telemetry Transport,MQTT)是一个轻量级的基于代理的发布/订阅式消息传输协议,它的设计目标是开放、简单、轻量和易于实现。这些特征使它适用于各种受限环境,比如,但不限于:网络代价昂贵,低带宽或不可靠。在嵌入设备中运行,处理器和内存资源有限。 该协议的特性包括:使用发布/订阅消息模式,提供一对多的消息分发,解除应用程序耦合。消息传输对有效载荷内...
2018-06-27 14:53:20 594
转载 5.MQTT再学习 -- 交叉编译与移植
先说明一下,遇到的问题。我之前在 Ubuntu12.04 gcc 下可以搭建 mqtt 服务器生成的 libmosquitto.so.1。参看:MQTT再学习 -- 搭建MQTT服务器及测试现在我要在 DM368 的交叉编译器 arm-none-linux-gnueabi-gcc 链接共享库 libmosquitto.so.1。出现问题 cannot find -lmosquitto 即共享...
2018-06-27 14:49:25 4828 3
转载 4.MQTT再学习 -- MQTT 客户端源码分析
MQTT 源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇。参看:逍遥子_mosquitto源码分析系列参看:MQTT libmosquitto源码分析参看:Mosquitto学习笔记一、目录结构首先我们还是来看一下 mosquitto-1.4.14 的源码目录结构我们主要关注 client、lib、src 这三个目录。其中 src 和 lib 目录下主要放置 mosquitto 的实现...
2018-06-27 14:48:25 651
转载 3.MQTT再学习 -- 安装MQTT客户端及测试
上一篇文章我们已经讲了 MQTT 服务器的搭建,参看:MQTT再学习 -- 搭建MQTT服务器及测试接下来我们看一下 MQTT 客户端。一、客户端下载首先,客户端也有多种,我们需要面临选择了。参看:基于mqtt的消息推送(三)客户端实现现有客户端sdk分析,基本分为两大类:一类移植自C类库,如Mosquitto,一类是用objc或者swift原生实现。各种sdk对比如下,我选用的是MQTT-Cli...
2018-06-27 14:47:32 1196
转载 2.MQTT再学习 -- 搭建MQTT服务器及测试
最近在搞 PM2.5 采集,需要用到 MQTT 传输协议。协议部分看了几天的,讲的七七八八。本身在 intel 上有 写好的MQTT 的源码,现在的工作其实也就是移植到单片机上或者DM368板卡上。不过,对于之前没有接触过的我来说,还是从头开始,搭建服务器及测试一下为好。MQTT服务器有好多种,参看:Servers/Brokers Apache-Apollo:一个代理服务器,在ActiveMQ基础...
2018-06-27 14:46:40 808
转载 1.MQTT再学习 -- 漫谈MQTT协议
MQTT 服务器搭建我们已经完成了,现在回过头来看协议。参看:MQTT 官网参看:MQTT_V3.1_Protocol_Specific参看:MQTT协议中文版参看:MQTT协议中文版上面这几篇文章,已经说明了一切。下面着重讲一下 MQTT 的消息格式和主要特征。一、什么是MQTT首先你要知道什么是MQTT。额,这个很重要。官网是已经给我们答案了,参看:Frequently Asked Quest...
2018-06-27 14:45:04 234
转载 10.MQTT源码交叉编译与移植
基于MQTT源码的嵌入式LINUX移植,网上可参看资料几乎没有,估计是用的不多,没什么人弄,又或者太简单,没人写参考。这里记录下编译与移植过程。大致有三部分,交叉编译openssl、交叉编译MQTT、安装MQTT服务器。1 交叉编译OPENSSL因为MQTT用到OPENSSL库,所以编译MQTT的时候要先编译OPENSSL。解压源文件,创建openssl安装目录,配置openssl Makefil...
2018-06-27 14:09:56 826
转载 步步学GDB-《3》
四、维护停止点上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。在GDB中,如果你觉得已定义好的停止点没有用了,你可以使用delete、clear、disable、enable这几个命令来进行维护。 clear 清除所有的已定义的停止点。 clear <function> clear <filename:function> ...
2018-06-26 10:37:44 141
转载 步步学GDB-《2》
GDB的命令概貌启动gdb后,就你被带入gdb的调试环境中,就可以使用gdb的命令开始调试程序了,gdb的命令可以使用help命令来查看,如下所示: /home/hchen> gdb GNU gdb 5.1.1 Copyright 2002 Free Software Foundation, Inc. GDB is free software, covered by ...
2018-06-26 10:37:04 131
转载 步步学GDB-基本命令简写
命令解释示例file <文件名>加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。(gdb) file gdb-samplerRun的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。(gdb) rcContinue的简写,继续执行被调试程序,直至下一个断点或程序结束。(gdb) cb...
2018-06-26 10:36:13 784
转载 2.步步学GDB-基本命令
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序...
2018-06-26 10:34:23 149
转载 1.步步学GDB-《1》
GDB开题GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下...
2018-06-26 10:21:06 135
转载 14.system/WIFEXITED/WEXITSTATUS函数-linux
system:感性认识:systerm两层含义:1、正确退出后。还需要再判断,操作成功或者操作失败。2、错误退出。[cpp] view plain copy#include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> ...
2018-06-26 09:39:41 516
原创 9.tcp设置超时检测和检测网线是否断开
使用在服务器中 //设置超时时间 struct timeval timeout = {5, 0}; err = setsockopt(this->sock_client,SOL_SOCKET, SO_SNDTIMEO,(const char*)&timeout, sizeof(timeout)); if(err != 0x00){ return -1;} ...
2018-06-26 08:58:50 1882
转载 13.Linux execlp函数
execlp从PATH 环境变量中查找文件并执行定义:int execlp(const char * file,const char * arg,……);头文件:#include<unistd.h>说明:execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名, 找到后便执行该文件, 然后将第二个以后的参数当做该文件的argv[0]、argv[1]……, 最后一个...
2018-06-26 08:43:08 292
转载 12.线程退出的几种方式和资源回收及设置线程属性
线程退出油多种方式,如return,pthread_exit,pthread_cancel等;线程分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建线程时设置线程的属性为PTHREAD_CREATE_DETACHED,则线程默认是可结合的。可结合的线程在线程退出后不会立即释放资源,必须要调用pthread_join来显式的结束线程。分离的线程在线程退出时系统会自动...
2018-06-25 11:56:08 303
转载 11.Linux下的文件I/O编程
导读linux下C语言对于文件的操作,我们会经常用到fopen(),fclose(),fwrite(),fread(),fgets()等一系列库函数,基本和是和windows下学习C语言一样的,其实这些库函数就是在linuxx下对系统调用函数的封装,因此这里只介绍系统函数下的文件操作函数。(一).open()打开文件#include <sys/types.h>#include <...
2018-06-23 16:16:32 159
转载 10.在Linux字符界面中获取天气预报
目标:使用 Linux 命令行显示天气预报。发行版:所有 Linux 发行版。要求:能连上因特网的 Linux难度:容易约定:# - 需要使用 root 权限来执行指定命令,可以直接使用 root 用户来执行也可以使用 sudo 命令$ - 可以使用普通用户来执行指定命令简介无需打开网页浏览器就能直接从终端获取最新的天气预报那该多方便啊,对吧?你还能把它写成脚本,或者设置定义定时任务。http:/...
2018-06-23 16:06:52 602
转载 10.如何在Linux下解除PDF文件的密码?
今天,我碰巧与一位朋友共享一个受密码保护的PDF文件。我知道该PDF文件的密码,但不想透露。相反,我只想解除密码,将文件发送给朋友。于是我开始在网上找一些简单的方法,好解除PDF文件的密码保护。上网搜索一番后,我总结了在Linux下解除PDF文件中密码的四种方法。第一种方法:使用QpdfQpdf是一款PDF转换软件,用于加密和解密PDF文件,将PDF文件转换成另一个同等的PDF文件。Qpdf出现在...
2018-06-23 15:57:25 3128
转载 9.针对Linux的8种最佳免费防病毒程序
虽然Linux操作系统相当稳定和安全,但它们可能不完全免疫威胁。所有计算机系统都可能遭受恶意软件和病毒攻击,其中包括运行基于Linux的操作系统的系统。但是,对于基于Linux的操作系统而言,严重威胁的数量仍然低于Windows或OS X的威胁。因此,我们需要保护我们的Linux系统免受各种形式的威胁,例如可通过多种方式传输的病毒,包括恶意代码,电子邮件附件,恶意URL,仅提及的几个rootkit...
2018-06-23 15:51:41 7493
转载 8.如何在Linux系统中结束进程或是中止程序
在 Linux 中有几种使用命令行或图形界面终止一个程序的方式。进程出错的时候,您可能会想要中止或是杀掉这个进程。在本文中,我们将探索在命令行和图形界面中终止进程或是应用程序,这里我们使用 gedit 作为样例程序。使用命令行或字符终端界面 Ctrl + C在命令行中调用 gedit (如果您没有使用 gedit & 命令)程序的一个问题是 shell 会话被阻塞,没法释放命令行提示符。在...
2018-06-23 15:47:30 1198
转载 7.如何在无响应的Linux系统中杀掉内存消耗最大的进程?
作为一名博客作者,我收藏了很多博客、网站和论坛用来寻找 Linux 和 Unix 相关的内容。有时候,我在浏览器中开启了非常多的标签页,导致操作系统会无响应好几分钟。我不能移动我的鼠标,也不能杀掉一个进程或关闭任何开启的标签页。在这种情况下,我别无选择,只能强制重启系统。当然我也用了 OneTab (LCTT 译注:OneTab 是一个 Chrome 的 Extension,可以将标签页转化成一个...
2018-06-23 15:39:16 1233
转载 1.单链表 c实现 详细注释
经过很长时间的研究,因为刚学指针就像拿单链表来实现以下, 单链表其实只要理解了 指针域的移动就不是问题了 从开始的抄代码 到后面的自己写 参考书目《大话数据结构》#include <stdio.h>#include <stdlib.h>#include <time.h>//创建单链表的成员 其实就是结点//link p; p就是一个结点typed...
2018-06-23 15:19:33 242
转载 6.关于-/bin/sh:xx(命令) not found 的几种原因和解决办法
编写背后:昨天移植无线网卡到mini2440基本完成到最后一步:用命令:iwlist scanning 搜索网络时串口终端却出现了 -/bin/sh: iwlist not found ,后来请教老范老师点拨知道是库问题,最后自己找到问题、解决问题,才有此引发有所总结...... 关于-/bin/sh:xx(命令) not found 的几种原因:1./bin/目录下没有这个命令;2.bi...
2018-06-22 15:14:02 80791 1
原创 8.C++中的拼接字符串
用sprintf()函数将一个变量从int类型转换到字符串类型。为了正确地完成这个任务,你必须确保证目标缓冲区有足够大空间以容纳转换完的字符串。此外,还必须使用正确的格式化符。如果使用了不正确的格式化符,会导致非预知的后果。下面是一个例子:int n=10000;chars[10];sprintf(s,”%d”,n);// s中的内容为“10000”到目前为止看起来还不错。但是,对上面代码的一个微...
2018-06-22 11:51:17 1046
原创 8.C++写入文件
头文件:#include<fstream> /*打开配置文件*/ ofstream out("input.txt"); if(!out.is_open()){ #if DEBUG cout<<"打开配置文件失败(写入):"<<endl; #endif return -2; } /*...
2018-06-22 10:19:46 150
原创 7.C++读取文件的数据
头文件:#include <fstream>(1) #include <fstream>#include <stdlib.h...
2018-06-22 10:09:07 244
转载 5.pthread_join/pthread_exit的用法解析
官方说法:函数pthread_join用来等待一个线程的结束。函数原型为: extern int pthread_join __P ((pthread_t __th, void **__thread_return)); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的线程将一直等待到被等待的线程结束为止,当...
2018-06-20 17:26:22 169
转载 8.CRC8算法
1、 CRC8标准生成多项式CRC-8 x8+x5+x4+1 0x31(0x131)CRC-8 x8+x2+x1+1 0x07(0x107)CRC-8 x8+x6+x4+x3+x2+x1 0x5E(0x15E)123注:由于多项式的最高为都为1,并且在代码的crc8计算中,最高位也是不使用的, ...
2018-06-12 08:48:03 25707 2
转载 关于C++中计算时间的一些总结
关于C++中计算时间的一些总结方法一:clock()计时函数clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:clock_t clock(void) ;简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,...
2018-06-07 09:05:38 292
转载 7.网络编程中阻塞和非阻塞socket的区别
阻塞socket和非阻塞socket建立连接阻塞方式下,connect首先发送SYN请求道服务器,当客户端收到服务器返回的SYN的确认时,则connect返回.否则的话一直阻塞.非阻塞方式,connect将启用TCP协议的三次握手,但是connect函数并不等待连接建立好才返回,而是立即返回。返回的错误码为EINPROGRESS,表示正在进行某种过程. 接收连接对于阻塞方式的倾听sock...
2018-06-04 18:36:22 478
转载 6. "undefined reference to" 问题汇总及解决方法 ------非常非常好的一篇文章
转载地址: https://segmentfault.com/a/1190000006049907?utm_source=tuicool&utm_medium=referral在实际编译代码的过程中,我们经常会遇到"undefined reference to"的问题,简单的可以轻易地解决,但有些却隐藏得很深,需要花费大量的时间去排查。工作中遇到了各色各样类似的问题,按照以下几种可能出现的...
2018-06-02 08:43:17 6844
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人