自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Deep_l_zh的博客

敏于思而慎于言

  • 博客(140)
  • 资源 (5)
  • 收藏
  • 关注

原创 linux应用编程笔记(15)消息队列编程

摘要: 总结了消息队列的定义,详解了使用消息队列的常用函数,最后给出一个实例加深理解。一、什么是消息队列    由于linux早期的通信机制只有信号量,但是信号量所能够传递的数据量非常小,并且管道只能传送无格式的字节流,这样就越来越不能满足应用编程的需求,于是消息队列被开发出来克服了这些缺点。    消息队列本质是一个消息链表,可以把消息看做一个记录,其具有特定的格式,进程可以

2015-12-09 17:38:45 553

原创 C语言学习笔记(19) 多维数组和多维指针分析

摘要:总结了指向指针的指针的用法,以及这样使用的意义,分析了二维数组名,二维数组和二级指针的用法,文中用多个相关实例加深理解。一、指向指针的指针    我们都知道,指针其实也是一个变量,只是里面存放的是地址而已,所以指针本身也是有地址的,既然有地址,那么就可以用另外一个指针去存放,于是就有了指向指针的指针。    1.指针变量在内存中会占用一定的内存空间。    2.可以定

2015-12-07 16:34:25 834

原创 linux应用编程笔记(14)共享内存编程

摘要: 总结了共享内存的定义,给出了使用共享内存的使用步骤,分析了使用共享内存需要使用的shmget,shmat,shmdt,shmctl函数,最后给出一个实例加深理解。一、什么是共享内存   这个字面意思其实就已经很好理解了,就是多个进程共享同一块内存,这个我们一个进程往这个内存中写入一定的数据,其他进程就可以立即受到反馈,可以去读取,访问,或者作出什么修改。共享内存就是被多个进

2015-12-03 11:18:11 916

原创 C语言学习笔记(18) 指针数组和数组指针分析

摘要:总结了指针数组和数组指针的定义,以及main函数的入口参数的意义,每一个部分给出一个例子加深理解。一、三个问题   1.一维数组名代表了数组首元素的地址,二维数组名呢?    我的理解也是的,但是数组首元素的地址。    2.假设数组名为a,那么a和&a的地址值相同,意义不同,那么指向它们的指针类型相同吗?    答案是不同,这一点下面会解释到,因为a和&a的

2015-11-30 22:10:05 3131 2

原创 linux应用编程笔记(13)信号量同步编程

摘要: 总结了进程间同步的机制,如何利用同步机制处理消费者和生产者的问题,最后用实例加深了理解。一、什么是进程间的同步    进程间的同步,指的是一组并发进程,相互合作,相互等待,使得各自按照一定的顺序执行的过程称为进程间的同步。二、生产者消费者的问题    这个问题的描述如下:有一群生产者进程在生产消息,并将此 消息提供给消费者进程去消费。为使生产者进程和消费者进

2015-11-26 21:50:51 729

原创 linux应用编程笔记(12)信号量详解及互斥编程

摘要: 总结了信号量的机制,以及各个信号量操作的函数,最后通过公示栏问题,将信号量机制引入加深了理解。一、什么是信号量    信号量的主要用途是保护临界资源,进程根据信号量用于判断能否访问某些共享资源,除了用于访问控制以为,还可以用于进程间的同步。当信号量的值只能取0或者1的时候,叫二值信号量,当可以取任意非负值的时候叫做计数信号量。二、公示栏问题    有一个公示栏,甲乙

2015-11-26 21:10:53 876

原创 C语言学习笔记(17) 数组和指针分析

摘要:总结了数组的本质,通过实例阐述了a+1和&a+1的区别,指针的关系,比较运算,指出为什么只能进行相减运算及其意义,解释了数组与下标运算的优劣,解析了一道面试题,说明了数组和指针作为函数参数的时候需要注意的地方,最后总结了数组和指针的一些差别。一、数组的本质    数组是一段连续的内存空间,数组名指向数组首元素的地址。    数组占用的空间的大小为sizeof(array_

2015-11-19 16:30:55 817

原创 C语言学习笔记(16) c语言字符串分析

摘要:总结了字符串的概念,字符串长度的计算方法,尝试实现了strlen和strcpy函数,最后介绍了受限和不受限的字符串函数。一、字符串的概念    1.从概念上讲,c语言中并没有字符串这一类型,它使用字符数组末尾加’\0’来模拟字符串。    2.C语言中的字符串是以’\0’结尾的字符数组。    3.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区。这里的字符

2015-11-16 12:29:09 1894

原创 c语言学习笔记(15) 数组基础

摘要:总结了数组的概念,数组大小的计算方法,数组地址和数组名的关系,数组存在的一些盲点,最后用一个BUG实例对数组和指针的一个差别进行了分析。一、数组的概念    数组是相同类型变量的有序集合,比如我们定义一个数组int a[5],那么这个数组名字就叫a,a就代表数组元素中的第一个元素的起始地址,这个数组里面有五个元素,每个元素都是int类型的,其中a[0],a[1],a[2],a

2015-10-20 17:52:03 672

原创 linux应用编程笔记(11)信号通信

摘要: 总结了信号处理流程,信号种类,以及信号处理函数,最后给出一个实例加深理解。一、信号处理流程    信号是Linux当中一种很古老的进程间的通信机制,通信的流程为:    第一步:进程A选择信号;    第二步:进程A发送信号;    第三步:进程B处理信号。二、信号种类    Linux当中的信号类型有很多种,目前应该是有63种,前31种不支持排

2015-10-19 10:37:32 915

原创 c语言学习笔记(14)指针基础

摘要:总结了指针的本质,*的意义,以及传值调用和传址调用的根本区别,利用两个例程加深了理解。一、指针的本质    指针的本质也是一个变量,只是它里面存放的是一个内存的地址,指针也是需要占用内存空间的,按照平台不同,32位指针变量占四个字节,64位的话一般是8个字节,不同类型的指针变量都是这样。这是因为,我们指针既然是存放的内存的地址,那么理论上我们可以指向系统当中的任意一个内存,既

2015-10-16 20:06:49 666

原创 linux应用编程笔记(10)有名管道编程

摘要: 总结了有名管道和普通文件的区别,有名管道的各种操作函数,最后给出一个读写实例加深理解。一、有名管道    有名管道FIFO被创建之后,操作和文件类似,和有名管道一样,数据写进去读走,读走之后就没有了,不同的是以下两点:    1.读取Fifo文件的进程只能以”O_RDONLY”方式打开fifo文件。    2.写Fifo文件的进程只能以”O_WRONLY”方式打开f

2015-10-15 17:10:34 758

原创 linux应用编程笔记(9)无名管道编程

摘要: 总结了Linux下进程通讯目的,通讯方式,IPC的概念,分析了管道和无名管道的使用方法,最后通过一个实例加深理解!一、Linux进程通讯目的    Linux是一个多进程系统,各个进程之间会存在通讯的问题,通讯的目的有以下几种:    1.数据传输    一个进程需要将数据发送给另一个进程。    2.资源共享    多个进程可能会共享同一块内存上的数据。

2015-10-15 13:03:39 560

原创 c语言学习笔记(13)pragma详解,#和##运算符及编译指示字总结

摘要:总结了#error,#line的意义和用法,#和##运算符的用法,分析了pragma在控制内存对齐机制时候的用法,总结了struct在内存中的对齐方式,最后用一个面试题加深理解。一、#error和#warning    #error用于生成一个编译错误消息,并停止编译,该指示字用于指示程序员自己定义的错误信息。    #warning用于生成警告信息,但是不会停止编译。

2015-10-14 22:08:52 1066

原创 linux应用编程笔记(8)多进程程序设计

摘要: 总结了进程控制理论,getpid的用法,多进程程序设计中创建进程,等待进程,退出进程,fork和vfork的区别,exec函数族的用法,每个总结给出一个实例加深理解。一、进程控制理论    关于进程的互斥,同步,竞争,死锁,调度策略,优先级等,之前有一篇帖子已经介绍了,链接地址如下:    http://blog.csdn.net/deep_l_zh/article/d

2015-10-13 16:19:14 580

原创 c语言学习笔记(12)条件编译使用分析

摘要:总结了条件编译和if else的区别,#include在包含头文件时候的注意点,使用条件编译避免重复包含头文件,最后给出一个实例加深理解。一、什么是条件编译      我们在移植u-boot和linux内核的时候,经常会看到#ifdef…#endif或者#ifndef…#endif这样的代码,这个就是条件编译,总的来说:    1.条件编译行为类似if…else,都是条件

2015-10-11 21:15:16 956

原创 linux应用编程笔记(7)时间编程

摘要:介绍了Linux下时间编程的两个时间类型,以及常用的api函数和用法,最后用一个例子进行了加深理解。一、两个时间类型    1.格林威治时间:Coordinated Universal Time(UTC)是世界标准时间,即常说的格林威治标准时间(GreenwichMean Time,GMT).格林威治时间和我们本地时间是不一样的。    2.日历时间:日历时间(Calen

2015-10-10 16:24:37 631

原创 c语言学习笔记(11)宏定义使用与分析

摘要:总结了宏常量的用法,宏表达式及其与函数的优势对比,宏常量和表达式作用域,最后使用内置宏给出了一种编写使用日志宏的方法。一、宏常量    1.#define宏常量可以出现在代码的任何地方。    2.#define从本行开始,之后的代码都可以使用这个宏常量。    3.#define宏常量可以使用接续符来定义比较长的常量。    例如以下定义,编译器是不会报错的:

2015-10-10 00:17:47 670

原创 linux应用编程笔记(6)库函数方式实现文件复制编程

摘要:介绍了库函数文件编程常用的函数,打开,关闭,写,读,定位等,最后通过一个实例将这些函数都运用了一边,加深理解。一、库函数文件编程常用函数    1.fopen(打开文件)    头文件 #include    定义函数 FILE * fopen(const char * path,const char * mode);    函数说明 参数path字符串包含欲打开

2015-09-30 19:19:28 1587

原创 c语言学习笔记(10)编译器编译过程分析

摘要:总结了编译器编译的整个过程以及链接器的职责,分别介绍了每一步具体做了哪些事,最后通过一个实例演示了这个过程。一、整个编译过程描述    这里有一幅图,可以描述整个编译过程:    预处理:gcc –E file.c –o hello.i    1.处理所有的注释,以空格代替。    2.将所有的#define删除,并且展开所有的宏定义。    3.处理

2015-09-29 20:01:19 1044

原创 linux应用编程笔记(5)系统调用文件编程方法实现文件复制

摘要:介绍了系统调用文件编程常用的函数,以及学习这些函数的一般步骤,最后通过一个实例使用上述函数实现了文件复制功能。一、系统调用文件编程常用函数    创建    int creat(const char *filename, mode_t mode);    参数mode指定新建文件的存取权限。    打开    int open(const char *

2015-09-29 15:51:11 2891 2

原创 c语言学习笔记(9)优先级及类型转换分析

摘要:总结了c语言优先级易错的部分,隐式转换类型的规则,分析了一个实例。一、c语言易错优先级总结    如下表:优先级问题表达式实际结果.的优先级高于*,因此c引入了->消除该问题*p.f对p取偏移f,作为指针,然后进行解除引用操作*(p.f)[]高于*int *

2015-09-28 22:37:37 1582

原创 c语言学习笔记(8)位运算符,++,--运算符的用法

摘要:总结了位运算符,++,--运算符的用法,给出了一个使用异或方法巧解面试题的例子,分析了贪心法的规则。一、位运算符用法    c语言中的位运算符主要有以下几种:       使用的时候主要有以下几个注意点:    1.左移运算符将    2.右移运算符将>>将运算数的二进位右移,低位丢弃,高位补零。    3.避免位运算符,逻辑运算符和数学运算符出现在同

2015-09-28 17:45:33 5300

原创 linux应用编程笔记(4)静态函数库和动态函数库使用

摘要:总结了静态函数库和动态函数库的含义和用法,通过实例演示了制作静态函数库和动态库的过程。一、什么是静态库函数和动态库函数    linux当中进行编程的时候,我们会使用很多的函数,例如open,read等等,这些函数一部分由库函数提供,一部分是系统调用。函数库呢,主要分为静态函数库和动态函数库。    静态函数库:静态函数库我们需要的库会被编译到程序当中去,当程序运行起来之

2015-09-28 13:05:33 1442

原创 c语言学习笔记(7)单引号,双引号和逻辑符号的用法

摘要:总结了单引号,双引号和逻辑符号的用法,给出了两个实例便于理解。    其实这部分真的挺简单的,但是还是花时间总结下吧,加深理解。一、单引号和双引号使用    c语言中的单引号用来表示字符常量,双引号用来表示字符串常量。    比如’a’表示字符常量,在内存中占一个字节,’a’+1就表示’a’的ascii码+1,就是’b’。    比如”a”表示字符串常量,在内存中

2015-09-25 16:33:00 14960

原创 linux应用编程笔记(3)addr.c分析linux应用程序地址布局

摘要:通过编写一个例程addr.c,总结分析了linux应用程序的地址布局,包括代码段,数据段,BSS段,堆(heap)和栈(stack)的分布,分析了程序在运行之后,各个变量常量动态申请分配的内存分别在什么位置。一、程序的构成及内存分布    linux应用程序的构成包括:代码段,数据段,BSS段(未初始化数据段),堆和栈。    上面组成部分当程序在linux中运行的时候,

2015-09-24 16:32:05 886

原创 c语言学习笔记(6)注释符号,接续符号和转义符号的用法

摘要:总结了注释符号,接续符号和转义符号的用法,给出了几个实例便于理解。一、注释符号的用法    1.编译器会在编译过程删除注释,但不是简单的删除,而是用空格代替!    2.编译器认为,双括号括起来的都是字符串,双斜杠也不例外。    3.“/*…*/”这种类型的注释不能被嵌套。    4.编译器吧/*作为注释的开始,知道出现下一个*/为止。    下面来看一个问

2015-09-24 10:05:07 2388

原创 linux应用编程笔记(2)core dump分析内核链表使用后free出现的错误

摘要:介绍了core dump的功能,使用方法和步骤,最后用其分析了访问空指针,只读内存以及内核链表使用中出现的错误。一、core dump是什么    coredump又叫做核心转存,当程序在运行中出现错误的时候,发生异常,linux系统可以把出错时候的内容存储在一个core文件中,这个过程就叫做core dump。我们在有了这个文件之后,再联合gdb,可以找出错误,节省了人力和

2015-09-23 23:16:51 1660

原创 c语言学习笔记(5)enum和typedef分析

摘要:总结了enum和typedef的含义,以及他们和define的区别。一、enum是什么    enum是一种自定义类型,其默认的常量在前一个值的基础上加1,如果不给默认的常量赋值,那么第一个常量默认取0,后面依次加1,enum定义的变量,只能取定义时候的离散值。    可以编写程序验证,验证程序如下:#include enum colour{ gree

2015-09-23 21:26:26 1170

原创 c语言学习笔记(4)struct和union:柔性数组存储斐波那契数列以及union判断系统大小端

摘要:总结了空结构体所占内存大小的情况,分析了柔性数组的使用方法,利用柔性数组存储任意长度斐波那契数列,介绍了union和struct的区别,以及使用union判断系统大小端的模式。一、空struct所占内存大小    可以写一个程序验证一下,这里程序如下:#include struct _null{ }n1,n2; int main(void)

2015-09-23 11:26:44 1117

原创 linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误

摘要: 介绍了gdb调试器以及其使用流程,总结了常用的几个gdb调试命令,最后使用这些方法找出dgb.c文件中的错误。一、gdb简介    gdb是gnu发布的一款功能强大的程序调试工具,其主要功能有如下三个:    1.启动被调试的程序。   2.让被调试的程序在指定的位置停住。   3.当程序停住时,可以检查程序状态,例如变量的值。     我们在gcc编译

2015-09-22 16:55:01 5394

原创 c语言学习笔记(3)const和volatile以及const volatile int i=0分析

摘要: 分析了const和volatile的意义,const修饰数组,指针,函数参数和返回值的用法,最后解释了const volatile int i=0这个问题。一、const修饰变量的意义    在c语言中,const修饰的是只读变量,并不是一个常量,本质还是一个变量。const修饰的变量会占用内存空间,本质上const只对编译器有用,它告诉编译器,这个变量是只读的,不能对其进

2015-09-22 12:22:48 4874

原创 c语言学习笔记(2)goto,void,extern和sizeof分析

摘要: 分析了goto的副作用,void的意义,void的指针类型的意义和用法,实现了memset,总结了extern的意义和使用方法,最后分析了sizeof的意义和用法。一、为什么不用goto    因为goto有可能跳过我们程序中需要执行的部分,破坏了结构化程序顺序执行的思路,在现代c当中已经越来越少的使用goto,而且最好剔除掉。可以看下面一段程序:#include

2015-09-21 18:37:58 992

原创 c语言学习笔记(1)基本数据类型及auto,register,static分析

摘要: 解释了c语言中什么是数据类型,什么是变量,他们的真正含义是什么。分析了属性关键字auto,register和static的用法。一、什么是数据类型    刚看视频的时候,我也理解为就是char,int这些东西,其实这些东西也是指定了我们后面变量他所占的内存的大小,所以数据类型其实是固定内存大小的别名。数据类型又是创建变量的模子。    比如我们char a;a是我们用模

2015-09-20 18:29:11 1352

原创 Linux2.6.32驱动笔记(4)ioctl方法解析及mini2440-led驱动实现

摘要: 介绍了字符设备驱动的控制方式——ioctl,同时利用该方式在mini2440上实现led驱动。驱动中,除了read,write,open,close之外,还有很多的访问方式,其中对于设备的控制,ioctl是一种重要的方式。一、ioctl函数    int ioctl(int fd,unsigned long cmd,…)    fd:要控制的设备文件描述符

2015-09-18 18:26:04 1943

原创 Linux2.6.32驱动笔记(3)分析应用程序read访问驱动过程

摘要: 利用objdump反汇编编译好的应用程序,分析了应用程序程序中调用read时时候,如何一层层的找到驱动中我们自己实现的对应的read方法。一、反汇编编译好的应用程序之前有一个读的应用程序read-mem.c,具体内容如下:#include #include #include #include  int main(){    intfd = 0

2015-09-17 23:13:55 786

原创 Linux2.6.32驱动笔记(2)字符设备驱动编程模型

摘要:如何安装使用字符设备驱动,总结了字符设备驱动编程模型,初始化,注册等,最后分析了file_operations。一、如何安装使用字符设备驱动    参见内核模块,比如有一个驱动叫led.ko    # insmodled.ko    创建设备文件节点,我们应用程序看驱动也是当做文件一样,这个设备文件节点就是这个作用。一般有两种方法,一种是相当于动态地,一种是静态的,我

2015-09-17 11:44:12 834

原创 Linux2.6.32驱动笔记(1)驱动开发概述及硬件访问技术

摘要:介绍了linux下驱动的分类和学习方法,描述了linux下硬件访问的思路和具体实现方法。一、linux下设备驱动分类     linux系统的设备常规分为字符设备(char device),块设备(block device)和网络设备(network device),对应的驱动也分为这三类。    字符设备:字符设备是一种按照字节来访问的设备,并且存取时没有缓存设备。这样的驱动通

2015-09-14 16:10:04 768

原创 Linux2.6.32内核笔记(6)系统调用

摘要:解释了什么是系统调用,分析了系统调用的具体流程,在内核中实现一个自己定义的系统调用。

2015-09-14 09:09:48 1264

原创 Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表

摘要:将内核链表移植到应用程序中,实现创建,添加节点,遍历,删除的操作。        首先复习一下内核链表中经常使用的几个函数,在/include/linux/list.h中。        创建链表:INIT_LIST_HEAD()staticinline void INIT_LIST_HEAD(struct list_head *list){ list->ne

2015-09-12 11:47:41 982

speex win(vs2013)工程C源码

工程包含aec,denoise和resample c源码和输入测试文件

2022-10-31

cortexa7+armv7a+gic400中断手册

cortexa7+armv7a+gic400+imx6ul官方数据手册,做chip bring up的时候用到

2018-12-19

xilinx zynq axi总线资料

xilinx zynq axi总线资料,包括axi总线的官方手册,axi总线的使用说明

2018-11-26

Xilinx_SDK_2017.4_LINUX(64位)

xilinx sdk 2017.4 在ubuntu14.04下安装成功,可以编译xilinx下zynq开发板的linux和uboot

2018-02-09

zynq/zedboard/xlinx 学习例程及笔记

该资源包含了使用ZYNQ7000进行开发的搜集的简单易学,适合新手的例程和资料。

2016-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除