摘要: arm学了几天,主要是体系结构和汇编部分,小总结一下:1 realview的编辑器实在是很差劲,用惯了vim的,就想敲j k h l,好不习惯啊,可恶的是连自动缩进都没有。2 realview写程序之前一定要设置好工程选项,比如程序下到哪里,ram的地址,rom的地址,sct连接脚本,调试脚本都要配置好。这些信息又是怎么得到的呢,通过看芯片说明,内存和地址分配部分。3 arm的立即数是有要求的,并不是所有的立即数都合法,这是因为指令长度固定决定的,每个立即数由一个8位的常数循环右移偶数位得到。其中循环右移的位数由一个4位二进制的两倍表示。如果必须要用到非法的立即数,可以用ldr r0, =0x 阅读全文
posted @ 2011-09-06 00:06 jialejiahi 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 1#include<unistd.h>2#include<stdio.h>3#include<stdlib.h>4#include<sys/types.h>5#include<errno.h>6intmain (void)7{8intforkId;9intfd[2];10charreadBuf[100];11inti =0;12if(pipe (fd) <0)13{14perror ("\npipe error\n");15exit;16}17forkId = fork ();18if(forkId < 阅读全文
posted @ 2011-09-03 19:47 jialejiahi 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 1 C programing language (部分习题未完成)2 C++ Primer 3ed3 ARM体系结构与汇编 (芯片说明)4 intel汇编语言程序设计5 UNIX shell 编程范例精解6 unix环境高级编程7 unix网络编程8 深入理解计算机系统9 算法导论 (这本有难度)这些比较经典的书都翻过,但是都没有精读,心存遗憾,必将全部精读,此文为证。再加上三本没有看过的,不过看评论都是重量级的10 linux内核设计与实现11 深入理解linux内核12 linux设备驱动程序 阅读全文
posted @ 2011-09-03 14:58 jialejiahi 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 虚拟机的nat上网,有时候好的,有时候又不行。我晚饭都没吃,一直在那儿配置啊配置,结果还是不行。纠结了好久,最后因为走得晚车都没法取,往公交卡里充了两块钱赶公交回来的。悲剧啊,以下午连程序都没有看,净在弄那些个烦人的配置了。以后千万不能这样,如果一个问题没有好的解决方法,一定要去寻求,或者暂时先放下。因为时间有限,可能还有别的事做,最忌不断重复无效的行动。最后找到连不上的原因了,原来是vmware nat和vmware dhcp服务被禁了。以前优化系统的时候不注意,把这两个服务给去掉了,可想而知,再怎么配置都不可能成功的。总结如下:如果本机已经是在局域网中用nat方式上网,虚拟机再选用nat方 阅读全文
posted @ 2011-08-29 21:31 jialejiahi 阅读(154) 评论(0) 推荐(0) 编辑
摘要: TCP连接的建立: 下述步骤建立一个TCP连接: 1.服务器必须准备好接受外来的连接。这通过调用socket、bind和listen函数来完成,称为被动打开(passive open)。 2.客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN分节(表示同步),它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。一般情况下SYN分节不携带数据,它只含有一个IP头部、一个TCP共部及可能有的TCP选项。 3.服务器必须确认客户的SYN.同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个分节向客... 阅读全文
posted @ 2011-08-28 22:41 jialejiahi 阅读(1017) 评论(0) 推荐(0) 编辑
摘要: 1 成员变量除了静态成员不能再定义类时初始化。2因为只有当一个类的类体已经完整时 它才被视为已经被定义 所以一个类不能有自身类型的数据成员 但是 当一个类的类头被看到时 它就被视为已经被声明了 所以一个类可以用指向自身类型的指针或引用作为数据成员 。3只有被声明为const 的成员函数才能被一个const 类对象调用 关键字const 被放在成员函数的参数表和函数体之间 对于在类体之外定义的const 成员函数 我们必须在它的定义和声明中同时指定关键字const4 为了允许修改一个类的数据成员 即使它是一个const 对象的数据成员 我们也可以把该数据成员声明为mutable 易变的 m... 阅读全文
posted @ 2011-08-27 23:58 jialejiahi 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 首先声明,这里不是说的图的深度优先遍历和广度优先遍历,而是心情随笔,哈哈。计算机技术的各个领域,都有他存在的必要,所谓存在即合理。而我又是一个比较“花心”的人,看到什么技术挺好玩,总要去摸一摸,耍一耍。刚开始看到有人写了个程序,把一个复杂的计算瞬间算出来了,好玩,看到有人做出了漂亮的界面,酷,看到有人谈论自己听不懂的算法,高端,...于是都想去学一下。一开始只知道有个windows,看到api什么的觉得最高级了,后来又认识了linux,哦,原来还有另一番天地。在计算机的世界里,你知道的总是那么一点点,还有很多很多,是你不知道的,而且永远比你知道的要酷。今天看看这个,明天搞搞那个,其实日子挺舒服 阅读全文
posted @ 2011-08-26 11:25 jialejiahi 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 首先想建堆的办法,需要n/2 * 2次比较,至多n/2次交换建立大根堆或者小根堆;假设建立的是大根堆,对叶子节点进行n/2-1次比较的到最小值,比较次数3n/2。这个方法还可以用于得到最大的或者最小的前k个数,只需建堆后进行层次遍历即可。另一种方法是假设数组的前两个数时最大值和最小值,然后每次从后面的元素中取出两个,这两个中大的跟“最大值”比较,小的跟"最小值"比较,根据比较情况进行交换,这样每组数进行了三次比较,总共比较了n / 2 * 3次,可能交换次数也是 n/2,可见跟建堆的方法复杂度差不多, 也是3n/2,当然具体根据个数的奇数偶数差个一次二次的。这里有篇文章,关 阅读全文
posted @ 2011-08-24 00:12 jialejiahi 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 今天从下载了一个查找树库的源代码,奇怪的是这个库里声明的树节点没有数据域。于是很奇怪,没有数据域怎么用呢,难道这个库不能用?然后看了库的readme文档,找到了原因。原来为了应用的广泛性,这个库被故意设计成与数据域无关,用户在使用该库的时候,应当把数据域和库中的树节点封装成自己的数据结构,库中的函数操作事与用户数据类型无关的,仅仅需要用户提供一个比较函数而已。那么问题出来了,既然提供的比较函数参数中不能出现用户类型,因为库中的操作时与用户类型无关的;那么怎么才能让比较函数取到用户数据进行操作呢?没看库的代码时,对这个问题想了很久,始终不得其解,最终看了源代码,发现了该库的作者的做法。巧妙处正是 阅读全文
posted @ 2011-08-22 23:20 jialejiahi 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 二叉树的递归遍历方法形式很统一:void Traverse(BiTree T){ if(T){ //visit,先序遍历 Traverse(T->lchild); //visit,中序遍历 Traverse(T->rchild); //visit,后序遍历 }}可是非递归遍历呢?前序和中序还好,跟递归的形式差不多:void InOrderTraverse(BiTree T, status(* visit)(TElemType e)){ InitStack(s); p=T; while(p || !StackEmpty(s)){ if(p){ //visit,先序遍历 Push(s, 阅读全文
posted @ 2011-08-22 01:07 jialejiahi 阅读(199) 评论(0) 推荐(0) 编辑