c
文章平均质量分 86
V__KING__
这个作者很懒,什么都没留下…
展开
-
调试头文件
#ifndef _debug_H#define _debug_H#if 0#define print_dbg( fmt , arg...)#define print_info( fmt , arg...)#define print_err( fmt , arg...)#define __print_errno#define print_pAddr(p1, p2)#define print_buf(buf, len)#define __step #define __pBegin#de原创 2020-07-15 09:24:59 · 300 阅读 · 0 评论 -
C语言的异常处理setjmp\longjmp
https://www.cnblogs.com/hazir/p/c_setjmp_longjmp.htmlc语言是没有像c++和java那样,有异常处理的。如果想要达到c++异常处理的效果,则需要用到 setjmp 和 longjmp函数。goto我们都知道goto在c语言中会经常用到,但是goto的跳转只能再同一个函数内进行跳转。如果我不想在同一个函数内进行跳转,而是在不同函数之间进行跳...原创 2019-12-27 09:44:25 · 236 阅读 · 0 评论 -
convert enum to string-in-c
https://stackoverflow.com/questions/9907160/how-to-convert-enum-names-to-string-in-cOne way, making the preprocessor do the work. It also ensures your enums and strings are in sync.#define FOREACH_F...原创 2019-10-16 10:36:58 · 304 阅读 · 0 评论 -
C89和C99区别
1.对数组的增强 可变长数组 C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定 其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的. 可变长数组的维数在数组生存期内是不变的,也就是说,可变长数组不是动态的.可以变化的只是数组的大小. 可以使用*来定义不确定长的可变长数组。 数组声明中的类型修饰符 在C转载 2018-01-24 14:17:29 · 2056 阅读 · 0 评论 -
线程的同步与互斥(死锁的产生和避免)
参考:http://blog.51cto.com/2627lounuo/1765473加锁在公共的函数中加入了互斥锁死锁上面谈论到加锁和解锁,试想,如果一个线程连续两次申请锁,当其第一次申请的时候获得了这把锁,而第二次申请的时候因为锁被占用着会挂起等待,而占用这把锁的正是自身,那么该线程将永远不会释放锁而会一直处于挂起等待的状态。如果线程A获得了一把锁,线程B获得了另一原创 2018-01-08 13:34:19 · 443 阅读 · 0 评论 -
一个客户端快速频繁的连接服务器:Cannot assign requested address
背景机制: 1. 一个tcp服务器,端口1234;服务器限定只能维持一个tcp连接。该tcp服务器是原先已有的。 2. 一个web服务器,使用tcp客户端连接tcp server的1234端口。一个post请求对应一次[tcp client连接tcp server:1234],完成post请求后,断开该tcp连接。 问题现象: 当其中一个web页面中有多个ajax的post请求时,t...原创 2018-06-29 18:36:19 · 1784 阅读 · 0 评论 -
韦根协议-C编程实现
一. 韦根协议介绍定义Wiegand(韦根)协议是由摩托罗拉公司制定的一种通讯协议,它适用于涉及门禁控制系统的读卡器和卡片的许多特性,其协议并没有定义通讯的波特率、也没有定义数据长度韦根格式主要定义是数据传输方式:Data0和Data1两根数据线分别传输0和1,现在应用最多的是26bit,34bit,36bit,44bit等等,其中标准26-bit 格式是一个开放式的格式,任何人都可以购买...原创 2018-07-17 17:18:13 · 4606 阅读 · 3 评论 -
使用互斥锁mutex实现信号量sem
/* ======================== SYNCHRONISATION ========================= *//* Init semaphore to 1 or 0 */ void bsem_init(bsem *bsem_p, int value) { if (value < 0 || value > 1) { er...原创 2018-09-03 16:48:40 · 780 阅读 · 0 评论 -
串口有帧头帧尾的解码
串口有帧头帧尾的解码#include <stdio.h>#include <string.h>#define MAX_SIZE 1024int bw_getFrame(unsigned char *buf, int len){ int i = 0; int ret; unsigned char hea...原创 2018-11-13 00:53:20 · 6541 阅读 · 0 评论 -
sqlite3 C封装
二次封装:https://blog.csdn.net/lifan1314521/article/details/51250350回调函数sqlite3_exec()有回调函数sqlite3_step(), sqlite3_perpare(), sqlite3_finalize() 可以不用回调函数一步一步的去取数据去的字段。速度效率上sqlite3_step快参考:https:/...原创 2018-11-08 17:46:22 · 788 阅读 · 0 评论 -
函数指针数组-奇思妙用
笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数,在每个函数里面都...转载 2018-12-28 13:28:17 · 211 阅读 · 0 评论 -
如何在可执行文件中加上版本信息
1. 有一种方式是通过objcopyversion.o:version objcopy -I binary -O elf32-i386 -B i386 version version.o# $(CROSS_COMPILE)objcopy -I binary -O elf32-littlearm -B arm version version.o最简单的方式//注意一定要加上一个sta...原创 2019-02-19 18:41:17 · 1423 阅读 · 0 评论 -
linux 关于GMT, CST, UTC的编程和设置
了解UTC,GMT,时间戳1、UTC/GMT: GMT=UTCUniversal Time Coordinated 协调世界时,又称世界标准时间多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间、世界统一时原创 2018-01-12 18:11:14 · 1722 阅读 · 0 评论 -
问题:内存对齐、sizeof计算的字节数不对
1. 脑补内存对齐:百度https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E5%AF%B9%E9%BD%90/9537460?fr=aladdin2. 实验一下:编译如下的c文件:使用命令gcc main.c#include <sys/types.h>#pragma pack(1)typedef struct _CmdRfidReset { /原创 2017-12-26 20:01:53 · 750 阅读 · 0 评论 -
sublime + mingw 搭建环境
本人菜鸟,本来一直在用VS2012来学习C,结果发现编译出来的结果经常会跟VC++6.0有出入。甚至是很离谱的出入。所以现在改用了Sublime-Text3这个非常顺手的编译器。感谢论坛的某位大大发出的破解汉化版。但是写完C代码后,编译会出现这样的错误提示:[Decode error - output not utf-8][Finished in 0.0s with exit code原创 2014-05-22 16:01:22 · 3631 阅读 · 1 评论 -
sprintf的使用
下面的是会有问题的:char *temp ;sprintf(temp,"client=> %s:%d : %d\n",client_ip, client_port, client_st._socktid);应该写成:char temp[100] ;sprintf(temp,"client=> %s:%d : %d\n",client_ip, client_原创 2016-11-07 15:38:51 · 712 阅读 · 0 评论 -
犯错
犯错给结构体赋值的时候,给数组赋值的时候不需要中括号[],有[]是有问题的。原创 2017-01-11 09:27:21 · 308 阅读 · 0 评论 -
GDB调试
gdb调试断点设置gdb run.exebreak file_name.c:88break function_name:88run arg1 arg2 // arg1 arg2是run.exe的参数断点设置保存断点可以使用break file_name.c:88 其中88是行号 在gdb中,可以使用如下命令将设置的断点保存下来:(gdb) save breakpoints file-nam原创 2017-02-27 19:00:26 · 732 阅读 · 0 评论 -
linux 调试信息debug多参数,多颜色打印
printf打印的信息可以是有颜色的,可以使多参数输入的#include <stdio.h> #include <stdlib.h> #define DEBUG1( fmt, arg ... ) \ do{printf("[DEBUG] " fmt , ##arg ); }while(0); #define DEBUG2( fmt, arg ... ) \原创 2017-03-24 14:17:34 · 657 阅读 · 0 评论 -
状态机实现的三种方法-C语言
1.参考:http://www.eefocus.com/tagner/blog/15-06/313286_07eac.html2.转载:http://kb.cnblogs.com/page/528972/有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软件上称为FMM有限消息机)。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上原创 2017-05-12 15:40:49 · 35761 阅读 · 3 评论 -
C,C++代码格式化 - artistic style
windows下,将当前目录下所有的.cpp;.c;*.h文件格式化for /R %f in (*.cpp;*.c;*.h) do astyle --style=ansi "%f"linux下,将当前目录及子目录的.cpp;.c;*.h文件格式化find ./ -name "*.c" | xargs.exe ./AStyle.exe -c --style=ansi命令工具的用法: astyle原创 2017-04-10 15:36:09 · 1566 阅读 · 0 评论 -
代码函数调用关系图
代码函数调用关系Graphviz + CodeViz http://www.linuxidc.com/Linux/2015-01/111501.htmCallgraph :静态分析 C 程序函数调用关系图cflow+graphviz +tree2dotx http://www.tinylab.org/callgraph-draw-the-calltree-of-c-functions/原创 2017-09-08 10:50:00 · 11125 阅读 · 0 评论 -
C中调用.so库中的函数与dlopen调用函数的区别
一. C中调用.so库中的函数与dlopen调用区别调用及结果 并没有区别区别在于,直接调用需要在工程中加入so的引用 而用dlopen可以直接使用动态库,更灵活另外,如果直接调用方式,so文件不存在会导致整个程序无法运行 而用dlopen动态加载,可以运行后再判断是否加载成功,即使失败,还可以保留程序其它功能dlopen使用的时候,麻烦的是:相当于需要把.so库中的函数个一个一个的导出原创 2017-12-11 18:25:40 · 2462 阅读 · 0 评论 -
错误:try using -rpath or -rpath-link
在使用到动态库的时候,出现错误如下:arm-linux/bin/ld: warning: libssl.so.0.9.8, needed by .//libcert.so, not found (try using -rpath or -rpath-link)我仔细查看编译命令$(CFLAGS) –o target –L/usr/lib/ssl/ -lssl 发现是没有错误的,但是还是出现(try原创 2017-12-15 12:37:57 · 8522 阅读 · 0 评论 -
结构体定义寄存器方法(很流行哦)
这里讲的是用户读写ARM自带控制寄存器的方法。ARM寄存器数量之多,叹为观止!幸运的是,它都是以模块分布,再依托C语言的模块化编程,用户就没有必要记忆那么多的寄存器名称了!拿LPC1114来说,单片机内部模块有“模数转换器ADC模块”,“看门狗WDG模块”,“中断模块NVIC”,“串口UART模块”等等。每个模块都有一些寄存器。在51单片机中,用串口发送数据,会这样原创 2013-10-28 16:41:18 · 9771 阅读 · 0 评论