C语言
文章平均质量分 80
Keycer
这个作者很懒,什么都没留下…
展开
-
c语言libjson库一些api和内存管理
1. json_object_get与json_object_put函数 struct json_object* json_object_get(struct json_object *jso); // 将jso对象的引用计数加1,返回jso自身void json_object_put(struct json_object *jso); // 将jso对象的引用计数减1。此时如果jso的引转载 2016-07-26 20:34:36 · 3564 阅读 · 0 评论 -
Modbus CRC16校验算法--查表法(已经过本人测试,工作良好)
代码如下:uchar auchCRCHi[]={0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0转载 2014-11-13 08:54:44 · 28477 阅读 · 15 评论 -
使用Linux 原始套接字抓取数据链路层上IEC61850-9-2(LE) SV数据包并显示的参考程序
目标:在linux下使用C语言的原始套接字来接收以太网数据链路层上的数据,并原创 2014-09-15 17:54:31 · 4649 阅读 · 3 评论 -
Linux下使用RAW SOCKET原始套接字构造UDP原始数据帧广播到局域网,在局域网的另一台计算机上显示UDP发送的信息
因为使用IEC61850需要直接访问以太网数据链路层原创 2014-09-12 15:48:57 · 7127 阅读 · 0 评论 -
Linux C中读取/dev/input/event设备来判断键盘按键是否按下
code:#include #include #include #include #include #include #define DEV_PATH "/dev/input/event2" //difference is possibleint main(){ int keys_fd; char ret[2]; struct input_event t; ke原创 2014-09-23 15:49:37 · 23334 阅读 · 5 评论 -
Linux C raw_socket (原始套接字)
我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等。通过原始套接字,我们可以抓取所有发送到本机的IP包(包括IP头和TCP/UDP/ICMP包头),也可以抓取所有本机收到的帧(包括数据链路层协议头)。普通的套接字无法转载 2014-09-11 15:46:10 · 18677 阅读 · 0 评论 -
C/ C++变量和函数混合调用
C++与C变量或函数的混合调用分类: C/C++ 2012-12-23 10:37 513人阅读 评论(0)收藏 举报第一部分:C++调用C变量或函数如果我想在C文件中实现某些功能,在CPP文件实现对这些功能的调用,我该如何做呢?先将程序贴出来,然后在分析:[cpp] view plaincopy// file name :转载 2014-03-23 17:51:14 · 740 阅读 · 0 评论 -
使用 Video4Linux 采集USB摄像头的图像,并保存到一张 jpg图像文件中的程序
最近想做一个 使用 video4linux2(注意不是 video4linux )采集 usb 摄像头上的图像的程序,网上找了一个源码,运行成功,分享过程。程序编译时直接使用 gcc -o test test.c就可以了。本人运行时所带参数:./test -r 2运行所生成的jpg图像文件:程序源代码:/* * V4L2 video capture example转载 2014-03-21 22:52:43 · 6277 阅读 · 2 评论 -
如何区别c/c++中的#typedef 和 #define的区别
#typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量, 到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如 #define INT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语转载 2013-09-13 15:25:12 · 1041 阅读 · 0 评论 -
51单片机驱动1602液晶显示器的小例子
首先附上1602的相关资料:引脚功能:1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:原创 2013-09-24 21:47:32 · 30631 阅读 · 5 评论 -
Tiny6410 + Linux2.6.38 按键驱动改写和说明
四个按键分别接在GPN11, GPL8, GPL9, GPL10原创 2014-11-14 16:45:10 · 1305 阅读 · 0 评论 -
Tiny6410 + Linux2.6.38 + input子系统 + 按键中断模拟系统键盘输入的例程
Linux下使用按钮来模拟键盘中“Left"转载 2014-11-17 18:49:15 · 1692 阅读 · 0 评论 -
Linux驱动之内核定时器驱动设计
转载自:http://blog.chinaunix.net/uid-20937170-id-3048501.html我的环境:Fedora 14 内核版本为2.6.38.1开发板:ARM9 TQ2440移植内核版本:linux-2.6.30.4定时器在linux内核中主要是采用一个结构体实现的。但是需要注意定时器是一个只运行一次的对象,也就是当一个定时器结束以后,还需转载 2015-10-19 09:22:16 · 744 阅读 · 0 评论 -
一个支持tcp多客户端连接的例子,轻松认识linux select函数的基本原理和使用方法
这本是libmodbus-3.0.6中的一个例子,觉得是学习select很好的例子,注释了一下分享出来!#include #include #include #include #include #include #include #include #include #include #define NB_CONNECTION 5modbus_t *ctx = N原创 2015-08-28 17:22:54 · 4365 阅读 · 0 评论 -
Linux信号与定时器
转载自:http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.htmllinux定时器今天看书看到了关于alarm的一些用法,自己有在网上找了些资料看了下;1。alarm()执行后,进程将继续执行,在后期(alarm以后)的执行过程中将会在seconds秒后收到信号SIGALRM并执行其处理函数。#i转载 2015-05-12 09:50:16 · 822 阅读 · 0 评论 -
SQLite3 C语言API使用说明
转载自:http://www.blogjava.net/xylz/archive/2012/09/25/388519.htmlSQLite3 C语言API入门下载SQLite3我们下载sqlite源码包,只需要其中的sqlite3.c、sqlite.h即可。(说明:libsqlite3.so是从sqlite3.c编译而来的, sqlite3可运行文件是从shell.c编译而转载 2015-04-20 15:32:12 · 7024 阅读 · 1 评论 -
字符数组转单精度浮点型数的方法(hex to float)
网上直接给出了下面的方法:char m[]={0x11, 0x22, 0x33, 0x44};float f=*((float *)m); //这儿的float占4个字节经本人测试,上面的方法在原理上是完全正确的。但是,请注意!不同的系统对于发送来的字节的顺序可能不同,在modbus中的字节顺序为:modbus发送来的顺序为:{0x84, 0x31, 0x43原创 2015-03-27 19:13:53 · 10230 阅读 · 2 评论 -
数值比较应该注意的一点
如下的程序:short m=0xFFFF;if((unsigned)m == (unsigned)0xFFFF){ printf("YES\n");}else{ printf("NO\n"); printf("m=%u, 0xFFFF=%u\n", (unsigned)m, (unsigned)0xFFFF);}输出的结果看似应该为“YES”,实际上的输出原创 2015-02-27 20:13:17 · 849 阅读 · 0 评论 -
Linux的原子操作与同步机制
Linux的原子操作与同步机制 并发问题现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++;”在未经编译器优化时生成的汇编代码为。当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问题。假设count变量初始值为0。进程1执行完“mov eax, [count]”后,寄存器eax内保存了count的转载 2014-12-01 16:58:21 · 2664 阅读 · 1 评论 -
在不同平台修改默认栈大小
在应用程序我们经常需要定义大的数组,数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。那么如何修改系统默认的栈的大小呢。一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可转载 2014-11-26 16:58:42 · 4932 阅读 · 1 评论 -
Ubuntu(pc)中部署boa服务器
部署详细步骤如下:1.到http://www.原创 2014-11-19 17:09:06 · 3534 阅读 · 0 评论 -
C语言中怎样判断一个整形数是有符号数还是无符号数
原理:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。实例代码:#include #include int main(){ int i=100; int j=-1; if(i<0){ printf("i 是有符号数\n"); }else{ if((j-i)>0){ //如果i是无符号数,则在计算过程中j就原创 2013-09-21 13:15:47 · 6311 阅读 · 0 评论 -
C语言中定义结构体的几种方法
结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:1) 先定义结构体类型,再定义结构体类型变量:struct stu / *定义学生结构体类型* /{ char name[20]; / * 学生姓名* / char sex; / * 性别* /转载 2013-09-21 12:11:18 · 28990 阅读 · 3 评论 -
关于linux移植时Resetting CPU ...的问题(在我的系统中可行,已验证)
这两天移植做linux的移植,遇到的问题也很多,其中有一个问题就是移植uImage以后不断的Resetting CPU ...的问题。首先,内核配置好以后,我们会先生成一个zImage的文件,但为了支持u-boot启动,我们还得制作uImage。 我的过程如下:(1)内核配置好以后:linux-q4mf:/home/fangdong/linux #make zImage // 这一步转载 2013-05-26 09:34:48 · 4106 阅读 · 0 评论 -
Linux内核修改:将2440串口UART2(红外端口)更成普通串口驱动
<!--p {margin-bottom:0.21cm; direction:ltr; color:rgb(0,0,0); text-align:justify}p.western {font-family:"Times New Roman",serif; font-size:10pt}p.cjk {font-family:"宋体","SimSun";转载 2013-05-25 11:45:34 · 3982 阅读 · 0 评论 -
在linux-2.6.33.5内核中添加对s3c2410串口2的配置
这几天,突然发现移植好的s3c2410的串口2在linux系统下竟然不能用,赶紧查了很多资料,发现,若要在linux系统下是用s3c23410的串口2 ,需要修改内核,把s3c2410的串口2配置成普通的串口。 1.修改arch/arm/mach-s3c2440/mach-smdk2440.c中的uart2的配置,修改后如下: static struct s3c2410_ua转载 2013-05-25 21:08:27 · 1343 阅读 · 0 评论 -
<stdlib.h>中的随机数产生函数rand,random,srand,srandom的一些知识
1、int rand()产生一个从0到最大整数之间的一个随机数,但是每次程序启动后产生的随机数在时间顺序上都是一样的。如:#include #include int main(){ while(1){ int i=rand(); printf("%d\n",i); sleep(1); }}运行结果:2、long int random原创 2013-05-24 21:04:42 · 6131 阅读 · 0 评论 -
C语言线程实例(生产者和消费者)
附上代码,作为以后的参考。/***********main.c************/#include "customer.h"#include "producer.h"#include "data.h"#include #include /*******************************************************************原创 2013-05-24 21:32:13 · 26064 阅读 · 0 评论 -
C语言宏定义中的#,##,#@及\符号的作用
1、# (stringizing)字符串化操作符 作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串。其只能用于有传入参数的宏定 义中,且必须置于宏定义体中的参数名前。 如:#define example(instr) printf("the input string is:\t%s\n",#instr)#define e转载 2013-04-22 18:51:00 · 1978 阅读 · 0 评论 -
C语言指针字符串和数组字符串的一点区别
在ANSI C中,初始化指针时所创建的字符串常量被定义为只读。如果试图通过指针修改这个字符串的值,程序就会出现未定义的行为。在有些编译器中,字符串常量被存放在只允许读取的文本段中,以防止它被修改。数组也可以用字符串常量进行初始化: Char a[]=”abcdefg”; 如指针相反,由字符串常量初始化的数组是可以修改的。其中的单个字符在以后可以改变。原创 2013-04-06 19:39:24 · 2824 阅读 · 0 评论 -
java本地方法调用(JNI)的参考代码----实现将String转换成char*,将char*转换成String.
首先建立Test.java,然后使用javac Test.java编译的到Test.class,然后再使用javah -jni Test得到Test.h,然后建立Test.c并且include “Test.h"并实现相应的本地方法。这些步骤做好之后使用如下命令将Test.c编译成动态链接库: gcc -c Test.c gcc -shared -fPCI -o libtest.原创 2013-03-31 21:30:24 · 1444 阅读 · 0 评论 -
理解C语言指针和数组的关系的代码
在C语言中,数组和指针密切相关,几乎可以互相使用。数组名字可以认为是常量指针,它指向存放数组第一个元素的内存地址。指针可以用于完成任何涉及数组下标的操作。数组下标表示法在编译期间将转换为指针表示方法,所以用指针方式来书写数组下标表达式可以节省编译时间。 下面的例子便于理解指针和数组的关系: #include int main(){ int a[]={1,原创 2013-03-13 11:04:45 · 1192 阅读 · 0 评论 -
linux C串口常规设置参考
据通信的基本方式可分为并行通信与串行通信两种。· 并行通信是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求传输速度较高的应用场合。· 串行通信是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。串口设置详解本节主要讲解设置串口的主要方法。转载 2013-05-25 20:00:40 · 22475 阅读 · 2 评论 -
linux内核移植生成uImage映象文件参考
1、先修改顶层Makefile,如下:ARCH ?= $ (SUBARCH)CROSS_COMPILE ?=改为:ARCH ?= armCROSS_COMPILE ?= arm-linux-2、执行make s3c2410_defconfig3、make uImage,转载 2013-05-25 21:38:00 · 4713 阅读 · 0 评论 -
vc和gcc对C语言数据类型长度的定义
vc2010中......测试代码:#include #include int main(){ printf("in windows ...\n"); int l_char=sizeof(char); printf("char ----> %d\n",l_char); int l_int=sizeof(int); printf("i原创 2013-09-20 21:40:15 · 3122 阅读 · 0 评论 -
C语言文件操作函数大全
C语言文件操作函数大全clearerr(清除文件流的错误旗标)相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf转载 2013-09-20 18:30:10 · 990 阅读 · 0 评论 -
C语言中const关键字的一点知识
C语言中const代表着”不可变“,基本和常量一样不可修改,但是应用场景不一样。 一.应用在变量const char a='A';a='B'; //错误,变量a的值不可以修改。此时代表变量a值不可改变,任何企图修改a变量值的语句(例如a=20;)都会报错。 二.应用在指针 1)应用在*左边 const char *p; char const转载 2013-09-18 14:13:08 · 1064 阅读 · 0 评论 -
C语言中static关键字的一点知识
static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'转载 2013-09-18 14:05:12 · 898 阅读 · 0 评论 -
TLV5616(12位D/A转换芯片)单片机驱动
代码如下:#include #include #define uchar unsigned char#define uint unsigned int void tlv5616_da(uint da);sbit tlv5616_clk=P1^1;sbit tlv5616_data=P1^0;sbit tlv5616_cs=P1^3;sbit tlv5616_fs=P1^2原创 2013-09-04 15:00:37 · 5542 阅读 · 1 评论 -
register_chrdev_region()和registe_chrdev()
register_chrdev_region()和registe_chrdev() 分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下: extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号extern int alloc_chrdev_region(dev_转载 2013-09-02 20:19:58 · 1127 阅读 · 0 评论