09 2011 档案

摘要:把13个球按4,4,5分成A,B,C 3组,分别标号A1,A2,A3,A4,B1,B2,B3,B4,C1,C2,C3,C4,C5;先将A组和B组放在天平上:一。如果A和B平衡:则不同的球在C组中。将A1,A2,A3和C1,C2,C3放在天平上:(1)如果平衡:则不同的球在C4,C5中。取A1和C4放在天平上,如果平衡,则不同的球是C5。如果不平衡,则不同的球是C4。(2)如果不平衡:则不同的球在C1,C2,C3中。a.如果A1,A2,A3比C1,C2,C3重,说明不同的球比标准球轻。取C1,C2分别放在天平两端,如果平衡,则不同的球是C3。如果C1,C2不平衡,则不同的球是较轻的一个。b.如果 阅读全文
posted @ 2011-09-29 00:45 auleaf 阅读(502) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/jingxuewang110/article/details/67895571.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应,free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限 阅读全文
posted @ 2011-09-28 17:13 auleaf 阅读(253) 评论(0) 推荐(0) 编辑
摘要:http://blog.csdn.net/hi_dzj/article/details/5993146 一、冒泡排序 已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]... 阅读全文
posted @ 2011-09-27 23:22 auleaf 阅读(1694) 评论(0) 推荐(0) 编辑
摘要:/*给定两个字符串s1,s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。*/解法1:将s1循环移动,每移动一次就比较一次。#include<stdio.h>#include<string.h>int main(){ char s1[]="AABCDEF"; char s2[]="CDEFA"; int len=strlen(s1); int i,j; char temp; for(i... 阅读全文
posted @ 2011-09-27 22:35 auleaf 阅读(5516) 评论(0) 推荐(0) 编辑
摘要:一 面向对象(oop)1.封装2.继承基类---->派生类3.多态:派生类中可能出现与基类同名的方法。针对基类与派生类同名的方法,派生类要有自己的行为,必须要覆盖基类的方法。二 虚函数virtual funname(。。) // 基类允许实现该方法纯虚函数:virtual funname()=0 //基类不存在对该方法的实现。一个类中包含了一个纯虚函数,那么该类叫抽象类。 抽象类不能实例该类的对象。如果派生类也没有去实现基类中的纯虚函数,那么该派生类也是一个抽象类。三 多态(override)要和函数的重载(overload)区分1.多态是在存在继承关系的类中,看是否有相同的方法。2.重 阅读全文
posted @ 2011-09-19 15:07 auleaf 阅读(217) 评论(0) 推荐(0) 编辑
摘要:对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。char*与char[]容易混淆,一定要分清,而且char*="aaa"的写法现在不被提倡,应予以避免。strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。int *p=NULL, sizeof(*p) = sizeof(int) = 4,是说整型数占用几个字节。某32位系统下, C++程序,请计算sizeof 的值#include <stdio.h>#include <mallo 阅读全文
posted @ 2011-09-19 15:01 auleaf 阅读(221) 评论(0) 推荐(0) 编辑
摘要:#include<stdio.h>int main(void){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1); //&a代表整个数组的地址,+1应该加上sizeof(a)的长度,所以ptr指向a[5]位置处。printf("%d %d\n",*(a+1),*(ptr-1));//a代表数组首元素的地址,+1应该加上sizeof(a[0]),所以a+1指向a[1]处。return 0; //输出是 2 5 } 对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T的指针 阅读全文
posted @ 2011-09-19 15:00 auleaf 阅读(8130) 评论(0) 推荐(2) 编辑
摘要:在send()发送数据的时候出现下面这个错误send() error.: Socket operation on non-socket已导致不能发送错误,虽然这个错误时出现在send()调用,但是其错误源头在accept()调用,我调试时,打印了accept()返回值居然是0,mygod……原因:在accept()调用的时候出现了。运算符优先级错误。汗……一个低级错误,郁闷了我昨天一个下午。原函数错误写法是:if(connectfd = accept(listenfd,(struct sockaddr*)&client,&sin_size)==-1){ perror(" 阅读全文
posted @ 2011-09-19 14:54 auleaf 阅读(8344) 评论(0) 推荐(1) 编辑
摘要:本文出自:http://www.china-pub.com作者:姚继锋(2001-08-1109:05:00)1引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。 为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。 使用多线程的理由之一是... 阅读全文
posted @ 2011-09-19 14:51 auleaf 阅读(4174) 评论(0) 推荐(0) 编辑
摘要:int quickOnce(int * data, int left, int right){int tmp;tmp = data[left];while(left<right){//右边找个小于tmp的数放到左边while(left<right){if(data[right] < tmp){data[left] = data[right];break;}right--;}//左边找个大于tmp的数放到右边while(left<right){if(data[left] > tmp){data[right] = data[left];break;}left++;}} 阅读全文
posted @ 2011-09-19 09:45 auleaf 阅读(174) 评论(0) 推荐(0) 编辑
摘要:静态变量的类型说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。静态局部变量定义: 在局部变量的说明前再加上static说明符就构成静态局部变量。 例如: static int a,b; static float array[5]... 阅读全文
posted @ 2011-09-19 09:43 auleaf 阅读(822) 评论(0) 推荐(1) 编辑
摘要:1。函数的形参列于函数声明中,在函数定义的函数体内使用。当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。 2。实参是用来填充形参的。当函数被调用时,实参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。 3。传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上 阅读全文
posted @ 2011-09-19 09:38 auleaf 阅读(2139) 评论(0) 推荐(0) 编辑
摘要:C和C++是两件截然不同的东西,学习C++可以完全没有C的基础,或者说可以完全不用先学C;但是,这样你是永远也不可能成为真正的C++大师的;你最多只能成为一个C++的熟练工人;C和C++有一个共同的奥义:内存管理,而你不学习C,单从对C++的理解是不可能掌握这项最伟大的技术的; C++是面向对象的,C不是,它的特点是结构化程序设计思想,或者说是面向过程的;而C++在语法上以C的语法为基础,兼容C的语法,这让它看上去有点凌乱;甚至C的程序不需要任何改动就可以用C++的编译器编译;对于已经掌握C语法的人,学习C++比学习其它语言(如Delphi)要觉得容易些;而对于资深的C程序大师,那么学习C++ 阅读全文
posted @ 2011-09-19 09:37 auleaf 阅读(1857) 评论(0) 推荐(0) 编辑
摘要:#include<stdio.h>voidmain(){inti;for(i=0,printf("first=%d\n",i);i<10,printf("second=%d\n",i);i++,printf("third=%d\n",i)){printf("forth=%d\n",i);}}这段代码会无限循环下去,因为中间的条件是个逗号表达式,逗号表达式的值是最后一个表达式的值。c语言提供一种特殊的运算符,逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程 阅读全文
posted @ 2011-09-19 09:32 auleaf 阅读(1508) 评论(0) 推荐(0) 编辑
摘要:1. pipe系统调用的使用格式#include<unistd.h>int pipe(int fd[2])功能:创建一个简单的管道,若成功则为数组fd分配两个文件描述符,其中fd[0]用于读取管道,fdp[1]用于写入管道。返回值:成功返回0,失败返回-1。2. 命名管道:mkfifo系统调用的使用格式:#include<sys/types.h>#include<sys/stat.h>功能:创建命名管道返回:若成功则为0,若出错则为-1.3.信号量:semget()系统调用的使用格式:#include<sys/sem.h>功能:创建一个新的信号量 阅读全文
posted @ 2011-09-19 09:29 auleaf 阅读(600) 评论(0) 推荐(0) 编辑
摘要:并行性包含同时性和并发性,前者是指两个或多个事件在同一时刻发生,后者是指两个或多个事件在同一时间段内发生。 计算机操作系统中把并行性和并发性明显区分开,主要是从微观的角度来说的,具体是指进程的并行性(多处理机的情况下,多个进程同时运行)和并发性(单处理机的情况下,多个进程在同一时间间隔运行的)。 计算机组成原理主要是从宏观的角度来看的,并发性在用户看来也是并行的,故并行性包含了并发性的。主要是看问题的角度和层面不同的。 阅读全文
posted @ 2011-09-19 09:22 auleaf 阅读(5763) 评论(0) 推荐(1) 编辑
摘要:1 进程是系统中程序执行和资源分配的基本单位。每个进程有自己的数据段,代码段和堆栈段。 线程通常叫做轻型的进程。线程是在共享内存空间中并发执行的多道执行路径, 它们共享一个进程的资源。 2 同一个进程中的线程的共性:多个线程将共享同一个进程虚拟空间。 线程共享的环境包括:进程代码段,进程的公有数据(利用这些共享的数据,线程很容易实现相互之间的通讯),进程打开的文件描述符,信号的处理器,进程的当前目录和进程用户ID与进程组ID。 3 线程的个性: 线程ID:每个线程都有自己的线程ID,这个ID在本进程中是唯一的。 寄存器组的值:一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存 阅读全文
posted @ 2011-09-19 09:20 auleaf 阅读(173) 评论(0) 推荐(0) 编辑
摘要:01#include <stdio.h> 02#include <stdlib.h> 03#include <fcntl.h> 04#include <unistd.h> 05#include <string.h> 06#include <sys/types.h> 070809#define FILE_TXT "sf.txt" 10#define FILE_BIN "sf.bin" 1112typedef struct student 13{ 14int id; 15char nam 阅读全文
posted @ 2011-09-19 09:20 auleaf 阅读(147) 评论(0) 推荐(0) 编辑
摘要:01#include<stdio.h> 02int main() 03{ 04int a[5][5]={1,3,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}; 05int (*p)[5]; //p是一个数组指针,它指向一个数组,这个数组里面有5个元素。 06p=a; // p是指向a[0][5]这个小数组的首地址,不是指向a[0][0]这个元素的首地址,所以p+1表示a[1][5]这个小数组的首地址 07printf("%d\n",**(p+1)); // 6 08printf(&q 阅读全文
posted @ 2011-09-19 09:04 auleaf 阅读(203) 评论(0) 推荐(0) 编辑
摘要:1 简单地说,shell就是命令解析器,将用户输入的指令转换为相应的机器能够运行的程序。 2 Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面。 Shell除了作为命令解释程序以外,还是一种高级程序设计语言。利用Shell程序设计语言可以编写出功能很强、但代码简单的程序。 3 shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行。 4 Shell过程的建立和执行 称作Shell文件或者Shell脚本(Shell script)。 建立Shell过程的步骤同建立普通文本文件相同,利用编辑器(如vi或gedit)进行程序. 阅读全文
posted @ 2011-09-19 09:03 auleaf 阅读(229) 评论(0) 推荐(0) 编辑
摘要:; 数据块拷贝; AREA cpData, DATA, READWRITE align 4 ;四字节对齐buf1 space 12345 align 4 ;四字节对齐buf2 space 12345 AREA cpCode, CODE, READONLY ENTRYstart ;初始化测试数据 ldr r0, =12345-1 ldr r1, =buf1initloop strb r0, [r1, r0] subs r0, r0, #1 bne initloop ;数据拷贝 ldr r0, =12345 ;计数器 ldr r1, =buf1 ;源缓冲区 ldr r2, =buf2 ;目的缓冲区 阅读全文
posted @ 2011-09-19 09:00 auleaf 阅读(374) 评论(0) 推荐(0) 编辑
摘要:这种指令用于把单一的数 传入或者传出一个寄存器。支持的数据类型有字(32 位 ) 、半字(16 位) 和字节。常用的单寄存器加载与存储指令包括: LDR/STR 字数据加载/ 存储指令 LDRB/STRB 字节数据加载/ 存储指令 LDRH/STRH 半字数据加载/ 存储指令 LDRSB/LDRSH 有符号数字节/ 半字加载指令 ( 注意:没有strsb/strsh 指令) 1. 汇编格式 : LDR{<cond>}{T} Rd ,addr 功能: LDR 指令用于从存储器中将一个 32 位的字数据加载到目的寄存器 Rd 中。该指令通常用于从存储器中读取32 位的字数据到通用寄存器 阅读全文
posted @ 2011-09-19 08:59 auleaf 阅读(887) 评论(0) 推荐(0) 编辑
摘要:ARM 处理器是加载/ 存储体系结构的处理器,对存储器的访问只能通过加载和存储指令实现。 1. 数据加载与存储的方向问题 数据加载与存储( Load-store )指令用于在存储器和处理器的寄存器之间传送数据。 数据加载与存储指令共有三种类型:单寄存器加载与存储指令、多寄存器加载与存储指令和交换指令。 2. 数据加载与存储指令的寻址 数据加载与存储类指令的基本格式为 opcode{<cond>} Rd ,addr 。格式中opcode 为指令代码,如 LDR 表示将存储器中的数据加载到寄存器中。addr 为存储器的地址表达式,也称为第2操作数,可表示为 [Rn,offset... 阅读全文
posted @ 2011-09-19 08:58 auleaf 阅读(2161) 评论(0) 推荐(0) 编辑
摘要:01; 02; 1-2+3-4+5...+99-100 03; 0405AREA sum2Code, CODE, READONLY 06ENTRY 07start 0809mov r0, #0 ;保存结果 10mov r1, #1 ;循环计数器 11sum2loop ;特点奇数加偶数减 12tst r1, #1 ;测试奇偶性 13addne r0, r0, r1 ;加奇数 14subeq r0, r0, r1 ;减偶数 15add r1, r1, #1 16cmp r1, #101 17bmi sum2loop 181920stop 21mov r0, #0x18 22ldr r1, =0.. 阅读全文
posted @ 2011-09-19 08:58 auleaf 阅读(351) 评论(0) 推荐(0) 编辑
摘要:; 02; 求 19! 03; 0405AREA jcCode, CODE, READONLY 06ENTRY 07start 0809mov r0, #1 ;结果低32位 10mov r1, #0 ;结果高32 11mov r2, #19 ;循环计数器 1213jcloop 14umull r0, r3, r2, r0; [r3 r0] <- r0 * r2 15mla r1, r2, r1, r3; r1 <- r1 * r2 + r3 16subs r2, r2, #1 17bne jcloop 181920stop 21mov r0, #0x18 22ldr r1, =0x 阅读全文
posted @ 2011-09-19 08:56 auleaf 阅读(185) 评论(0) 推荐(0) 编辑
摘要:01; 02; 代码演示 03; 04;定义数据段 05AREA p1Data, DATA, READWRITE 06buf1 dcd 1,2,3,4,5,6 ;定义字 07buf2 dcw 1,2,3,4,5,6 ;定义半字 08buf3 dcb 1,2,3,4,5,6 ;定义字节 09str dcb "123456", 0 ;定义字符串 10align 4 11buf4 space 256 ;分配256字节空间 12131415AREA p1Code, CODE, READONLY 1617ENTRY 18start 19;buf1 copy to buf4 20ldr 阅读全文
posted @ 2011-09-19 08:56 auleaf 阅读(312) 评论(0) 推荐(0) 编辑
摘要:int a[10];a[10]={1,2,4,5,1,5,1,2,3,4} //出错,因为此时a[10]代表一个元素,而且是已经越界的元素。int a[10]; 数组a里全是随机值int a[10]={}; 数组a里全是0int a[10]={1,5,2,1,13}; 后面5个全是0只要定义数组时有=,就会初始化。 阅读全文
posted @ 2011-09-19 08:55 auleaf 阅读(241) 评论(0) 推荐(0) 编辑
摘要:shell脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到执行。实际上和在shell中输入命令是一样的效果。 在Shell中引号分为2种:单引号、双引号。 (1)双引号 由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其特殊功能外,其余字符通常作为普通字符对待。 (2)单引号 由单引号括起来的字符都作为普通字符出现。一个例子:#!/bin/sh //这个正确read nfor((k=1;k<=$n;k++))doa=`expr $k \* $k`echo "$k square= $a"done#!/bin/sh //这个有 阅读全文
posted @ 2011-09-19 08:54 auleaf 阅读(173) 评论(0) 推荐(0) 编辑
摘要:有了动态内存分配的基础,要实现链表就不难了。 所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分: 1、数据域:用来存储本身数据 2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。 例:typedef struct node{ char name[20]; struct node *link;}stud; 这样就定义了一个单链表的结构,其中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用... 阅读全文
posted @ 2011-09-19 08:52 auleaf 阅读(236) 评论(0) 推荐(0) 编辑
摘要:linux内核源代码情景分析 非扫描版 上下册合订版 字清楚 带书签 1575页 pdfhttp://download.csdn.net/source/2002579*************************************************************linux设备驱动开发详解 pdf,针对ARM9 s3c2410 经典 宋宝华http://download.csdn.net/source/3135744随书光盘:http://download.csdn.net/source/2530660********************************** 阅读全文
posted @ 2011-09-19 08:51 auleaf 阅读(178) 评论(0) 推荐(0) 编辑
摘要:带状态切换的跳转指令:BX 汇编格式: BX{<cond>} Rm 功 能: BX 指令跳转到指令中所指定的目标地址,并实现状态的切换。Rm 是一个表达目标地址的寄存器。当Rm 中的最低位Rm[0] 为 1 时,强制程序从ARM 指令状态跳到Thumb 指令状态;当 Rm 中的最低位Rm[0]为0 时,强制程序从Thumb 指令状态跳到ARM 指令状态。 BX 指令示例 CODE32 ;ARM 程序段,32 位编码 arm1 ADR R0,thumb1+1 ;伪指令,把语句标号thumb1 所在地址 ;赋给R0 ,末位R0[0] 置1 ,要跳转THUMB 指令集;THUMB 指令集 阅读全文
posted @ 2011-09-19 08:49 auleaf 阅读(3013) 评论(0) 推荐(0) 编辑
摘要:在ARM处理器的汇编语言中,对指令语法格式中的<shifter_operand>的常数表达式有这样的规定:“该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的。”首先从ARM指令系统的语法格式说起。一条ARM指令语法格式分为如下几个部分:<opcode>{<cond>}{S} <Rd>,<Rn>{,<shifter_operand>}其中,<>内的项是必须的,{}内的项是可选的,如<opcode>是指令助记符,是必须的,而{<cond>}为指令执行条件,是可选的,如果不 阅读全文
posted @ 2011-09-19 08:49 auleaf 阅读(573) 评论(0) 推荐(0) 编辑
摘要:CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C)C 控制域屏蔽字节(psr[7:0])X 扩展域屏蔽字节(psr[15:8])S 状态域屏蔽字节(psr[23:16])F 标志域屏蔽字节(psr[31:24])常用于MRS或MSR指令,用于psr中的值转移到寄存器或把寄存器的内容加载到psr中.如: MSR CPSR_c,#0xd3 阅读全文
posted @ 2011-09-19 08:48 auleaf 阅读(331) 评论(0) 推荐(0) 编辑
摘要:同学们在学习ARM指令时,多数都会对adr和ldr这两个命令产生疑惑,那他们究竟有什么区别呢?其实这两个都是伪指令:adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指定的寄存器中。到这儿就会看到其中的区别了。如果在程序中想加载某个函数或者某个在联接时候指定的地址时请使用adr,例如在lds中需要重新定位的地址。当加载32为的立即数或外部地址时请用ldr。我给大家先举个例子:AREA test,CODE,READONLY ENTRYldr r0,_start ad 阅读全文
posted @ 2011-09-19 08:47 auleaf 阅读(402) 评论(0) 推荐(0) 编辑
摘要:最近发现了一个问题,是关于char *和char [ ]的区别见程序如下:#include "stdafx.h"#include "string.h"#include "stdio.h"int main(int argc, char* argv[]){ char source[]="This is a source sentence"; //char *source="This is a source sentence"; strtok(source,"a"); printf 阅读全文
posted @ 2011-09-19 08:42 auleaf 阅读(339) 评论(0) 推荐(0) 编辑
摘要:#include<stdio.h>#include<stdlib.h>int main(){int **p; //定义一个二级指针int n=3,m=4; //4行3列p=(int **)malloc(4*sizeof(int *)); //分配一块空间,大小是4*sizeof(int *),保存四个指针,每个指针指向每一行的位置int i=0;for(i=0;i<m;i++){*(p+i)=(int *)malloc(3*sizeof(int)); //分配4次空间,每次分配3*sizeof(int)大小,里面保存3个值}int j;for(i=0;i<4 阅读全文
posted @ 2011-09-19 08:40 auleaf 阅读(524) 评论(0) 推荐(0) 编辑
摘要:#include<iostream>#include<string.h>using namespace std;class Bank{private:int num;char *name;float money;public:Bank(int i,char* na ,float j){num=i;name=new char[20]; //开辟name的空间,而不是形参na的空间//name=na; //不能直接复制,要用strcpy函数。strcpy(name,na);money=j;}void InMoney(float n){money+=n;cout<< 阅读全文
posted @ 2011-09-19 08:40 auleaf 阅读(112) 评论(0) 推荐(0) 编辑
摘要:13个人围成一圈,从第一个人开始顺序报数1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。#include<stdio.h>#include<stdlib.h> //malloc要用到 struct node{int data;struct node *next;};node *create(int n){node *h,*r,*p;h=(node *)malloc(sizeof(node));h->data=1; //从1开始r=h;int i;for(i=2;i<=n;i++){p=(node *)malloc(sizeof(node)) 阅读全文
posted @ 2011-09-19 08:39 auleaf 阅读(207) 评论(0) 推荐(0) 编辑
摘要:指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减运算的意义是不一样的。例如: 例二: 1。 char a[20]; 2。 int *ptr=a; ... ... 3。 ptr++; 在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理 的:它把指针ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做单位的,故ptr所指向的地址由原来的变量a的 地址向高地址方向增加了4个字节。由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0 号单元. 阅读全文
posted @ 2011-09-19 08:29 auleaf 阅读(301) 评论(0) 推荐(0) 编辑
摘要:方法1:#include<stdio.h>#include<string.h>int main(){char *src="hello,world";int len=strlen(src);char *dest=(char*)malloc(len+1); //要为\0分配空间char *p=dest;char *q=&src[len-1]; //指向最后一个字符while(len--!=0){*p++=*q--; //注意不要丢掉*号}p=0; //字符串尾部要加上\0printf("%s\n",de... 阅读全文
posted @ 2011-09-18 00:43 auleaf 阅读(5805) 评论(0) 推荐(0) 编辑
摘要:一 内核的功能1 系统调用2 进程控制3 内存管理4 文件系统管理5 设备驱动程序二 编译linux内核进入到内核源代码目录:cd /usr/src/linux-2.6.15make configmake xconfigmake menuconfigmake三 裁剪linux:目的是创建嵌入式linux。裁剪的对象包括:1 linux内核2 库3 守护进程4 GUI四 内核裁剪1 选择合适的文件系统:ext2,ext3,jffs22 模块机制3 网络协议4 无用的驱动程序5 调试信息五 共享库裁剪:思想:通过提取和解析系统库内目标文件,符号的依赖关系,通过对这些依赖构造关系模型进行关系演算,根 阅读全文
posted @ 2011-09-17 23:04 auleaf 阅读(194) 评论(0) 推荐(0) 编辑
摘要:为什么需要中断?1 外设的处理速度一般慢于CPU。2 CPU不能一直等待外部事件,所以设备必须有一种方法来通知CPU它的工作进度,这种方法就是中断。在linux驱动程序中,为设备实现一个中断包含两个步骤:1 向内核注册中断2 实现中断处理函数共享中断就是将不同的设备挂到同一个中断信号线上。linux对共享的支持主要是为PCI设备服务。什么是中断处理程序,有何特别之处?中断处理程序就是普通的C代码。特别之处在于中断处理程序是在中断上下文中运行的,它的行为受到某些限制:1 不能向用户空间发送或接受数据2 不能使用可能引起阻塞的函数3 不能使用可能引起调度的函数 阅读全文
posted @ 2011-09-17 23:04 auleaf 阅读(208) 评论(0) 推荐(0) 编辑
摘要:1.什么是位段在大多数的计算机系统中, 一个字节是由八个更小的, 称作为位的单位组成的。位是比字节更小的单位。位只有两个值, 1 或 0 。因此, 存储在计算机存储器中的一个字节可以看成由八个二进制数字形成的串。例如, 一个存放值 36 的字节是八个二进制数字的串: 可以表示成 00100100。 存入值24 的字节可以表示成 00010100。有时, 我们希望不仅对字节进行操作, 也要能对位进行操作。例如, 用布尔真或假条件表示的标志, 在计算机中可用位来表示。但是, 说明一个用作标志的普通变量至少要用一个字节---8 位, 而在某些计算机系统中则可能是 16 位。 如果我们想在一个很大的表 阅读全文
posted @ 2011-09-16 23:26 auleaf 阅读(271) 评论(0) 推荐(0) 编辑
摘要:一 嵌入式系统定义:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统。二 嵌入式学习的重点:1 站在全局进行领会,不纠缠细节2 了解嵌入式系统开发的流程3 学习嵌入式系统开发的理念4 了解嵌入式系统开发的内容5 结合自身找到切入点,确定学习内容以及学习的方法6 最重要的是知道做什么,而不是怎么做三 嵌入式系统的特点:1 嵌入式系统低功耗,体积小,专用性强。嵌入式系统与PC机的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,能够把PC机中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计 阅读全文
posted @ 2011-09-15 23:49 auleaf 阅读(236) 评论(0) 推荐(0) 编辑
摘要:一 bootloader的概念bootloader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。二 bootloader的特征1 初始化硬件,特别是内存控制器2 提供linux内核的启动参数3 启动linux内核简化开发过程的一些特征:1 读写存储器2 通过串口/网口下载文件到RAM3 从RAM复制文件到FLASH中三 bootloader安装系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如, 阅读全文
posted @ 2011-09-15 23:41 auleaf 阅读(795) 评论(0) 推荐(0) 编辑