自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

转载 linux下多线程与互斥锁编程实例

#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h>#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number=0, i;void *thread1(){ printf ("thread1 : I'

2017-09-02 17:07:20 1982

原创 循环buffer

循环buff即循环缓冲区,顾名思义,就是可以不断写不断读的一个局域,在缓冲区写满之后,如果还没有读取就不能继续写了,否则会把原来的覆盖掉。所以说这是个循环读写的过程,写指针写一个字节移动一次,读指针读一个字节移动一次,移动到buff的末尾位置,又从开始位置进行读写。重点代码分析:1、计算空闲空间/数据空间大小:设定总空间为size-1,始终保留1个字节来表示buff已满。先看看负数的二进制我们来求-

2017-08-27 16:52:03 5358

原创 锁、PV操作、进程互斥与同步的实现

什么是临界区? 每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。 一、锁机制:1、锁:在多线程编程中,操作系统引入了锁机制。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。加锁过程用如下伪码表示: 1、read loc

2017-08-20 21:25:18 21292 4

原创 根文件系统树的制作及详解

制作的文件系统用于的平台:fl2440(ARM9)一、嵌入式Linux文件系统简介1、基本概念:  linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统 进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux启动时,

2017-08-16 15:18:03 1902 2

原创 C语言经典编程题

一、递归求一个数的阶乘:int factorial(int n){ while (n > 1) { return n*func(n-1); }}当然也可以不用while循环,因为都是n级运算,算法复杂度都为O(n),所以影响不大。int factorial(int n){ if(n == 0) { return 1;

2017-08-11 20:21:53 50419 6

原创 二叉树的基本操作

一、树:树 :一种非线性数据结构树的应用:操作系统中:用树表示文件目录组织结构编译系统中: 用树表示源程序语法结构 相关概念常见表示方法:树有且仅有一个根节点树的结构定义是一个递归的定义树可以看做一个集合,每个集合下面又有很多子集合,所以单节点与子树之间可以表示为 T={跟结点,左孩子,右孩子} -实例:T1 ={A,B,C}当然,树还可以用括号表示,这样更加容易看上图可表示为:(A

2017-08-05 15:05:53 664

原创 单向链表的基本操作

一、链表与数组:  首先,我们来看看为啥我们有了数组,还需要链表呢?那么我们来看看链表与数组的区别。二者都属于一种数据结构: 从逻辑结构来看:1、 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。2、 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据

2017-08-02 16:53:53 538

原创 常见字符串函数的实现过程

一、strlen()函数求字符串长度,不包括 ‘\0’unsigned int mystrlen( char *s ){ unsigned int len=0; while(*s != '\0') { s++; len++; } return len;}二、字符串追加函数strcat( ):char *mystrcat(ch

2017-07-30 20:55:56 430

原创 排序算法——桶排序、冒泡排序、快速排序、选择排序

一、桶排序:最快最简单的算法,但是因为要借助辅助内存(数组),所以占用空间,如果要对很多数据排序就不太合适。 一个旗子表示该数出现过一次。#include <stdio.h>int main(){ int book[1001],i,j,t,n; for(i=0;i<=1000;i++) { book[i]=0; } scanf("%d"

2017-07-27 20:33:17 1607

原创 递归与栈

登斯楼也,则有去国怀乡,忧谗畏讥,满目萧然,感极而悲者也。                             ——《岳阳楼记》一、递归:  简单来说,递归就是自己调用自己,然后一层一层的返回。   所有for循环都可以用递归来做。废话不多说,直接上例题:1、实例1: 50个台阶,一次只能走一步或者两步,问有多少方法到达第10个台阶? 解决这个方法,我们首先要找到数学规律: f(1

2017-07-25 10:30:13 3248

原创 C语言编程实战——编写简单贪吃蛇程序

心之何如,有似万丈迷津,遥亘千里,其中并无舟子可渡人,除了自渡,他人爱莫能助。                           —-三毛 编程环境:VC++一、相关结构体以及函数:1、Windows下坐标结构体COORD:  COORD是Windows API中定义的一种结构,表示一个字符在控制

2017-07-24 15:05:28 3970 1

原创 Wireshark抓包工具使用以及数据包分析

多年之后,愿你有清风与烈酒,也有人是你的归途。打开Wireshark抓包工具开始抓包会看到如下展开内容: 这里我是对wlan进行抓包,192.168.2.112是我当前wifi的ip地址。点击某个包,可以查看具体内容,差不多刚好对于五层协议:Frame:物理层的数据帧概况。Ethernet II:数据链路层以太网帧头部信息。Internet Protocol Version 4:互联网层I

2017-07-06 11:06:31 58214 8

原创 Linux下网络socket编程——实现服务器(select)与多个客户端通信

一、关于socket通信服务器端工作流程:调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定调用listen()函数监听socket() 函数创建的套接字,等待客户端连接 当客户端请求到来之后调用 accept()函数接受连接请求,返回一个对应于此连接的新的套接字,做好通信准备 调用 write()/read() 函数和 send()/recv(

2017-06-23 14:44:37 11416 2

原创 SIM5360E模块ppp拨号上网

愿你有清风与烈酒,愿有人是你的归途。主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询) 开发板平台: fl2440 Linux内核版本: linux-3.0 .54 模块:sim5360e该模块支持WCDMA/GSM,

2017-06-21 19:41:47 2088

原创 RT3070无线网卡AP模式——开发板实现路由功能

RT3070无线网卡有两种工作模式STA模式和softAP模式,分别由STA驱动和softAP驱动来实现,STA驱动支持无线网卡工作在STA模式下,可以连接到网络实现上网功能。而SoftAP的驱动支持无线网卡工作在softAP模式下,可以作为一个软的接入点,实现无线路由器功能。 之前进行STA模式的驱动移植,使得我们的开发板能够连接到互联网实现上网功能。这里对RT3070的第二种工作模式即

2017-06-06 17:25:56 3959

原创 RT3070 STA模式——开发板实现上网功能

北方有佳人,遗世而独立。 北方有佳人,绝世而独立。 一顾倾人城,再顾倾人国。 宁不知倾城与倾国? 佳人难再得!交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询) 开发板平台: fl2440 rtl3070中文名称为雷凌3070,是台湾

2017-06-04 16:05:13 802

原创 安信可A7模块GPS——编程获取GPS经纬度信息

帝子降兮北渚,目眇眇兮愁予。袅袅兮秋风,洞庭波兮木叶下。 ——屈原《湘夫人》

2017-05-25 13:22:23 3438 1

原创 GPS数据解析以及模块连接开发板

入不言兮出不辞, 乘回风兮载云旗。 悲莫悲兮生别离, 乐莫乐兮新相知。                                                                                                                                               -----《九歌·少司命》

2017-05-24 15:52:18 14904 2

原创 安信可A7模块介绍,以及GPRS基本测试命令

一、模块介绍:         电源开关打开后,按PWR_KEY(模块启动按钮)按键1s以上启动内核(类同于手机开机)。二、模块连线       首先,我们在PC上调试,用我们的串口线的TXD与A7模块的RXD相连,串口线的RXD与A7模块的TXD相连,GND与GND相连。连接方式如下图所示:      三、打开串口调试:

2017-05-14 16:16:05 5131 1

原创 DB9串口管脚详解

一、公头和母头:DB9是9针的串口线,分为公头和母头。公头:泛指所有针式的接头(5针朝上,从左到右依次是1~9)母头:泛指所有插槽式的接头(5针朝上,从右到左依次是1~9)二、各管脚的功能:1 、DCD( Data Carrier Detect) :载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在

2017-05-13 08:50:29 59872 1

原创 linux下shell脚本的使用——安装madplay播放器,sed函数详解

今日诗词推荐  ——青玉案·元夕,由南宋著名抗金将领辛弃疾所作。东风夜放花千树,更吹落、星如雨。宝马雕车香满路,凤箫声动,玉壶光转,一夜鱼龙舞。 蛾儿雪柳黄金缕,笑语盈盈暗香去。众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。        进入正题,之前已经在移植uda1341声卡的时候,顺便安装了madplay播放器,不过都是一步一步做的,而且源码包也是楼主从网上找的,下载好了

2017-04-27 11:36:59 1998 1

原创 platform按键驱动(二)——编程测试实例以及select()函数详解

一、测试程序:    之前对按键驱动程序原理大概进行了分析,那么现在给出测试程序了。。。/********************************************************************************* * Copyright: (C) 2017 qicheng * All righ

2017-04-18 16:06:57 3544

原创 Linux下基于fl2440开发板platform按键驱动详解(一)

===============================================操作系统:center os 64位平台:fl2440内核版本:Linux 3.0.54交叉编译器版本:2012.08===============================================#include "s3c_driver.h"

2017-04-18 14:59:16 510

原创 Linux下基于Platform总线led驱动学习(一)

===============================================操作系统:center os 64位平台:fl2440内核版本:Linux 3.0.54交叉编译器版本:2012.08===============================================       通常情况下,Linux设备和驱动通常

2017-04-07 12:01:14 800 1

原创 Linux下fl2440之led驱动编写以及测试

===============================================操作系统:center os平台:fl2440内核版本:linux 3.0.54交叉编译器版本:2012.08===============================================驱动:       程序即添加到操作系统中的一小块代码,其中包含有关硬件设

2017-04-06 20:43:55 985

原创 tiny4412内核自带led驱动分析

内核版本:linux-3.5 平台:tiny4412一、关于混杂设备此版本内核led驱动使用的是混杂设备misc,具体misc.c的实现路径:linux-3.5/drivers/char/misc.c这就很大程度简化了我们的驱动代码,没有发现ldd3中提到的各种字符设备注册函数,而是发现了一个misc_register函数(共用的注册函数),这说明led设备是作为杂项设备出现在内核中的,在内核中,

2017-11-11 12:37:04 1184

转载 判断一个链表是否有环,并且找出入口点

1.如何判断是否有环?如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈。2.如何计算环的长度?第一次相遇(超一圈)时开始计数,第二次相遇时停止计数。3.如何判断环的入口点:碰撞点p到连接点的距离=头指针到连接点的距离,因此,分别从碰撞点、头指针开始走,相遇的那个点就是连接点。为什么呢?需要一个简单的计算过程: (1)当fast与slow相遇时,sho

2017-09-28 10:06:33 568

原创 内存泄漏、越界、溢出

一、内存泄漏:常见内存泄漏情况:1、while循环中,不断用malloc( )分配内存并且没有free( )。 2、线程中存在malloc()没有调用free(),而线程一直开启。3、文件描述符没有close()4、数据库的读表操作,读取了表但是没有释放数据表指针指向的空间。二、越界与溢出:溢出:超过类型值 越界:下标short int a;a=32767;a++;//溢出char

2017-09-21 18:36:42 1355

原创 C语言编译、链接过程

这些天遇到关于编译与链接的问题,所以根据网上资料写下了对这个过程进行简单梳理!一、编译过程: 预处理 -->编译-->汇编1、预处理: 完成对源程序的“替代”工作,主要对头文件宏定义,特殊字符处理2、编译: 对语法进行差错,分析是否符合规则,然后翻译成汇编代码。3、汇编: 把 汇编代码--->目标机器代码 的过程。目标代码通常有两个段组成:代码段:该段中包含主要的程

2017-09-08 15:08:43 1265

原创 结构体对齐(图解)与位域

一、结构体对齐 在计算结构体大时往往需要考虑到结构体对齐,简单的总结下我的一些经验。  结构体对齐时,先找出本结构中最大类型的长度,先考虑自身对齐,然后在与最大类型对齐,最后考虑整个结构对齐(与最大类型长度对齐),下面用图解法进行分析:例:(64位系统,模数最大为8,所以结构体最大对齐值为8 ; 32位系统为模数为4,结构体对齐值为4)#include <stdio.h>struct A{

2017-09-04 14:36:11 6254 3

转载 进程状态(含状态变迁图)

一、三态模型:三态模型:在多道程序系统中,进程在处理器上交替运行,状态也不断地发生变化。进程一般有3种基本状态:运行、就绪和阻塞。(1)就绪:当一个进程获得了除处理机以外的一切所需资源,一旦得到处理机即可运行,则称此进程处于就绪状态。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。(2)运

2017-08-20 10:49:31 22917 1

原创 Linux进程间通信

Linux下的进程间通信机制:大致包括:管道 信号(在Windows上成为消息) 消息队列 共享内存 信号量 套接字(socket)一、基本概念管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接

2017-08-18 16:24:45 334

转载 内存检测工具valgrind安装及测试

本文转自:peter tang最近在学习数据结构的时候总是遇到关于内存错误的问题,因为数据结构这块多用指针,由此产生的段错误多不胜数,因此学习了一下valgrind这个工具,来检测我们的程序是如何出现内存问题的。centos系统下的valgrind,首先我们得有autoconf和automake两个工具,一般系统都会自配。安装过程:wget http://valgrind.org/downloads

2017-08-14 09:01:46 879

原创 二分查找法(递归与非递归方式)

思想: 首先要确保数组中数是按顺序排列好的,假设我们要查找的数为277。要查找的数277:比较277与中间数的大小,如果刚好为277,则就算找到。如果大于277,排除另外一半,然后把新的half_num-1设置为上界。同理,如果小于277,则把half_num+1设置为下界 。然后继续重复之前的步骤。一、非递归#include <stdio.h>void create_num(i

2017-08-10 21:34:54 701

原创 Linux下git操作(三)——分支管理与标签

本文命令:配置显示颜色是:git config --global color.ui true给命令设置别名:git config --global alias.co checkout查看远程仓库:git remote -v创建远程仓库分支:git checkout -b dev origin/dev创建分支:git branch <name>查看分支:git branch切换分支:git check

2017-08-03 16:22:13 530

原创 Shell脚本学习第五天——算术运算符

我希望有个如你一般的人 如山间清爽的风 如古城温暖的光 从清晨到夜晚 由山野到书房 只要最后是你 就好                     ——张嘉佳 《从你的全世界路过》一、chars=` seq -s ” ” 100 ` :从1到100,以空格为分隔符。 获取字符串长度的三种方法: echo ${#chars} #取长度 291 echo $chars|

2017-08-01 10:02:30 717

原创 shell脚本学习第四天——bash内部变量,变量主串,变量替换

一、bash内部变量:常见的内部命令:echo,eval,exec,export,readonly,read,shift ,wait,exit和点(.)也就是source命令。 命令 作用 echo 变量名 将变量名表指定的变量显示到标准输出 eval 读取一连串的参数,然后再依参数本身的特性来执行 exec命令参数 当Shell执行到exec语句时,不会去创建新的子进

2017-07-26 21:32:49 1297

原创 C语言内存四大区域几点总结

未初始化全局变量默认值为0,未初始化局部变量一般默认值为随机数,但有的编译器也为0。一、栈:  栈遵循后进先出,栈的大小由编译器决定。一般来说,默认栈的大小为1M,所以如果变量分配内存过大可能会造成栈溢出。比如: 定义一个数组长度为200M,double a[1024*1024*200]如果编译器栈大小不够的话会造成溢出。栈不同于堆,栈用完立即回收,所有局部变量都存放在栈中。 如下程序会一直进

2017-07-26 19:58:02 1091 1

原创 Linux下git操作(二)——远程仓库

一、前期准备:1、创建SSH Key在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,创建SSH Key:进入主目录下.ssh目录(~/),执行如下命令: ssh-keygen -t rsa -C "[email protected]" 第一次提示输入保存文件名可以不输入,它会默认保存为i

2017-07-23 16:39:00 708

原创 shell脚本学习第三天——特殊变量

一、位置变量:$0 获取当前执行脚本的文件名,包括脚本路径。 $n 获取当前执行脚本的第n个参数,1~9,大于9,用{}括起来,比如:${10}。 $# 表示参数个数seq 9|sed 's#[0-9]#$&#g'seq -s " $" 1 10 | sed 's/1/$1/' 以上用两种方法用产生“$1 $2一直到$10 ”用到了一个函数seq,下面对这个函数进行介绍。 用法:seq

2017-07-23 14:49:50 515

空空如也

空空如也

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

TA关注的人

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