自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux 软件系列之十二——线程编程

1.线程是进程中程序执行的最小单位。是并发执行的多道执行路径,他们共享一个进程的资源。线程通常都是在一个进程中创建的。线程不能独立于进程单独存在。进程是系统中程序执行和资源分配的基本单位。每个进程都有自己的数据段、代码段和堆栈段。2.在Linux中,一般采用pthread线程库实现线程的创建、访问和控制。软件系列之十二鈥斺斚叱瘫喑" TITLE="Linux 软件系列之十二鈥斺斚叱瘫

2014-01-03 21:48:46 717

原创 Linux 软件系列之十一——进程间通信

1.管道的定义:管道就是把一个进程的输出连接到另一个进程的输入。管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。注意:如果A端向管道写入数据,然后关闭管道,B端打开管道,那么数据已经不存在。管道分为两种:有名管道和无名管道无名管道适用于父子进程或兄弟进程之间的通信(具有亲缘关系的进程之间通信)。有名管

2014-01-03 21:48:44 664

原创 Linux 软件系列之十——特殊进程

1.僵尸进程僵尸进程就是指已经终止运行,但还没有被清除的进程。此时,僵尸进程放弃了所有的内存空间,没有任何可执行的代码,也不能被调用,仅仅在进程列表中保留一个位置,记录该进程的退出状态等信息。exit系统调用,它的作用是使进程终止,但也仅仅限于将一个正常的进程变成僵尸进程,并不能将其销毁。执行一个程序的时候:./test &如上输入的话,这个程序会到后台运行,可以用kill杀掉进程,

2014-01-03 21:48:42 658

原创 Linux 软件系列之九——exec函数族和system函数调用

1.exec函数族可以实现在一个进程中启动另一个程序的功能。系统内核会使用新的程序替换原有进程中使用的程序。开始新程序的执行。新进程和原有的进程号相同。调用exec函数后,代码段中的内容被新进程的代码替换,接着更新堆栈段和数据段。2.exec函数族说明:为什么一直说exec函数族呢?因为,在Linux中,并不存在exec这个函数,而是一组以exec开头的函数。软件系列之九鈥斺攅xec函数族

2014-01-03 21:48:40 2464

原创 Linux 软件系列之八——父子进程

1.ps –e:查看当前在执行的进程。例如:1505 tty1    00:00:00 getty。1505:进程号;tty1:运行于tty1终端上;00:00:00:运行时间;getty:进程名字。2.进程定义:进程就是一个程序执行的过程,它是一个动态的概念。进程和程序的区别:程序是指一段完成一定功能的代码,程序作为一个系统资源是永久存在的。它是静态的概念。进程是程序从代码的

2014-01-03 21:48:38 795

原创 Linux 软件系列之七——标准IO操作

1.标准的I/O库实际上是带有缓存的I/O;标准I/O库及其头文件stdio.h为底层I/O         系统调用提供了一个通用的接口;在标准I/O库中,与底层文件描述符对应的是指向数据结构FILE的指针。2.不带缓存IO和带缓存IO的区别linix对IO文件的操作分为不带缓存的IO操作和标准IO操作(即带缓存)。1)标准IO库的主要目的是提供高效的、扩展的和快捷的文件访问方式。2

2014-01-03 21:48:35 881

原创 Linux软件系列之六——链接文件

1.linux看起来像是一个分区,实际上不是。2.向一个单元中存入数据的时候,如果存入的数据溢出的话,那么单元里存储的是这个数据的低几位。例如:char test= 10000;那么存入的值是16。因为10000的十六进制值为0x2710,取最低的一个字节,存入a单元中的就是0x10,即16。3.针对溢出的问题,赋值的时候最好采用十六进制形式,这样可以保证赋的值不会超过单元能够存储的值的范

2014-01-03 21:48:33 684

原创 Linux 软件系列之五——不带缓存的IO操作

1.linux文件系统文件:指有名字的一组数据的集合;文件系统:指一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念替代了硬盘和光盘等物理设备使用的物理块的概念,用户使用文件系统来保存数据不必关心实际数据保存在哪个数据块上,只需要记住这个文件的所属目录和文件名即可。每个文件都有特定的属性:Linux的属性比较复杂,主要包括文件类型和

2014-01-03 21:48:31 1192

原创 C语言笔记系列之十一——位段+联合体+枚举

1.编译指令:gcc  文件名 –o  执行文件 //o要小写执行指令:./执行文件2.数组的初始化时候不能使用a[5] = {1, 2, , , 4, 5}这种语句是错误的;如果只对数组的部分元素初始化(从前往后)那么后面未被初始化的元素自动赋0。3.sizeof(数组名)在数组可见范围内得到的结果是数组的大小,如果是传递参数得到的数组名,那么测试出来的大小是数组第一个单元的大小。

2014-01-03 21:48:29 1143

原创 Linux 软件系列之二——swap分区

1.查看swap分区的信息可以使用free命令:# free也可以使用cat命令:# cat /proc/swaps也可以使用swapon命令:# swapon -s2.新建/调整swap分区的大小# mkdir swap(不是必须的)# cd swap(不是必须的)dd if=/dev/zero of=swapfile bs=1024 count=1000000//设置swap分

2014-01-03 21:48:26 715

原创 Linux 软件系列之三——简单命令和inode

1.[root@test root]#:最左边的root显示的是目前使用者的账号,而@之后接的test则是主机名称,至于最右边的root则指的是目前所在的目录,#就是通常所说的提示字符。2.在linux上面实际记录使用者身份的是UID与GID,分别是使用者的号码与群组的号码。举例来说,系统管理员(root)的号码即是0,所以你只要进入/etc/passwd这个档案中,即可看到root有两个

2014-01-03 21:48:24 813

原创 Linux 软件系列之一——分区类型和文件类型

1.Linux下的分区类型(1)/boot:包含了操作系统的内核和在启动系统过程中所要用到的文件。在很多老旧的教程中,都会让用户在/boot目录上挂载一个大小为100MB左右的独立分区,并推荐把该/boot放在硬盘的前面——即1024柱面之前。事实上,那是Lilo(LILO是一个在系统启动时运行的程序,它允许选择用于引导计算机的操作系统,可以用LILO引导几个不同的操作系统,如Linux和M

2014-01-03 21:48:22 1583

原创 USB学习系列之四——USB包结构

1.USB的数据传输以包为单位,一个包被分成不同的域。USB传输时使用的是LSB在前,MSB在后的方式。2.不同的包所包含的域是不同的,但是都有共同的特点是:以同步域开始,紧跟着一个包标识符PID,最终以包结束符EOP结束这个包。3.同步域:高速USB串行接口引擎数据传输要开始了,同时也提供同步时钟。对于低速设备和全速设备,同步域使用的是00000001(二进制数);对于高速设备使用的是0

2014-01-03 21:48:20 4627

原创 USB学习系列之三——USB设备的枚举

1.枚举就是从设备读取各种描述符信息,主机根据读取的描述符信息来决定加载什么驱动,确定是什么样的设备以及如何通信等。2.在USB设备的枚举过程中使用了控制传输,这种传输保证数据传输的正确性。控制传输分为:建立过程(主机发起)、可选的数据过程和状态过程。3.控制传输解析:(1)主机发起建立过程,建立过程开始于一个SETUP令牌包,后面紧跟一个DATA0数据包,接着就是数据过程。(2)如果

2014-01-03 21:48:18 1471

原创 USB学习系列之二——USB设备的插入检测

1.USB的插入检测机制:USB端口的D+和D-均用一个15k的电阻接地,当无设备接入时,均处于低电平;在设备端在D+(表示高速设备或者全速设备)或者D-(表示低速设备)接了一个1.5k的上拉电阻到+3.3v,一旦将设备接入,USB端口的D+或者D-其中一个被拉高为3v,系统识别到外部设备接入。注意:高速设备首先会被识别为全速设备,然后再通过集线器和设备二者的确认最后切换到高速模式下。在高速模

2014-01-03 21:48:16 5332

原创 USB学习系列之一——USB简介

1.USB:Universal Serial Bus(通用串行总线)。2.即插即用PnP:Plug and Play。3.USB是主从模式结构,USB通信中分为USB主设备和USB从设备,主设备和主设备,从设备和从设备之间不能互连。4.USB OTG(On TheGo:正在运行中):同一个设备,在不同的场合下可以在主设备和从设备之间切换,这扩大了USB设备的适用范围。5.支持USB2.

2014-01-03 21:48:14 1228

原创 C++语言笔记系列之二——new和delete

1.new关键字分配单元(1)必须定义一个纸箱该单元的指针。(2)指针变量 = new 数据类型。(3)new关键字分配的单元当程序结束后仍然存在。int *p = new int;int *p = new int[5];第二句话的解释:指针变量指向数组的首单元,数组元素表示为p[i],p的指向不能动,动了之后数组的首地址丢失。2.delete关键字释放动态定义的单元(1)dele

2014-01-03 21:48:11 675

原创 C++语言笔记系列之一——const修饰符

1.输入输出流coutcin>>a;2.int x = 6;系统为x分配单元#define x6 系统不为x分配单元,x只是6的符号3.const修饰符(1)变量的const修饰const 基本数据类型 变量名= 值;const int x = 3;等价于 #define x3这句话执行完成之后系统不会为x分配单元,此处的x不是变量。const int x;//错误语句

2014-01-03 21:48:09 730

原创 C语言笔记系列之十——结构体

1.基本格式struct student{  int age;  char sex;  float height;};struct student s1,s2,s3;2.结构体成员的引用变量名.成员名数组名[下标].成员名(*指针变量).成员名:点运算符的优先级高于*运算符,所以必须要加括号。指针变量->成员名3.同类型的结构体变量之间可以直接赋值。struct

2014-01-03 21:48:07 682

原创 C语言笔记系列之九——指针

1.将一个内存单元的地址称为该内存单元的指针。指针的指向即该指针所表示的存储单元。2.指针变量的定义int * p;p就是一个int型的指针变量,*表示其后的变量为指针变量。3.当指针p指向数组的首地址时,元素a[i]可以表示为*(a+i), *(p+i),p[i]。4.指向字符串的指针char *p = “china”;这种定义不同于定义一个字符型数组来存放这个字符串!5.二级指针

2014-01-03 21:48:05 518

原创 C语言笔记系列之八——函数

1.函数若无返回值,即无return语句——void类型。void类型表示:无返回值类型。若函数的返回值类型为void型,那么函数体中一定无return语句。2.若函数缺少数据类型,则默认为int型。3.系统函数的调用优先于自定义函数。4.被调函数运行完成后若带值返回,只允许返回一个值。5.形参和实参(1)只有在发生函数调用时若发生数据传递,才可能存在实参和形参,实参和形参是一对概念,

2014-01-03 21:48:03 522

原创 C语言笔记系列之七——字符串

1.字符串末尾会存放一个‘\0’,其ASCII值为0。2.\\表示斜杠字符,单个的\表示转义符号。3.“china\0”有效字符数为5个,其后仍会被系统添加\0。4.“”表示空串,被存储为\0。5.字符串常量可以为空串,字符常量不能为空。6.一个字符型数组是否存储字符串取决于数组中是否存在\0字符。7.一维字符数组的初始化char a[]10] = {'c','h','i','n',

2014-01-03 21:48:01 620

原创 C语言笔记系列之六——数组及冒泡排序

1.数组:分配的内存中一块连续的单元。数组元素的地址:&数组名[下标] 或者 数组名+ 下标。在C语言中数组名用来表示数组第一个单元的地址,也就是数组名表示数组的首地址。2.冒泡排序法for(i = 0; i {  for(j = i + 1; j   {    if(a[i] <a[j]){交换;}  }}思想:从数组中第一个数起,将第一个位置的数据与后面的数据依次比

2014-01-03 21:47:58 799

原创 C语言笔记系列之五——条件判断语句

1.一个#include只能加载一个头文件,一般一行只写一个头文件,写多个只要有多个#include也不会报错。2.if为真语句若有多个语句构成的一个整体时,必须加大括号,否则计算机只将第一条语句作为为真语句。3.if必须要跟为真语句,可以是空语句,但是不能不跟语句。4.if-else一个整体是一条语句,不是两条语句。5.while语句是一条单语句,while语句必须要有循环体语句,wh

2014-01-03 21:47:56 1465

原创 C语言笔记系列之四——输入输出控制

1.%输出格式:%d:整型%o:字母o,不是数字0,八进制%x:十六进制%u:无符号整型%ld:有符号长整型%e:以指数形式输出%g:有选择的以%f或者%e格式输出实数2.输出列宽控制:(o,x,u,c,d)%+/-md:m表示数据输出时的列宽,当m大于数据的实际列宽则加补空格,如果m小于数据的实际列宽则以数据的实际列宽输出。加补空格规则:+号表示左边补空格,-号表示右边补空格

2014-01-03 21:47:54 632

原创 C语言笔记系列之三——运算符

1.运算符的分类:单目运算符,双目运算符,三目运算符。2.任何一个表达式都是栈式运算,先进后出,后进先出。例如:计算2 + 3 * 5的动态过程,会被转换为2 3 5 *+的顺序输入栈中,但是有一个规则是碰见数就往栈中存储,碰见一个运算符就从栈中取出两个数。所以首先2和3入栈,然后5入栈,碰到*号,3和5出栈做*运算,运算结果放入栈中,然后碰到+号,然后从栈中取出2和3*5的值,做加运算。

2014-01-03 21:47:52 1454

原创 C语言笔记系列之二——变量

1.变量:内存中的一个存储单元称之为一个变量。2.变量名  命名法:由数字、字母以及下划线构成,以字母或下划线作为起始,可包含其中的一种两种或者三种。  变量值:变量单元中存储的常量值。  注意:在C语言中不可以定义同名变量,命名变量名时不可以和保留字相同。3.变量的定义:int a;int提供大小,变量名提供名称。4.如下程序片段:int x = 32767; x = x +

2014-01-03 21:47:50 823

原创 C语言笔记系列之一——常量

1.常量:在程序的运行过程中不改变的量。  一个数据的类型决定了存储空间的大小。2.八进制的表示方法:075, -072,正负号+零+八进制数  十六进制的表示方法:0x75,0xfd,正负号+零+x+十六进制数3.整型常量的存储:在计算机内存中以补码的形式存储。  正数补码:就是原码。  负数补码:先找到原码,然后除符号位以外各位取反,最后加1。4.负数由补码找原码:从该数的原

2014-01-03 21:47:48 618

原创 三目运算符(?:)

pc->next = a? x : y;分析:三目运算符在两种判断结果,并且当判断的执行结果比较简单时,比较常用,比if-else结构更加简练,执行速度更快。执行过程:首先判定a为真还是为假,a为真计算x的值并赋给等号左边的变量,a为假则计算y的值赋给等号左边的变量。常用位置:赋值,返回值。

2014-01-03 21:47:46 777

原创 realloc关键字

原型:extern void *realloc(void *mem_address,unsigned int newsize);语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。//新的大小一定要大于原来的大小,不然的话会导致数据丢失!头文件:#include 有些编译器需要#include,在TC2.0中可以使用alloc.h头文件功能:先判断当前的指针

2014-01-03 21:47:44 510

原创 红外遥控相关总结

1.红外遥控实现基本原理:一端编码发送,一端接收解码。2.遥控器里面发射器一般都有专用的芯片,根据编码格式可分为:脉冲宽度调制和脉冲相位调制。其中脉冲宽度  调制用得最多。3.遥控发射端发射的是高电平,遥控对应接收端收到的是低电平。因为这个原因,发射端的上升沿对应到接收端  的下降沿。

2014-01-03 21:47:42 735

原创 uboot分析之uboot启动内核分析

uboot

2013-12-31 16:01:17 1006

原创 uboot分析之uboot启动过程分析

1.拿到uboot的源码之后,一般需要经过四个步骤:(1)解压缩(2)打补丁:patch -p? 解释:?用数字替代,表示忽略掉前几级目录。(3)配置:因为uboot可以支持很多种芯片,需要将其配置为支持特定的芯片解释:这一步一般就是执行make config,config是特定的一个配置文件。(4)编译2.在uboot下,如果想查看有哪些可用的命令,可以输入?或者输入

2013-12-30 15:54:25 883

原创 2440时钟&位置无关码

1.不同的外设需要的时钟频率不一样,所以时钟需要通过不同的分频送到每一个器件。2.CPU专用的时钟一般称为FCLK,这个一般是最高的频率,因为CPU的速率最快,很好理解的;HCLK是用于AHB总线,也就是高速外设总线,这上面外接的设备频率也比较快,当然也没有2440内核快;另一个就是PCLK用于APB,也就是低速外设总线,这个上面接的外设频率相对较低。2440芯片是一个SOC,除了920t的内

2013-12-12 12:03:32 815

原创 s3c2440的中断裸机程序

1.ARM的几种工作状态(1)拥有不同的寄存器有些模式拥有自己独特的寄存器,同样的一条赋值指令,可能是赋给不同的寄存器,那么模式切换的时候很多变量就不用保存,因为它们仍然存放在上一个模式的寄存器中。(2)不同的权限不同的模式可以访问的空间不同,这个是配合MMU来使用的。(3)触发条件上电后位于管理模式;发生中断时进入IRQ模式;如果读取到的指令是未定义的指令则进入未定义指令

2013-12-11 21:42:05 980

原创 s3c2440的Nand flash裸机程序

1.nand flash的控制脚CLE有效表示传送的是命令,ALE有效表示传送的是地址,如果这两个都无效那么表示传送的是数据。2.nand flash的结构,开发板上使用的nand flash的页大小是2K,每一页附加了64字节的OOB;64页组成一块(一块的大小是128KB+4KB),但是每一页的64字节的OOB在大多数场合是不参与地址的编址的。如果要读取2049这个地址上的数据,那么读取的

2013-12-10 22:08:13 1224

原创 s3c2440的MMU裸机程序

1.权限管理内核以及各个应用程序都有自己的空间,各自都只能访问属于自己的内存空间段,这样做的好处是A程序的崩溃不会导致B程序出问题,同时也可以防止恶意程序修改别的程序的空间的数据。2.在windows中打开两个C程序(都是打印A变量的地址和值),打印出来A的地址值一样,但是A的值却不一样。解释:这是因为windows的虚拟地址导致的,打印出来的A的地址是一个虚拟的地址,并不是A变量存放

2013-12-10 19:05:33 1224

原创 s3c2440的SDRAM裸机程序

1.CPU读取数据是通过存储管理器来实现的。2.对于SDRAM的操作,需要注意的是:(1)位宽(2)行/列地址(3)刷新周期(4)Bank地址3.2440对外能够接8个SDRAM类的芯片,因为内部分为8个bank,有8个片选信号线。4.SRAM和SDRAM对比SRAM:价格比较贵,访问简单,只需要发出地址信号即可。SRAM是英文Static RAM的缩写,即静态

2013-12-09 21:17:42 1345

原创 s3c2440的LED点灯裸机C程序

1.gcc编译的时候-g选项表示添加一些调试信息。一个程序一般会经过(针对一个linux程序)(1)预处理(2)编译:.c文件处理为.s文件(3)汇编:.s文件处理为.o文件(4)链接:把多个.o文件合并为一个可执行文件2.nor flash不能像内存一样写数据,必须先擦除再写。3.main函数被谁调用?main函数的返回值给谁了?答:普通应用程序,main函数会被

2013-12-09 10:37:12 2108

原创 s3c2440的LED点灯裸机汇编程序

1.s3c2440裸机LED点灯代码(汇编代码).text.global _start_start:                 LDR     R0,=0x56000010      @ R0设为GPBCON寄存器。此寄存器                                        @ 用于选择端口B各引脚的功能:

2013-12-08 19:56:49 2039

空空如也

空空如也

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

TA关注的人

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