嵌入式开发
文章平均质量分 55
CodeHeng
这个作者很懒,什么都没留下…
展开
-
unsigned long long 大小端互转
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#define ntohll(src) convert(src)#define htonll(src) convert(src)inline unsigned long long conve原创 2017-12-01 13:50:42 · 2948 阅读 · 1 评论 -
嵌入式HZK16字库显示
Linux下gcc编译:#include int display(){ int i=0,j=0,k=0; unsigned char code[] = "我"; unsigned char qh,wh; unsigned long offset; FILE *fp; char mat[32]; fp = fopen("./HZK16", "rb"); if (fp == N原创 2014-11-13 15:13:47 · 4395 阅读 · 0 评论 -
二值图像连通域标记
一、前言二值图像,顾名思义就是图像的亮度值只有两个状态:黑(0)和白(255)。二值图像在图像分析与识别中有着举足轻重的地位,因为其模式简单,对像素在空间上的关系有着极强的表现力。在实际应用中,很多图像的分析最终都转换为二值图像的分析,比如:医学图像分析、前景检测、字符识别,形状识别。二值化+数学形态学能解决很多计算机识别工程中目标提取的问题。二值图像分析最重要的方法就是连通区域标转载 2016-06-26 10:38:36 · 3865 阅读 · 0 评论 -
yuv二值化操作
UV是色差分量,UV为0就会全是绿色,全为0x80的时候才能看到灰度图。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>int show_hex(char* begin, int len){ int i = 0; for (i = 0; i < len; i++) {原创 2016-06-25 21:34:19 · 2565 阅读 · 2 评论 -
字模bitmap使用实例
#ifndef __FONT_H__#define __FONT_H__#ifdef __cplusplus#if __cplusplusextern "C"{#endif#endif#define DBG(fmt...) do\{\ printf("%s: %d: ", __FUNCTION__, __LINE__);\ printf(fmt);\}whil原创 2016-06-16 10:47:55 · 908 阅读 · 0 评论 -
G.711编码原理及代码
最近看语音编码,发现网上大都只给出了G711的代码,确没有介绍原理,尽管很简单,但直接看代码也是有点摸不着。下面找到了原理进行简要的叙述,并给出了在网上找到的代码。1.介绍:G.711也称为PCM(脉冲编码调制),是国际电信联盟订定出来的一套语音压缩标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号转载 2016-05-06 14:29:18 · 3940 阅读 · 0 评论 -
C语言排序算法汇总
(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/{ int i,j,temp; for(i=0; i转载 2014-11-13 15:24:30 · 708 阅读 · 0 评论 -
RTMP协议学习
RTMP协议是一个互联网TCP/IP五层体系结构中应用层的协议。RTMP协议中基本的数据单元称为消息(Message)。当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。1 消息消息是RTMP协议中基本的数据单元。不同种类的消息包含不同的Message Type ID,代表不同的功能。RTMP协议中一共规定了十多种消息类型,分别发挥着不转载 2015-09-09 17:10:36 · 605 阅读 · 0 评论 -
判断ip地址是否合法的函数
//判断IP地址是否合法int check_ip(char *ip){ int i = 0, count = 0; const char *s = "."; char TempIP[20]={0}; int IPAddr[4] = {0}; memcpy(TempIP, ip, sizeof(TempIP)); for(i = 0; i <原创 2015-07-17 13:42:58 · 4135 阅读 · 0 评论 -
http 响应头里面Content-Length字段详解
对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行中可以动态的输出内容,例如一些运算比较复杂且需要用户及时的得到最新结果,那就采用chunked编码将转载 2015-07-15 16:28:13 · 23803 阅读 · 1 评论 -
一个读写缓冲模块
#include #include #include #include #define ARG_IS_VALID(exr, ret) do\{\ if (!(exr))\ {\ printf("invalid argument: failed to jugde %s\n", #exr);\ return ret;\ }\}whi原创 2015-06-08 08:51:59 · 429 阅读 · 0 评论 -
C/C++ 打印信息控制,包括日志
#ifndef _MACRO_H_#define _MACRO_H_#include #include #include #include #include #include #define MAX_LOG_SIZE (5*1024*1024) // 5Mextern FILE *plog;extern const char *log_path;int InitLogF原创 2015-05-19 17:04:16 · 1408 阅读 · 0 评论 -
C语言strings函数说明
PS:本文包含了大部分strings函数的说明,并附带举例说明。本来想自己整理一下的,发现已经有前辈整理过了,就转了过来。修改了原文一些源码的问题,主要是用char *字义字符串的问题,导致程序运行时崩溃。另外自己重写了部分测试程序,使其更能满足自己测试的需要。不当之处,还请海涵。@函数原型: char *strdup(const char *s) 函数功能: 字符串拷贝,目的转载 2015-06-24 10:49:25 · 1259 阅读 · 0 评论 -
开启core dump文件生成模式
1、先把程序用-g 编译,注意后面不要strip掉2、开启以pid命名core文件,echo "1" > /proc/sys/kernel/core_uses_pid3、设置生成core文件的目录以及名字格式,echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern原创 2015-06-01 10:14:54 · 548 阅读 · 0 评论 -
sqlite 基本API接口说明
1 、打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建。第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构体指针(关键数据结构),这个结构底层细节如何,您不用管它。 int sqlite3_open( const char *filename, /* Database filename (UTF-8) */转载 2015-05-29 11:20:53 · 940 阅读 · 0 评论 -
epoll,select,poll单线程服务端示例
1、关于字节排序 网际协议采用大端字节序,来传输多字节整数。 系统提供了转换的宏定义,如果主机与网际协议相同,则宏定义为空。2、客户端 socket -> connect(阻塞,三次握手)-> rcv3、服务器端 socket -> bind -> listen -> accept(阻塞,三次握手)-> send4、函数介绍 a..socket转载 2015-04-09 09:03:10 · 744 阅读 · 0 评论 -
减少可执行程序的大小
一、背景 可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使用,只用了其中的几个,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加,浪费了flash空间和内存空间。二、方法 因为GCC链接操作以section作为最小的处理单元,只要一个section中有某个符号被引用,该section就会被加入。 如果我们的某个.c程序中所有原创 2016-07-01 16:35:08 · 5279 阅读 · 0 评论 -
onvif框架生成2
1、下载好gsoap库和wsdl文件,建立目录结构如图 2、进入generate_onvif_framework建立三个文件 #makefilePWD=$(shell pwd)SRC=$(wildcard $(PWD)/*.c)OBJ=$(SRC:%.c=%.o)COMPILE=CPP=$(COMPILE)gccAR=$(COMPILE)arCFLAGS=-Wall -ffuncti原创 2016-07-11 10:42:30 · 2637 阅读 · 3 评论 -
websocket头解析
一、帧结构图及含义0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+——-+-+————-+——————————-+|F|R|R|R| opcode|M| Payload len转载 2017-12-01 11:04:35 · 4535 阅读 · 0 评论 -
RTP打包H264
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <memory.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/socke转载 2017-07-17 09:27:22 · 864 阅读 · 0 评论 -
分离h265/h264裸流的帧
1、此模块分离h265/h264裸流的帧#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <string.h>#include <assert.h>原创 2017-03-24 14:42:33 · 3162 阅读 · 2 评论 -
avi 格式解析
分析工具 RiffPad http://download.csdn.net/detail/codeheng/9793505AVI:Audio/Video Interleaved(视音频交织),用于采集、编辑、播放的RIFF文件。由Microsoft公司1922年11月推出,用于对抗苹果Quicktime技术,AVI现在还在被广泛使用。 RIFF:Resource Interchange File转载 2017-03-25 15:55:43 · 1504 阅读 · 0 评论 -
利用ffmpeg移植到嵌入式计算poc
利用ffmpeg移植到嵌入式计算poc1、修改 \ffmpeg-3.2.4\libavcodec\hevc.c 下方的函数需要屏蔽一些代码static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal){ HEVCLocalContext *lc = s->HEVClc; GetBitContext *gb =原创 2017-03-24 14:06:59 · 1491 阅读 · 0 评论 -
ffmpeg 编译安装
1、下载ffmpeg,解压tar -jxvf ffmpeg-3.2.4.tar.bz2cd ffmpeg-3.2.4./configure --enable-static --disable-yasm //生成makefile 用静态库的形式编译make //生成ffmpeg ffprobe ffserver等可执行文件 大概要编译20分钟make examples //编译 ffmpeg-原创 2017-03-23 17:35:51 · 668 阅读 · 0 评论 -
wsdl 详解
WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服转载 2017-01-19 11:20:11 · 1014 阅读 · 0 评论 -
分解264/265裸流的帧
也可直接分解avi文件格式的#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <string.h>#include <assert.h>int s原创 2017-01-04 11:13:11 · 1259 阅读 · 0 评论 -
H265关于RTP封包
首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示:从图中可以看出hHEVC的nal包结构与h264有明显的不同,hevc加入了nal所在的时间层的ID,取去除了nal_ref_idc,此信息合并到了naltype中,通常情况下F为0,layerid为0,TID为1。 nal单元的类型有如下几种:[cpp转载 2017-01-03 14:47:17 · 7424 阅读 · 0 评论 -
线程cpu跟踪
1、在每一个线程的开始调用THREAD_REGISTER(), 退出调用THREAD_UNREGISTER()#define THREAD_REGISTER() do\{\ char path[64];\ snprintf(path, sizeof(path), "/tmp/thread_%s_%ld", __FUNCTION__, syscall(SYS_gettid));\原创 2016-08-26 16:45:54 · 645 阅读 · 0 评论 -
一个通用链表模块(C语言)
1)把所有DBG和ERR改成printf; 2)COMMOM_Malloc改成malloc; 3)COMMON_Free改成free; 4)编译Ok;#ifndef __LIST_H__#define __LIST_H__#ifdef __cplusplus#if __cplusplusextern "C"{#endif#endiftypedef void* LIST_MGR_HA原创 2016-07-18 10:11:37 · 1143 阅读 · 0 评论 -
编译内核
1、 make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- hi3516a_mini_defconfig //ls arch/arm/configs/ -l 会自动到此目录寻找相应的config(hi3516a_mini_defconfig)2、make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux- uImage原创 2016-07-28 19:22:45 · 593 阅读 · 0 评论 -
检测内存泄漏malloc模块
1)实际应用中,很多地方用到malloc动态申请内存,其实频繁使用应该没有什么碎片之类的影响,linux会帮我们优化,只要我们使用后正常free就ok了。2)检测思路是每次malloc申请的时候记录一下此时申请的位置(函数名,行号),在/tmp/下建立以位置等信息命名的空文件。free时候再把相应的文件删除掉。3)这里用到一个小技巧,每次malloc的时候多申请一点内存,用作记录内存信息头。4)把对原创 2016-07-18 16:10:39 · 1382 阅读 · 0 评论 -
onvif设备发现
1)由onvif官方的wsdl链接生成onvif.h头文件wsdl2h -c -s -t typemap.dat -o onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl2)soapcpp2.exe把onvif.h生成对应框架代码soapcpp2.exe -2 -c onvif.h -I..\gsoap原创 2016-07-06 17:37:11 · 4233 阅读 · 1 评论 -
onvif框架生成
一、下载gsoap 二、进入gsoap-2.8\gsoap\bin\win32, 并把gsoap-2.8\gsoap\typemap.dat拷贝到gsoap-2.8\gsoap\bin\win32下 1)由onvif官方的wsdl文件生成onvif.h头文件wsdl2h -c -s -t typemap.dat -o onvif.h http://www.onvif.org/onvif/ver1原创 2016-07-06 17:11:30 · 1055 阅读 · 0 评论 -
线程之间生产者和消费者模型
#ifndef _CACHE_H_#define _CACHE_H_#include #include #include #include #include #include #include #include /*传入的数据类型T构造函数参数应该设置没有,否则编译出错*/templateclass CacheQueue{public原创 2015-04-24 11:06:01 · 492 阅读 · 0 评论 -
常用的宏
#ifndef _MACRO_H_#define _MACRO_H_#include #include #include #include #include #ifdef DEBUG#define DBG(format, ...) do\{\ fflush(stdout);\ fprintf(stdout, "pid: %d, "fo原创 2015-04-08 17:15:05 · 441 阅读 · 0 评论 -
libuv网络库的TCP服务端与客户端
本人一直在寻找一个跨平台的网络库,boost与ACE比较庞大,不考虑。对比了libevent,libev,libuv后,最终选择了libuv.可libuv文档少,例子也简单,对于tcp只有个echo-server的例子。网上也找过对其封装的例子,如下libsourcey库,封装了许多库。对libuv的封装跟其他代码耦合比较紧,难为剥离 http://sourcey.com/libuv-转载 2015-04-01 21:39:46 · 12271 阅读 · 3 评论 -
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout); 所在的头文件为:#include 和#include转载 2014-12-09 11:47:45 · 504 阅读 · 0 评论 -
Linux下进程之间信号量互斥、同步
一、信号量信号量一般的作用就是用在进程之间的互斥和同步操作,跟线程的锁机制差不多的作用。线程当然也可以使用信号量来进行互斥(同步)。二、程序示例/*commom.h*/#ifndef _COMMOM_H_#define _COMMOM_H_#include #include #include #include union semun{ int val; stru原创 2014-12-08 11:20:33 · 774 阅读 · 0 评论 -
C单链表的操作(创建、插入、删除)
一、单链表在单链表中,每个节点都包括两个域,即数据域,指针域,也就是说每个节点都包含一个指向下一个节点的指针,链表中的最后一个节点的指针字段的值为NULL,提示链表后面不再有其他节点。遍历链表自始自终都是从头结点开始,就可以访问所有的节点。为了记住链表的起始位置,可以使用一个根节点,根节点的指针域始终指向第一个节点。注意根节点的数据域可以有,也可以没有。二、程序示例/*linklist原创 2014-12-08 10:54:24 · 1065 阅读 · 0 评论 -
Linux下TCP输出打印消息
一、需求有时我们的程序在产品上跑,不知道那天会出现问题,再重启程序才能看到打印的消息,但是重启后问题又不出现了,所以就需要在出问题的时候能看到程序的打印消息。二、程序设计用TCP来发送打印消息,服务端只需要调用int CreaSendPthread(),而客户端只需要调用int CreaRecvPthread(char *ipaddr)就可以了,端口已经默认绑定一样了。在工程里面在需要原创 2015-01-08 14:41:26 · 1133 阅读 · 0 评论