自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(303)
  • 资源 (13)
  • 收藏
  • 关注

转载 TCP协议三次握手过程分析

TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urge

2013-03-04 21:30:42 740

转载 linux2.6.35zImage生成流程简介

zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外, Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持

2013-02-27 19:54:59 730

转载 采用busybox的嵌入式Linux根文件系统的的制作方法 .

在嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制。根文件系统一直是Linux系统不可或缺的组件,在嵌入式Lin-ux中,内核在启动期间进行的最后操作之一就是安装根文件系统。Busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。1

2013-02-26 19:48:39 764

转载 嵌入式根文件系统的移植和制作详解

==============================================================一、文件系统理论上说一个嵌入式设备如果内核能够运行起来,且不需要运行用户进程的话,是不需要文件系统的,文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结

2013-02-26 19:43:37 616

转载 Linux的mount命令详解

命令格式:  mount [-t vfstype] [-o options] device dir  其中:  1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有:  光盘或光盘镜像:iso9660  DOS fat16文件系统:msdos  Windows 9x fat32文件系统:vfat

2013-02-25 20:00:23 391

转载 TCP/IP 概述

层次概述TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。TCP/IP协议并不完全符合OSI的七层参考模型,OSI(Open System Interconnect)是传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该

2013-02-21 20:50:56 960

转载 怎么解决内存泄露问题?

1. 一般内存泄露都是在new 和delete 或malloc和free没有成对使用的情况下产生的。在代码量较少的情况下可自行检测。确保两着成对使用。2. c++中有智能指针的概念,sp和wp。这也是内存管理,避免内存泄露的一个方法。不过这个概念相对难度大一些。lz感兴趣的话可以上网搜关键字“C++智能指针”。3.在一些大的软件工程中,一般在代码设计完成后,会使用一些代码检测工具对代码的运

2013-02-21 20:10:34 1192

转载 大小端、网络字节序问题

总结:1、80X86使用小端法,网络字节序使用大端法。          2、二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int                来处理, unsigned short ,unsigned short 以网络字节序处理后再拷贝到发送的buffer里          3、结构体前要指定

2013-02-21 19:41:12 544

转载 可重入函数与不可重入函数的区别

可重入函数可以做这样的基本定义:重入意味着这个函数可以重复进入,可以被并行调用,可以被中断,它只使用自身栈上的数据变量,它不依赖于任务环境,在多任务调度过程中,它是安全的,不必担心数据出错。    不可重入函数基本上与可重入函数有相反的定义了:不可重入,意味着不可被并行调度,否则会产生不可预料的结果,这些函数提内一般使用了静态(static)的数据结构,使用了malloc()或者free()函

2013-02-21 19:35:13 625

转载 linux下可重入函数

可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。可重入函数使用的变量有两种情况:1.使用局部变量,变量保存在CPU寄存器中或者堆栈中;2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。?1

2013-02-21 19:16:28 437

转载 MII、GMII、RMII、SGMII、XGMII、XAUI、Interlaken

MII即媒体独立接口,也叫介质无关接口。它是IEEE-802.3定义的以太网行业标准。它包括一个数据接口,以及一个MAC和PHY之间的管理接口(图1)。数据接口包括分别用于发送器和接收器的两条独立信道。每条信道都有自己的数据、时钟和控制信号。MII数据接口总共需16个信号。管理接口是个双信号接口:一个是时钟信号,另一个是数据信号。通过管理接口,上层能监视和控制PHY。MII标准接口

2013-01-12 00:39:15 2360

转载 elf文件格式与动态链接库

机器执行的是机器指令,而机器指令就是一堆二进制的数字。高级语言编写的程序之所以可以在不同的机器上移植就因为有为不同机器设计的编译器的存在。高级语言的编译器就是把高级语言写的程序转换成某个机器能直接执行的二进制代码。以上的知识在我们学习CS(Computer Science)的初期,老师都会这么对我们讲。但是我就产生疑问了:既然机器都是执行的二进制代码,那么是不是说只要硬件相互兼容,不同操作系统下的

2012-12-22 00:19:24 636

转载 C语言可变参数

一、是什么我们学习C语言时最经常使用printf()函数,但我们很少了解其原型。其实printf()的参数就是可变参数,想想看,我们可以利用它打印出各种类型的数据。下面我们来看看它的原型:[cpp] view plaincopyprint?int printf( const char* format, ...);  int printf( const cha

2012-12-12 00:22:48 623

转载 软件破解简单上手 OllyDbg调试器应用

现在破解者们可能都在用OllyDbg调试器对软件进行动态的分析,因为目前多数的软件都工作在WINDOWS XP的平台上,并且OllyDbg调试器结合了动态和静态调试的特性,简单易用。         针对这次要破解的小程序,熟悉一下OllyDbg调试器的用法。工作前的准备         OllyDbg调试器的下载:        http://www.pediy.com/tool

2012-12-10 23:09:50 1086

转载 [Win32]一个调试器的实现(十一)显示函数调用栈

本文讲解如何在调试器中显示函数调用栈,如下图所示: 原理首先我们来看一下显示调用栈所依据的原理。每个线程都有一个栈结构,用来记录函数的调用过程,这个栈是由高地址向低地址增长的,即栈底的地址比栈顶的地址大。ESP寄存器的值是栈顶的地址,通过增加或减小ESP的值可以缩减或扩大栈的大小。上一篇文章已经简略地介绍过在调用函数时线程栈上会发生什么事情,现在我们再来详细地看看这个过程:

2012-12-10 23:07:46 595

转载 [Win32]一个调试器的实现(十)显示变量

上回介绍了微软的符号模型,有了这个基础知识,这回我们向MiniDebugger中添加两个新功能,分别是显示变量列表和以指定类型显示内存内容。显示变量列表用于列出当前函数内的局部变量或者全局变量;以指定类型显示内存内容用于读取指定地址处的内存内容,然后将这些二进制数据按照类型的格式解析成可读的内容并显示出来。如下面的截图所示: 使用lv命令显示局部变量时,每一列从左到右分别是:类型,名称

2012-12-10 23:04:55 776

转载 [Win32]一个调试器的实现(九)符号模型

在接下来的文章中会讲解如何在调试器中显示局部变量和全局变量的类型和值。实现这个功能一定要有调试符号的支持,因为调试符号记录了每个变量的名称,类型,地址,长度等信息。这不是一件轻松的事情,因为你首先要对符号模型有一定的了解。所以本文的主要目的就是介绍DbgHelp中的符号模型。 符号模型这里所说的“符号模型”指的是各种符号之间的逻辑关系,虽然微软定义了各种不同格式的符号文件,但是它们使用

2012-12-10 22:59:02 1001

转载 [Win32]一个调试器的实现(八)单步执行

上回讲解了如何实现断点功能,这回讲解如何实现与断点紧密相关的单步执行功能。单步执行有三种类型:StepIn,StepOver和StepOut,它们的实现方式比较多样化,单独实现它们的话并不困难,但是将它们整合到一起就比较困难了,特别是加上断点功能之后,程序的逻辑更加难以理解。本文首先单独讲解每种单步执行的原理,最后讲解如何将它们整合到一起。这都是我个人的实现方法,大家可以用来参考。(注意:本文所讲

2012-12-10 22:07:09 685

转载 [Win32]一个调试器的实现(七)断点

断点是最基本和最重要的调试技术之一,本文讲解了如何在调试器中实现断点功能。 什么是断点在进行调试的时候,只有被调试进程暂停执行时调试器才可以对它执行操作,例如观察内存内容等。如果被调试进程不停下来的话,调试器是什么也做不了的。要使被调试进程停下来,除了几个在特定时刻才发生的调试事件外,唯一的途径就是引发异常。 断点正是用来达到上述目的的异常,在第三篇文章的异常代码表中,有一种E

2012-12-10 22:04:02 672

转载 [Win32]一个调试器的实现(六)显示源代码

上一篇文章介绍了调试符号以及DbgHelp的加载和清理,这回我们使用它来实现一个显示源代码的功能。该功能的实际使用效果如下图所示:该功能不仅仅是显示源代码,还要显示每一行代码对应的地址。实现该功能大概需要进行以下的步骤:①获取下一条要执行的指令的地址。②通过调试符号获取该地址对应哪个源文件的哪一行。③对于其它的行,通过调试符号获取它对应的地址。 第一步可以通过获取E

2012-12-10 22:02:45 567

转载 [Win32]一个调试器的实现(五)调试符号

一个调试器应该可以跟踪被调试程序执行到了什么地方,显示下一条将要执行的语句,显示各个变量的值,设置断点,进行单步执行等等,这些功能都需要一个基础设施的支持,那就是调试符号。 什么是调试符号我们知道,在exe、dll等可执行文件中保存的数据大部分都是二进制指令,CPU直接读取这些指令并执行。那么调试器是如何知道每条指令对应哪个源文件的哪一行代码呢?它又是如何知道每个变量和函数的名称,并显

2012-12-10 22:01:29 916

转载 [Win32]一个调试器的实现(四)读取寄存器和内存

在前几篇文章中,我实现的那个调试器只能被动接收调试事件并输出这些事件的信息。现在,我要将它修改成可以接收命令,并根据命令对被调试进程进行各种操作。首先从最基本的操作开始。 获取寄存器的值每个线程都有一个上下文环境,它包含了有关线程的大部分信息,例如线程栈的地址,线程当前正在执行的指令地址等。上下文环境保存在寄存器中,系统进行线程调度的时候会发生上下文切换,实际上就是将一个线程的上下文环

2012-12-10 21:59:33 876

转载 [Win32]一个调试器的实现(三)异常

这回接着处理上一篇文章留下的问题:如何处理EXCEPTION_DEBUG_EVENT这类调试事件。这类调试事件是调试器与被调试进程进行交互的最主要手段,在后面的文章中你会看到调试器如何使用它完成断点、单步执行等操作。所以,关于这类调试事件的处理很自由,调试器的作者可以根据需要进行不同的处理。但是,在对其进行处理之前必须要了解一些关于异常的知识,这也是本文的重点。(本文的内容参考了《软件调试》一书)

2012-12-10 21:56:11 901

转载 [Win32]一个调试器的实现(二)调试事件的处理

上一篇文章说到了调试循环的写法,这回讲一下调试器应该如何处理各种调试事件。 RIP_EVENT关于这种调试事件的文档资料非常少,即使提到也只是用“系统错误”或者“内部错误”一笔带过。既然如此,我们也不需要对其进行什么处理,只要输出一条信息或者干脆忽略它即可。 OUTPUT_DEBUG_STRING_EVENT当被调试进程调用OutputDebugString时就会引发该类调

2012-12-10 21:52:26 527

转载 [Win32]一个调试器的实现(一)调试事件与调试循环

前言程序员离不开调试器,它可以动态显示程序的执行过程,对于解决程序问题有极大的帮助。如果你和我一样对调试器的工作原理很感兴趣,那么这一系列文章很适合你,这些文章记录了我开发一个调试器雏形的过程,希望对你有帮助。或许我写的代码很拙劣,还请大家多多见谅! 这个调试器使用Visual Studio 2010作为开发工具,是一个控制台程序。为了简化,一切输入输出都使用C++标准库的相关类,而且

2012-12-10 21:51:07 452

转载 assert宏的实现

在看《编写高质量的C语言代码》中第二章提到,使用断言,于是翻出以前看过的《C标准库》查看assert宏的实现。这篇文章主要内容来自 《C标准库》1.头文件中除了定义宏assert以外还引用了另外一个宏 NDEBUG,后者不是定义在中的。如果NDEBUG出现在任何包含的文件中,并被定义为宏名,那么宏assert就直接被定义为:[cpp] view plaincop

2012-12-09 00:32:40 516

转载 Linux内核中的printf实现

从main.c中的printf开始读这个函数。首先看printf函数的定义:1 static int printf(const char *fmt, ...)2 {3     va_list args;4     int i;5  6     va_start(args, fmt);

2012-12-08 23:44:27 978

转载 C/C++程序到内存分配个人总结

一、一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——全局变量和静态变量存储在

2012-12-07 20:03:09 359

转载 C语言条件编译及编译预处理阶段

一、C语言由源代码生成的各阶段如下:<!--p {margin-bottom:0.21cm}-->C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件       其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先

2012-12-07 19:59:07 366

转载 C++函数声明和定义

声明是告诉编译器一些信息,以协助编译器进行语法分析,避免编译器报错。而定义是告诉编译器生成一些代码,并且这些代码将由连接器使用。即:声明是给编译器用的,定义是给连接器用的。这个说明显得很模糊,为什么非要弄个声明和定义在这搅和?那都是因为C++同意将程序拆成几段分别书写在不同文件中以及上面提到的编译器只从上朝下编译且对每个文件仅编译一次。     编译器编译程序时,只会一个一个源文件编译,并分别

2012-12-06 10:56:40 430

原创 Linux 常用Shell

一、文件、目录操作命令1、ls命令功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表ls -a 显示所有文件包括隐藏文件ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行ls -lh 显示文件的大小,以容易理解的格式印出文件大小 (例如 1K 234M 2G)ls -lt 显示文件,按照修改时间排序 2、cd命令功能:改名目录 cd

2012-10-26 21:54:08 1321

转载 SDRAM SPD

存插槽中的模组存在的信息检查。这样的话,模组有关的信息都必须纪录在EEPROM中.习惯的,我们把这颗EEPROM IC就称为SPD了。为Serial Presence Detect 的缩写,它是烧录在EEPROM内的码,以往开机时BIOS必须侦测memory,但有了SPD就不必再去作侦测的动作,而由BIOS直接读取 SPD取得内存的相关资料。  SPD是一组关于内存模组的配置信息,如P-B

2012-09-29 08:54:25 1364

转载 DEBUG_PRINT

在程序里为了调试的便利,我们经常要打印一些信息,如函数的返回值什么的,同时我们又不想在公布的法度中显示这些信息,于是我们如许实现:#ifdef _DEBUG   printf("This is a debug information.\n");#endif     然则,在法度里为了调试的便利,我们经常要打印一些信息,如函数的返回值什么的,同时我

2012-08-27 16:25:22 868

转载 Local Bus总线原理

Local Bus总线又称为CPU总线,根据高低位地址线序的差异,又可分为Motorola CPU总线和Intel CPU总线。古老的CS51单片机就是Intel CPU总线的典型代表,而我们常用的Power PC就是Motorola CPU总线架构,它是从60X总线衍变过来的(60X总线支持64、32、16、8四种可选位宽模式),由于Local Bus总线是直接从60X总线上通过桥片分出来的,所

2012-08-15 10:09:04 5337

转载 gcc详解

1。gcc包含的c/c++编译器    gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,一般c程序就用gcc编译,c++程序就用g++编译     2。gcc的基本用法     gcc test.c这样将编译出一个名为a.out的程序     gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字

2012-07-16 16:57:31 450

转载 memcpy memmove区别和实现

memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝(3)当源内存的首地址小于目标内存

2012-07-09 17:29:50 505

转载 UcOS-II 和linux比较

着现代计算机技术的飞速发展和互联网技术的广泛应用,从pc时代过渡到了以个人数字助理、手持个人电脑和信息家电为代表的3c(计算机、通信、消费电子)一体的后pc时代。后pc时代里,嵌入式系统扮演了越来越重要的角色,被广泛应用于信息电器、移动计算机设备、网络设备和工控仿真等领域。嵌入式系统的开发也成为近年it行业的技术热点。完成简单功能的嵌入式系统一般不需要操作系统,如以前许多m cs51系列单片机

2012-07-08 21:29:03 981

转载 arm 基础:Nand Flash与Nor Flash的区别

NOR的特点是芯片内执行(XIP,eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。优点是可以直接从FLASH中运行程序,但是工艺复杂,价格比较贵,NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。  NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速

2012-07-07 00:08:45 630

转载 嵌入式工程师C语言面试常见的0x10个问题

1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 要点:①#define语法的基本知识(例如:不能以分号结束、括号的使用,等等)②懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

2012-07-06 00:07:45 611

转载 函数指针和指针函数

一 通常的函数调用一个通常的函数调用的例子: //自行包含头文件 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun(10); //这里是调用MyFun(10);函数 return 0; } void MyFun(int

2012-07-05 15:21:21 574

VGA原理与实现, VGA驱动

VGA驱动与实现. VGA分类,VGA时序

2011-07-04

DE0_PWM_LED C语言版本

利用PWM原理控制LED亮度, 基於DE0 FPGA 开发平台.

2011-02-19

DE0_PWM_LED verilog source code

利用PWM 原理控制LED亮度, 采用了DE0 FPGA 开发平台..开发tool 为 Quartus II & Nios II

2011-02-19

jpeg encode and decode

jpeg 编码解码,用c/c++实现,读取bmp文件,压缩成为jpeg文件,再从jpeg文件解码为bmp文件

2010-09-12

micro_FAT_FileSystem

开源的FileSystem,能支持FAT12,FAT16,FAT32 文件系统,用C实现

2010-04-27

FPGA与SOPC设计教程:DE2实践

与Altera DE2平台紧密结合的一本书

2010-04-27

C语言嵌入式系统编程

从软件架构、内存操作、屏幕操作、键盘操作、性能优化等多方面阐述C语言嵌入式系统的编程技巧

2010-04-27

窗口置顶工具 窗口置顶

把对话框中的图标拖到需要置顶的窗口上即可

2009-10-14

简单任务管理器 进程查看

一个简单的任务管理器,实现了查看进程和终止指定进程的功能

2009-10-13

计算机网络讲义,一个好的讲义

计算机网络讲义,我学习计算机网络时候所用课件,大家快来看吧

2009-03-01

雪莲定时关机器

VC做的一个定时关机,多多支持哈

2007-08-26

雪莲定时关机器

雪莲定时关机器,请大家多多支持哈

2007-08-26

用汇编写的通讯录

用汇编写的通讯录,希望大家多多指教

2007-03-13

空空如也

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

TA关注的人

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