摘要: 1 引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值。fork函数是Unix系统最杰出的成就之一,它是七十年代UNIX早期的开发者经过长期在理论和实践上的艰苦探索后取得的成果,一方面,它使操作系统在进程管理上付出了最小的代价,另一方面,又为程序员提供了一个简洁明了的多进程方法。与DOS和早期的Windows不同,Unix/Linux系统是真正实现多任务操作的系统,可以说,不使用多进程编程,就不能算是真正的Linux环境下编程。 多线程程序设计的概念早在六十年代就被提出,但直到八十年代中期,Unix系统中才引入多线程机制,... 阅读全文
posted @ 2012-11-28 20:27 雪中飞 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 1.简单的define定义#define MAXTIME 10002.define的“函数定义”define可以像函数那样接受一些参数,如下#define max(x,y) (x)>(y)?(x):(y);因为这个“函数”没有类型检查,就好像一个函数模板似的,没有模板那么安全就是了。但是这样做的话存在隐患,例子如下:#define Add(a,b) a+b;如果遇到如:c * Add(a,b) * d的时候就会出现问题。另外举一个例子:#define pin (int*);pin a,b;本意是a和b都是int型指针,但是实际上变成int* a,b;a是int型指针,而b是int型变量。 阅读全文
posted @ 2012-11-27 23:38 雪中飞 阅读(6322) 评论(0) 推荐(0) 编辑
摘要: 常常能看到ARM7,ARM9,ARM11,以及armv6k等不同的表达。且在GCC编译中,常常要用到 -march, -mcpu等。他们分别表达什么涵义呢?Sam自己也不很清楚,只是大概有个模糊的概念。今天就仔细研究一下。ARM(Advanced RISC Machines)是微处理器行业的一家知名企业。设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。1985年,第一个ARM原型在英国剑桥诞生。ARM公司的特点是只设计芯片,而不生产。ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成 阅读全文
posted @ 2012-11-26 21:31 雪中飞 阅读(1088) 评论(0) 推荐(0) 编辑
摘要: 一、ARM工作状态下的寄存器组织ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC(即R15)、一个状态寄存器都是可访问的。通用寄存器通用寄存器包括R0~R15,可以分为3类:(1)未分组寄存器R0~R7(2)分组寄存器R8~R14(3)程序计数器PC(R15)1.未分组寄存器R0~R7在所有运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途.因此在中断或异常处理进行运行模式转换时,由于不 阅读全文
posted @ 2012-11-26 21:28 雪中飞 阅读(1147) 评论(0) 推荐(0) 编辑
摘要: 一、存储器格式(字对齐):Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。存储器格式 1、大端格式:高字节在低地址,低字节在高地址; 2、小端格式:高字节在高地址,低字节在低地址;指令长度:Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器中支持字节(8位),半字(16位),字(32位)三种数据类型,其中,字需要4字节对齐,半字需要2字节对齐。注:所谓的指令长度是一条完整的指令 阅读全文
posted @ 2012-11-26 20:44 雪中飞 阅读(11675) 评论(0) 推荐(1) 编辑
摘要: 精简指令集与复杂指令集 我们可以思考得到一个缓存器A的数据转移至令一个缓存器B,只需将缓存器A开启成读的状态,然后将缓存器B开启成写的状态,两个步骤即可。但是要求CPU在内存中某个区段搜寻某个字,微指令的编码就必须多安排一些。因此,微处理随着微指令的复杂度可分为精简指令集计算机RISC(Reduce Instruction Set Computer)及复杂指令集计算机CISC(Complex Instruction Set Computer)。复杂指令集计算机(CISC) 长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得.随着集成电路技术.特别是VLSI(超大规模集成电路)技术的... 阅读全文
posted @ 2012-11-26 20:11 雪中飞 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件。如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只需要执行一个make就OK了,这样大大提高了开发效率。但是Makefile的语法规则众多,而且缺乏参考资料,对于初学者来说,写起来还是有一定的难度,往往令很多人望而生畏。下面我们介绍一个比较通用而且简洁的Makefile,大家只要对它稍作修改就可以用在你们自己的工程里了。现在假设我们有一个工程叫my_project,工程源码目录下面有app1.c,app2.c,app3.c 阅读全文
posted @ 2012-11-15 15:42 雪中飞 阅读(1383) 评论(0) 推荐(2) 编辑
摘要: 总体上必须清楚的:1)程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。3)计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址. 4)bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位.概念常考到的:1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。 3、每个C语 阅读全文
posted @ 2012-11-14 17:31 雪中飞 阅读(9386) 评论(1) 推荐(1) 编辑
摘要: /********************************************************************//*函数功能:对1……n 连续数列的无序数组进行排序, 例如 {10,6,9,5,2,8,4,7,1,3};/********************************************************************/void sort(int num[]){ int len = sizeof(num) / sizeof(int); int temp; for(int i = 0; i < len; ) { temp = 阅读全文
posted @ 2012-11-14 15:40 雪中飞 阅读(3671) 评论(0) 推荐(1) 编辑
摘要: 第一章 概 论 1.数据:信息的载体,能被计算机识别、存储和加工处理。 2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。 3.数据结构:数据之间的相互关系,即数据的组织形式。它包括:1)数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机;2)数 阅读全文
posted @ 2012-11-14 11:52 雪中飞 阅读(749) 评论(2) 推荐(0) 编辑