摘要: 80186 的字长为16,而NVRAM的位宽为8,在这种情况下,我们需要为NVRAM 提供读写字节、字的接口,如下: 1 typedef unsigned char BYTE; 2 typedef unsigned int WORD; 3 /* 函数功能:读NVRAM 中字节 4 * 参数:wOffset,读取位置相对NVRAM 基地址的偏移 5 * 返回:读取到的字节值 6 */ 7 extern BYTE ReadByteNVRAM(WORD wOffset) 8 { 9 LPBYTE lpAddr = (BYTE*)(NVRAM + wOffset * 2); /* 为什么偏移要 阅读全文
posted @ 2013-11-20 10:00 Fight_4_ever 阅读(688) 评论(0) 推荐(0) 编辑
摘要: C 语言编译器会对用户书写的代码进行优化,譬如如下代码:int a,b,c;a = inWord(0x100); /*读取I/O 空间0x100 端口的内容存入a 变量*/b = a;a = inWord (0x100); /*再次读取I/O 空间0x100 端口的内容存入a 变量*/c = a;很可能被编译器优化为:int a,b,c;a = inWord(0x100); /*读取I/O 空间0x100 端口的内容存入a 变量*/b = a;c = a;但是这样的优化结果可能导致错误,如果I/O 空间0x100 端口的内容在执行第一次读操作后被其它程序写入新值,则其实第2 次读操作读出的内容 阅读全文
posted @ 2013-11-20 09:54 Fight_4_ever 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1 /* 存放中断的队列 */ 2 typedef struct tagIntQueue 3 { 4 int intType; /* 中断类型 */ 5 struct tagIntQueue *next; 6 }IntQueue; 7 8 IntQueue lpIntQueueHead; 9 10 __interrupt ISRexample ()11 {12 int intType;13 intType = GetSystemType();14 QueueAddTail(lpIntQueueHead, intType);/* 在队列尾加入新的中断 ... 阅读全文
posted @ 2013-11-19 16:46 Fight_4_ever 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 对于Linux跟Unix系统而言,make是一个极其重要的编译命令,我们在开发项目或者安装应用软件时,经常要用到make或make install,对于一个包含几十、几百甚至成千上万个源文件的项目,如果每次都要键入gcc或g++等命令来进行编译的话,那对于程序员简直就是一场噩梦,而使用make和makefile工具便可以简洁明了地理顺各个源文件之间纷繁复杂的相互关系,将大型项目分解成多个更易于管理的模块,自动完成编译工作,并且可以只对程序员上次编译后修改过的部分进行编译。因此,有效的利用make和makefile工具可以大大提高程序开发的效率。同时也极大地减轻了Linux下应用程序安装的难度。 阅读全文
posted @ 2013-11-15 13:12 Fight_4_ever 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 转载自:http://www.diybl.com/course/3_program/c++/cppjs/20071111/85534.htmlASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致 严重后果,同时也便于查找错误。ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。assert宏的原型定义在assert.h中,其作用是如果它的条件返回错误,则终止程序 阅读全文
posted @ 2013-11-15 09:13 Fight_4_ever 阅读(528) 评论(0) 推荐(0) 编辑
摘要: perror: #include #include函数定义 void perror(const char *s); perror ("open_port");函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 错误 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量error 的值来决定要输出的字符串。 在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了error的值。pe 阅读全文
posted @ 2013-11-15 09:07 Fight_4_ever 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 非阻塞模式有3种用途 1.三次握手同时做其他的处理。connect要花一个往返时间完成,从几毫秒的局域网到几百毫秒或几秒的广域网。这段时间可能有一些其他的处理要执行,比如数据准备,预处理等。 2.用这种技术建立多个连接。这在web浏览器中很普遍. 3.由于程序用select等待连接完成,可以设置一个select等待时间限制,从而缩短connect超时时间。多数实现中,connect的超时时间在75秒到几分钟之间。有时程序希望在等待一定时间内结束,使用非阻塞connect可以防止阻塞75秒,在多线程网络编程中,尤其必要。 例如有一个通过建立线程与其他主机进行socket通信的应用程序,如... 阅读全文
posted @ 2013-11-13 16:58 Fight_4_ever 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 常用命令行我们可能没有办法统计平均一个用户使用多少条命令行语句,如果推测的话,可以认为是25条命令。这25条命令是几乎是每一个使用命令行环境的用户都必须掌握的命令。现在,我们对这些常用命令进行详细的介绍。cat——打印/输出文件的内容cd——修改当前目录chmod——更改文件权限cp——复制文件du——打印/输出硬盘使用情况emacs——编辑文本文件find——搜索文件gcc——编译C/C++/Fortran程序grep——搜索输入中的字符串less——格式化输出页面显示ln——在文件之间创立链接locate——通过索引查找文件ls——列出当前目录下的文件make——编译安装程序man——显示 阅读全文
posted @ 2013-11-13 14:11 Fight_4_ever 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 相比于Windows下需要去不同软件供应商的网站上下载安装软件的繁琐,Ubuntu提供了非常简洁有效的软件管理方法。我们先来了解下在Ubuntu环境下对软件以及其他系统资源的管理方案。1)Ubuntu软件中心Ubuntu软件中心是Ubuntu环境下管理软件安装卸载的一个简便易用的图形界面。在Dash主页->应用程序->Ubuntu软件中心或者桌面左侧导航栏可以找到它。Ubuntu软件中心的名字为software-center,也就是说你在终端输入software-center可以打开它。当你系统没有默认安装Ubuntu软件中心时,你可以通过命令行sudo apt-get insta 阅读全文
posted @ 2013-11-13 13:49 Fight_4_ever 阅读(264) 评论(0) 推荐(0) 编辑
摘要: vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。 1、vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光... 阅读全文
posted @ 2013-11-13 13:19 Fight_4_ever 阅读(256) 评论(0) 推荐(0) 编辑