自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (1)
  • 收藏
  • 关注

原创 排序算法的集锦

排序是将一个数据元素的任意序列,重新排列成一个按关键字有序排列的序列。基本术语:关键字:数据元素中某一数据项的值。内部排序是排序的基础,根据排序过程中所依据的原则可以分为:插入排序,交换排序,选择排序,归并排序和基数排序。 1. 调用qsort()的排序函数2.插入排序直接插入排序shell排序3.交换排序冒泡排序法快速排序4.选择排序简单选

2011-12-07 22:00:35 584

转载 Java对象数组的使用

对象可以用数组来存放,通过下面两个步骤来实现:1、 声明类类型的数组变量,并用new分配内存空间给数组。2、 用new产生新的对象,并分配内存空间给它 例如,要创建三个Person类类型的数组元素,可用下列的语法: Person p[] ;          // 声明Person类类型的数组变量p = new P

2013-05-11 19:54:56 2517

原创 静态代码与main函数

public class Person { public Person() { System.out.println("this is a constructor!"); } static //this is programming first! { System.out.println("this is static code in constructor!"); }}

2013-05-11 11:05:23 1033

原创 Java构造函数的说明。

Java类的构造方法(constructor):1.构造函数名与类名相同2.构造函数不返回任何值,也没有返回类型(包括void)3.每一个类可以有一个或多个构造方法;4.构造方法在创建对象时自动执行,不用显式地直接调用。实现形式:1.系统默认的构造方法。2.自定义构造方法与方法重载3.自定义无参的构造方法4.thispublic class Person {

2013-05-10 21:09:58 1175

原创 linux常用命令之小结(持续更新中)

1.echo:将各个参数打印到标准输出。2.source:执行脚本文件,可以改变当前shell的环境变量。3.more:功能与cat类似,另外还有按页显示内容,和搜索内容的功能。4.set:显示本地变量5.ubset:从当前shell删除变量或函数6.export:显示和设置环境变量(-n:删除指定的变量,-p:列出所有环境变量)。7.env:显示环境变量 (-i:不带环境

2013-04-25 21:13:02 822

原创 linux-shell之初探。

最近闲来无事,准备学习下shell编程。至于什么是shell,shell是用来干什么的?我相信但凡学习他的人都是有目的而来的。如果是像我这样的fish,那么还是等用到的时候再来学习吧。       参考书籍:《shell编程:从入门到精通》,张昊著。       接下来就可以开始我们的shell之旅了。首先,介绍到的是如何执行linux程序的?实际上,可分为两种,一种是调用解释器执行程序,

2013-04-24 21:50:13 893

原创 Win8离线安装.Net Framework 3.5时出现错误: 0x800f0906 解决办法。

网上有很多离线的解决办法,但是,我在安装是还是出现了错误。具体参考:http://softbbs.zol.com.cn/1/20_2854.html。1. 启动本地组策略编辑器或组策略管理控制台,输入gpedit.msc-确定。2. 展开计算机配置,展开管理模板,然后选择系统。3. 打开可选组件的安装和修复组件指定设置组策略设置,然后再选择启用。

2013-04-11 11:22:37 3213

转载 poll机制分析(韦东山)

poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机

2012-05-21 20:48:23 1742 2

转载 linux_ioctl与内核交换数据

1. 前言 使用ioctl系统调用是用户空间向内核交换数据的常用方法之一,从ioctl这个名称上看,本意是针对I/O设备进行的控制操作,但实际并不限制是真正的I/O设备,可以是任何一个内核设备即可。2. 基本过程 在内核空间中ioctl是很多内核操作结构的一个成员函数,如文件操作结构struct file_operations(include/linux/fs.h)、协

2012-05-21 20:47:47 1122

原创 应用程序和内核模块的区别

1.应用程序是从头到尾执行单个任务;模块却只是预先注册自己以便服务于将来的某个请求,  其中,函数init_module(模块的入口)的任务是为以后调用模块函数预先做准备,函数cleanup_module(模块的第二入口)是在模块卸载时调用。2.应用程序可以调用它未定义的函数,因为在连接过程能够解析外部引用从而使用适当的函数库;  模块仅仅被连接到内核,因此它仅能调用有内核导出的函数(

2012-05-21 20:47:03 1930

原创 原子操作

原子操作,顾名思义,就是说像原子一样不可再细分.一个操作是原子操作,意思就是说这个操作是以原子的方式被执行,要一口气执行完,执行过程不能够被OS的其他行为打断,是一个整体的过程,在其执行过程中,OS的其它行为是插不进来的。在linux中提供了两种形式的原子操作:一种是对整数进行的操作一种是对单独的位进行操作

2012-05-21 20:46:31 588

原创 免锁算法----原子变量

原子变量完整的锁机制对一个简单的整数来讲显得浪费。内核提供了一种原子的整数类型,称为atomic_t,定义在。原子变量操作是非常快的, 因为它们在任何可能时编译成一条单个机器指令。以下是其接口函数: void atomic_set(atomic_t *v, int i); /*设置原子变量 v 为整数值 i.*/atomic_t v = ATOMIC_INIT(0);  /*编

2012-05-21 20:46:07 903

原创 IO端口与IO内存

IO端口访问的一种方式是直接使用IO端口操作函数,步骤:申请,操作,释放。IO端口访问的另一种方式是将IO端口映射为内存进行访问。步骤:申请,ioport_map,操作,ioport_unmap,释放。IO内存的访问步骤:申请,ioremap,操作,iounmap,释放。将设备地址映射到用户空间:void *mmapmunmap

2012-05-21 20:45:37 590

原创 Completion

completion是一种轻量级的机制,它允许一个线程告诉另一个线程某个工作已经完成。completion的典型应用是模块退出时的内核线程终止。代码必须包含。使用的代码如下:  1.创建completion    DECLARE_COMPLETION(my_completion);/* 创建completion(声明+初始化) */        如果必须动态的创建和初

2012-05-21 20:43:08 724

转载 kmalloc vmalloc kzalloc malloc 和 get_free_page()

http://www.360doc.com/content/11/1201/10/1317564_168823219.shtml

2012-03-30 21:53:35 830

转载 cdev_alloc和cdev_init

内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj;          // 每个 cdev都是一个 kobjectstruct module *owner;       //指向实现驱动的模块const struct file_op

2012-03-30 21:27:19 2739

原创 对C程序设计中swap的再次理解

附代码如下:#includevoid swap1(int a, int b){ int temp; temp = a; a = b; b = temp; printf("%d,%d\n",a,b);}void swap2(int *x, int *y){ int temp; temp = *x; *x = *y; *y = temp; printf("%d,%

2012-03-14 15:50:58 1120

原创 Uboot之四下载sdram运行,ok。

1.首先上图,本人经过一周左右的时间,参考网上众多资料,主要参考《uboot1.1.6到TQ2440的文档》,首次修改成功uboot-2010.06。。2,这部分大致说明需要修改的文件及所在位置,至于为什么这样修改,以及需要查看的相关手册,不在叙述。修改SDRAM的配置# vi board/samsung/Nissa2440/lowlevel_init.S 54 #defin

2012-03-07 17:15:14 1224

转载 ROM、RAM、DRAM、SRAM、FLASH.....的区别?

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。   RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常

2012-03-06 16:36:15 568

原创 归并排序之----递归

以下代码来自维基百科:采用递归的思想,实现归并排序。归并是指把两个或者多个有序表进行合并,得到一个新的有序表。将两个有序子表合并成一个有序表,称为二路归并。 #include #include #include #include #define Type int#define NUM 12#define Num NUM-1void print(Type A

2011-12-07 20:18:02 560

原创 算法与数据结构注意----待续

少乘除,多移位;少while,多for。

2011-12-07 19:42:57 414

原创 选择排序之----堆排序

堆排序是简单选择排序的改进,是一种不稳定的排序方法。基本思路:对一组待排序的记录序列,先将其关键字按堆的定义排列一个序列(称为初建堆),找到最小(最大)关键字后,将其取出。用剩余的n-1个元素再重建堆,便可得到次小(次大)值。如此反复执行,直到全部关键字排好序为止。#include#define Type int#define MARK 0 //占据a[0],不起实际作

2011-12-07 18:27:12 714

原创 选择排序之----简单选择排序

选择排序是指每次从待排序的记录中选出关键字值最小(或最大)的记录,顺序放在已排序的子序列的后面,直到全部排完。简单选择排序的基本思路:1.查找待排序序列中最小的记录,并将它和该区间第一个记录交换;2.重复1,直到第n-1躺排序结束。简单选择排序是不稳定的排序。#include#define Type intvoid select_sort(Type *buf, in

2011-12-04 16:14:46 886

原创 插入排序之----shell排序

shell排序是插入排序的一种,在时间效率上有较大的改进。是一种不稳定的排序方法。基本思想:选定第一个增量d1 算法的思路:shell排序算法通过三重循环实现;1.外循环以各种不同的间隔距离d进行循环,直到d=1为止。2.第二重循环是在某一个d值下对所分的组进行组循环3.第三重循环是对第二重循环中所分的每个组,进行组内循环。 算法实现:#include#

2011-12-04 11:08:31 788

原创 插入排序之----直接插入排序

直接插入排序是稳定的排序方法。基本思路:依次把待排序的记录逐一按其关键字的大小插入到一个已经排好序的有序序列中去,直到所有的记录插完位置,得到一个新的有序序列。算法的思路:1.设置监视哨x,将待排序的数据赋给x,对于整个数组的排序而言,一般选第二个数据;2.设置开始查找的位置j = i - 1;3.在数组中先前扫描,扫描中将第j个记录后移,并且j--,为下一次循环做准备,直到x

2011-12-04 10:43:23 1001 4

原创 交换排序之----快速排序

快速排序是对冒泡排序的改进,是基于比较的内部排序方法中速度最快,也因此而得名。基本思路:在待排序的数据中,任选一数据作为基准(通常选取第一个数据),把所有数据分为大于此数据和小余此数据的两部分,结束后此数据位于这两部分的中间,并且不再参与排序,这样就完成了一次排序;对所分的前后两部分重新应用此方法进行排序。因此,整个排序的过程要用到递归算法。递归算法:解决问题时,把一个问题转换为一个新问题

2011-12-02 16:41:42 737

原创 交换排序之----冒泡排序法

冒泡排序(bubble sort)属于交换排序的类型,它从数组的一端开始,依次对相邻两元素进行比较,当发现它们不合顺序时就进行依次交换。冒泡排序是稳定的。排序的稳定性是指相等的二个数经排序后这两个数的相对位置不变。程序实现如下:#include#include#define Type int //要转换的数组类型,可以为char ,int,但是注意对 //main

2011-12-02 11:14:46 800

原创 调用qsort()的排序函数

qsort(void * buf, size_t num, size_t size, int(*compare)(const void *,const void *)),其中buf指向要排序的数组,num是数组中元素的个数,size是数组中每个元素的大小,一般用sizeof(数组的类型)来获取,compare指向的函数用于比较数组的两个元素的大小。它包含在中。#include#incl

2011-12-02 10:16:49 888

原创 different of strlen() and sizeof()

strlen(char *)是一个函数,是字符串的实际长度,它求得方法是从开始到遇到第一个'\0'为止。注意它接受的参数只能为char *,否则导致出错。sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。sizeof操作符返回这个指针占的空间,一般是4个字节sizeof typename :这种形式是不正确的,只有在sizeof 后是声明的变量名时才可以省略。在对c

2011-11-22 09:40:44 415

转载 signal函数详解

c traps and pitfalls 对signal函数解释得非常详细。  中 void ( *signal( int sig, void (* handler)( int ))) ( int );int (*p)();这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.int (*fun())();这个式子与上面式子的区别在于

2011-11-13 21:52:22 1280

原创 break和 continue

break:使程序从最内层循环体和switch语句内调出来,结束循环。继续执行逻辑上的下一条语句。continue:结束本次循环,接着执行下一次循环,只能出现在for, while, do循环中  例:1 #include  2 int main ()  3 {  4     int i;  5     for (i = 0; i   6     {  7

2011-11-13 21:42:10 461

原创 const char *p,char * const p,char const *p 的区别

区别这些,可以根据const离那个变量的距离最近加以区分:指向常量的指针:const char *p  显然和char const *p一样,都可以等价于const (char *p),它的意思是把char *p声明为常量,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向其他的对象。#includeusing namespace std;int main (){

2011-11-13 21:39:52 695

转载 函数指针和指针函数的区别

【函数指针】       在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可

2011-11-13 21:32:59 611

原创 类型void* 说明了什么样的返回值

void有两种用法:1.将无返回值的函数定义为void类型,表示函数没有返回值2.用void*定义指针,这是一个指向非具体数据类型的指针,称为无类型指针,或者通用型的指针变量,一般在使用的时候通过强制转化,可以给其他类型的指针变量赋值。 例如:NULL不是被定义为0,就是被定义为(void*)0,这两种值几乎是相同的。当程序中需要一个指针时,一个纯粹的0或者一个void指针都能自动

2011-11-13 10:52:28 6489

原创 Uboot之三 ~~~CPU的配置

预备知识:理解跳转指令b和ldr,其形式如下:b step1              //B 是最简单的分支。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的地址,从那里继续执行。                            注意存储在分支指令中的实际的值是相对当前的 R15(PC) 的值的一个偏移量,而不是一个绝对地址。

2011-11-07 22:22:35 1266

原创 Uboot之二 ~~~ Uboot.lds的分析

嵌入式linux系统主要有两部分组成:linux内核和linux根文件系统。而linux内核镜像不具备自启动,因为内核镜像的起始地址没有异常向量表,还有内核镜像的起始函数需要r0,r1,r3这3个寄存器初始化相应的值。所以,linux内核镜像需要被动加载,而完成此任务的就是bootloader。bootloader起始可以分为boot和loader两部分:在boot阶段完成的任务有:1

2011-11-07 20:17:50 865

原创 Uboot之一 ~~~ 板级的移植

刚开始做Uboot的移植,发现移植的任务量也是很大的。所以把每个主要的阶段分成一块,希望自己能坚持着写完。实验环境:win7 + Ubuntu10.04交叉编译器:arm-linux-gcc-4.3.2开发板:TQ2440 首先,分析Uboot已经支持的开发板,选择出于硬件配置最接近的开发板。首选MCU(微控制单元,micor control unit,集成了外围器件)相同的开

2011-11-07 17:28:16 861

转载 深入理解linux系统下proc文件系统内容

转自:http://www.itshanghai.net/technology/2009/0209/article_238.html 另外,可以参考这个http://www.centos.org/docs/5/html/5.1/Deployment_Guide/ch-proc.html·       内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统。 L

2011-11-04 15:52:12 486

转载 Virtaul box 中安装xp

准备工作:安装了vbox的win7家庭普通版 1、挂载chostxp的光盘到光驱,当然是虚拟机的光驱,启动虚拟机,可以看到光盘的启动菜单:2、选择“PM 8.05分区工具”,出现如下软件界面:3、右击未分配的空间,选择“建立”:4、第一个下拉框,选择“主要分割磁区”5、如果你希望有多个硬盘分区,在下边设置一个你希望的磁盘大小。6、单击“确定”,回到P

2011-11-01 20:05:15 904

原创 ubuntu10.04的nfs配置

1.准备工作,下载nfs相关的软件,并安装在搜索栏输入nfs,选中nfs-kernel-server nfs-common并安装。2.建立rootnfs目录# cd /# mkdir rootnfs3.修改/etc/exports,在此文档最后就如/rootnfs *(insecure,rw,sync,no_root_squash)4.执行以下命令,使修改生效# s

2011-11-01 09:25:10 850

vi配置成功

Ubuntu下vi编辑器的配置,经本人亲测,可以正常使用.

2012-08-10

空空如也

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

TA关注的人

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