- 博客(136)
- 收藏
- 关注
转载 1.linux自实现printf
#include <stdio.h>#include <stdarg.h> /* 使用va_list、va_start等必须包含的头文件 */#include <string.h>#include <math.h>/* linux C没有itoa函数,所以要自己写 */char *itoa(int i, char *str){ ...
2019-07-18 15:37:33
583
转载 15.TCP长连接与短连接、心跳机制
转自:1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接...
2018-11-14 11:35:11
512
转载 2.ARM芯片的时钟体系
注:以下内容学习于韦东山老师arm裸机第一期视频教程 一. 2440时钟简介 1.1 2440是一个SOC(system on chip)系统,不仅有很多CPU,还有很多外设,在2440芯片手册有系统框架图如下: 2440框架图中,不仅有CPU,而且有很多外设,其中外设分为两部分,一部分是AHB总线,一部分是APB...
2018-11-13 10:37:25
598
1
转载 1.PLL的原理,怎样用它倍频
PLL - PHASE-LOCKED LOOP 中文称锁相环, 简单来说就是用一个压控振荡器 (VCO - VOLTAGE CONTROLLED OSCILLATOR) 产生一个振荡频率, 经过 N 倍分频 (N - 包括 1 的正整数) 后在鉴相器上与被锁的已知频率比较, 比较结果波形通过低通滤波产生一个电压, 然后用这个电压控制 VCO 去改变振荡频率, 直到分频的振荡频率与已知频率相等并锁相...
2018-11-13 09:33:22
6502
1
转载 14.优雅关闭socket的方法:SO_LINGER
这个参数对应大量短链接的服务器很有必要! shutdown(fd, SHUT_RDWR); struct linger linger; linger.l_onoff = 1; linger.l_linger = 0; setsockopt(fd, SOL_SOCKET, SO_LINGER, (char *) &linger, siz...
2018-09-27 16:57:07
1437
原创 9.C++中的base64编解码实现
#include <string>#include <iostream>#include<stdio.h>using namespace std;std::string base64_encode(unsigned char const* , unsigned int len);std::string base64_decode(std::strin...
2018-09-07 15:04:07
1047
转载 1.最全整理浏览器兼容性问题与解决方案
常见浏览器兼容性问题与解决方案 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况。在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的显示效果。所以浏览器的兼容性问题是前端开发人员经常会碰到和必须要解决的问题。 在学习浏览器兼容性之前,我想把前端开发人员划分为两类: 第一类是精确按照...
2018-09-07 09:52:57
449
转载 1.c++ web编程:写出你的CGI程序
一 什么是CGI CGI(The Common Gateway Interface):通用网关接口,定义web服务器和客户脚本进行信息交互的一系列标准。 二 web浏览器 为了了解CGI的概念,让我们来看看当我们单击一个超链接来浏览一个特定的web页或URL的时候,背后会发生什么事? (1)浏览器首先会链接HTTP web 服务器并且请求一个U...
2018-09-06 10:46:23
386
转载 17.arm架构的异常与中断
注:以下内容学习于韦东山老师arm裸机第一期视频教程一.arm架构的异常与中断的处理 1.1 ARM对异常的处理流程 1.1.1 软件初始化 a. 设置中断源,让他可以产生中断 b. 设置中断优先级 c. 设置中断总开关 1.1.2 正常执行程...
2018-08-09 08:19:02
1308
转载 16.C语言及ARM中堆栈指针SP设置的理解与总结
1.什么是栈百度这么说:栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。简易理解:客栈,即临时寄存的地方,计算机中的堆栈主要用来保存临时数据,...
2018-08-09 08:10:40
1429
转载 13.CentOS 7.3 Xinetd服务的安装与配置
一、Linux守护进程与初始化进程1. 什么是守护进程Linux服务器的主要任务就是为本地或远程用户提供各种服务。通常Linux系统上提供服务的程序是由运行在后台的守护进程(Daemon)来执行。一个实际运行中的Linux系统一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户地服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。Window...
2018-08-08 08:23:19
9251
2
转载 12.RTSP请求详解及RTP 基于UDP和TCP协议传输数据的对比
最近一段时间一直在研究rtsp和rtp,现在写博客总结一下,也是对知识的一种巩固吧。rtsp的协议的请求流程及格式请参考一下链接:http://blog.youkuaiyun.com/u010425035/article/details/10410851下面是我用VLC播放器获取海康NVR视频的截图(此次获取是基于TCP的):下面来看一下针对每一条消息的详细截图:客户端发送的OPTION消...
2018-08-07 13:55:03
3774
转载 四字节内存对齐
首先我们先看看下面的C语言的结构体: typedef struct MemAlign { int a; char b[3]; int c; }MemAlign; 以上这个结构体占用内存多少空间呢?也许你会说,这个简单,计算每个类型的大小,将它们相加就行了,以32为平台为例,int类型占4字节,char占用1字节,所以:4 + 3 ...
2018-08-04 08:20:30
605
转载 高手进阶,终极内存技术指南——完整/进阶版 I
老實話,我個人覺得這兩篇文章真的寫的很不錯,前段時間在study關於DDR內存的初始化以及其相關知識的時候,詳細學習了它。個人很佩服原文的作者能夠寫出這麼深刻的文章。(應該說,這篇文章把DDR2的spec翻譯了大部份,對於我們BIOS工程師而言,是一篇不錯的資料。)下面是原文。两篇文章的出处是:http://hi.baidu.com/%BA%A3%B6%FB_heart/blog/calend...
2018-07-21 08:06:32
6879
2
转载 同步通信和异步通信的区别
同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下...
2018-07-10 08:16:23
30598
4
转载 15.UART协议
UART简介 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART通信在工作中相当常见,项目中需要生成uart信号,在博客中记录下。uart是异步通信,因为它只有一根线就可以数据的通信。不像SPI,I2C等同步传输信号。所以串口的传输速度和其它协议的速度相比是比较慢的。下面具体讲解一些uart协议以及是如何通信的。...
2018-07-10 08:06:15
312
转载 1.Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明
1. 为什么要使用后缀名为 .d 的依赖文件?在 Makefile 中, 我们的依赖关系可能需要包含一系列的头文件。 比如 main.c 源文件内容如下:#include "stdio.h"#include "defs.h"int main(int argc, char *argv[]){ printf("Hello, %s!\n", NAME); return 0;} ...
2018-07-09 17:21:48
1237
转载 15.同步与互斥的概念
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。互斥:是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之...
2018-07-05 08:40:38
1308
转载 11.使用信号量完成互斥操作
一、首先:我们要知道信号量是什么? 信号量的本质是数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步等功能。这是书本上介绍的信号量的概念,自己的理解比较简单: 信号量就是具有原子性的计数器,就相当于一把锁,在每个进程要访问临界资源时,必须要向信号量拿个锁”,...
2018-07-04 08:39:27
1608
转载 14.C语言中time函数和localtime获取系统时间和日期
C语言中time函数和localtime获取系统时间和日期 可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算。1. time 函数 返回1970-1-1, 00:00:00以来经过的秒数 原型: time_t time(time_t *calptr) 结果可...
2018-07-02 15:34:45
314
转载 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
188
原创 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
599
转载 4.使用assert函数来调试程序
我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非“报错”。 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种“契约式编程”,在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句:if(假设成立){ 程序正常运行;}else{ 报错&&终止程序!(避免由...
2018-06-28 09:29:24
278
转载 串口、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
22317
转载 2.1立即数的判断方法一
在ARM汇编的数据处理指令中经常会使用到常数,而ARM汇编中规定使用的常数必 须是立即数。ARM立即数的是由一个8位的常数循环右移偶数位得到的,其中循环右移 的位数由一个4位2进制的两倍表示,公式如下:immediate=immed_8&<(2*rotate_imm4) “<<”表示循环右移 简单的说一个常数如果可以由一个8位的常数循环移位偶数位得到,那么就是立即数。为什...
2018-06-27 16:17:46
2176
转载 1.MQTT协议介绍
MQTT协议摘要MQ遥测传输(MQ Telemetry Transport,MQTT)是一个轻量级的基于代理的发布/订阅式消息传输协议,它的设计目标是开放、简单、轻量和易于实现。这些特征使它适用于各种受限环境,比如,但不限于:网络代价昂贵,低带宽或不可靠。在嵌入设备中运行,处理器和内存资源有限。 该协议的特性包括:使用发布/订阅消息模式,提供一对多的消息分发,解除应用程序耦合。消息传输对有效载荷内...
2018-06-27 14:53:20
659
转载 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
4860
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
675
转载 3.MQTT再学习 -- 安装MQTT客户端及测试
上一篇文章我们已经讲了 MQTT 服务器的搭建,参看:MQTT再学习 -- 搭建MQTT服务器及测试接下来我们看一下 MQTT 客户端。一、客户端下载首先,客户端也有多种,我们需要面临选择了。参看:基于mqtt的消息推送(三)客户端实现现有客户端sdk分析,基本分为两大类:一类移植自C类库,如Mosquitto,一类是用objc或者swift原生实现。各种sdk对比如下,我选用的是MQTT-Cli...
2018-06-27 14:47:32
1220
转载 2.MQTT再学习 -- 搭建MQTT服务器及测试
最近在搞 PM2.5 采集,需要用到 MQTT 传输协议。协议部分看了几天的,讲的七七八八。本身在 intel 上有 写好的MQTT 的源码,现在的工作其实也就是移植到单片机上或者DM368板卡上。不过,对于之前没有接触过的我来说,还是从头开始,搭建服务器及测试一下为好。MQTT服务器有好多种,参看:Servers/Brokers Apache-Apollo:一个代理服务器,在ActiveMQ基础...
2018-06-27 14:46:40
1041
转载 1.MQTT再学习 -- 漫谈MQTT协议
MQTT 服务器搭建我们已经完成了,现在回过头来看协议。参看:MQTT 官网参看:MQTT_V3.1_Protocol_Specific参看:MQTT协议中文版参看:MQTT协议中文版上面这几篇文章,已经说明了一切。下面着重讲一下 MQTT 的消息格式和主要特征。一、什么是MQTT首先你要知道什么是MQTT。额,这个很重要。官网是已经给我们答案了,参看:Frequently Asked Quest...
2018-06-27 14:45:04
244
转载 10.MQTT源码交叉编译与移植
基于MQTT源码的嵌入式LINUX移植,网上可参看资料几乎没有,估计是用的不多,没什么人弄,又或者太简单,没人写参考。这里记录下编译与移植过程。大致有三部分,交叉编译openssl、交叉编译MQTT、安装MQTT服务器。1 交叉编译OPENSSL因为MQTT用到OPENSSL库,所以编译MQTT的时候要先编译OPENSSL。解压源文件,创建openssl安装目录,配置openssl Makefil...
2018-06-27 14:09:56
903
转载 步步学GDB-《3》
四、维护停止点上面说了如何设置程序的停止点,GDB中的停止点也就是上述的三类。在GDB中,如果你觉得已定义好的停止点没有用了,你可以使用delete、clear、disable、enable这几个命令来进行维护。 clear 清除所有的已定义的停止点。 clear <function> clear <filename:function> ...
2018-06-26 10:37:44
165
转载 步步学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
147
转载 步步学GDB-基本命令简写
命令解释示例file <文件名>加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。(gdb) file gdb-samplerRun的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。(gdb) rcContinue的简写,继续执行被调试程序,直至下一个断点或程序结束。(gdb) cb...
2018-06-26 10:36:13
840
转载 2.步步学GDB-基本命令
一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序...
2018-06-26 10:34:23
174
转载 1.步步学GDB-《1》
GDB开题GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能。而Windows下...
2018-06-26 10:21:06
152
转载 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
535
原创 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
2060
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人