??xml version="1.0" encoding="utf-8" standalone="yes"?> 关键词:软g开发型 目监理 程 Abstract: This paper designs the surveillance flows of information engineering that focused on software development: the phase of inviting public bidding、of laying out、of demand analysis?of outline design、of detail design、of coding and testing 、of system test run , and presents the necessary work that the surveillant should do in the different phase. Key words: project of software development surveillance flow 一、三U类型的信息化监理项目介l?/p>
按照信息化工E项目本w的特点Q信息化工程目监理可以划分Zc:g|络集成目的监理、Y件品实施型信息化项目的监理以及软g开发型信息化项目的监理。下面分别介l这三类监理工作的特点: g|络集成目的监理:q类目Q主要包括综合布U和|络pȝ集成。这cȝ理最主要的特ҎQ硬件网l集成项目的评测标准是非常明,易于执行的。比如,l合布线的监理依据有“中国工程建筑标准化协会标准CESC89:97.5建筑与徏{群l合布线pȝ工程施工和验收规?#8221;?#8220;中华人民共和国通信行业标准YD/T926.11997大楼通信l合布线pȝ”{,|络质量监理依据?#8220;ANSIX3T9.5光纤分布式数据接口标准规?#8221;{,q些都是直接面向l果的规范。所以,相对于Y件品实施型信息化项目的监理和Y件开发型信息化项目的监理Q硬件网l集成项目的监理是比较简单的?/p>
软g产品实施型信息化目的监理:q类目Q主要是面向各厂商开发出来的产品软gQ选择出合适的软g产品QƈҎ企业需求进行实施。相对于g|络集成目的监理,q类目涉及到对于Y件应用的评测Q而目前对于Y件评,国家q没有相应的标准来控制。事实上QY件实施评也不容易Ş成统一的标准,q造成了此c项目监理一定的隑ֺ?/p>
软g开发型信息化项目的监理Q这c项目,主要是基于一定的g|络设施Q由承徏Ҏ据徏设方需求开发出一套能够满_设方需求的软gpȝ。由于Y件开发工作,是知识密集程度非帔R的工作,在某U程度上Q也是非怸性化的。目前对于Y件开发项目的各种标准Q多是针对Y件开发过E的控制Q比如术语、文档等。因此这c项目监理也有一定难度?/p>
W者将l合自n的Y件开发型目监理的经历,此cM息化目监理工作的流E研I进行初步的试探?/p>
׃方和监理方的关系始于双方监理合同的签订,所以本文的监理程从监理合同签订开始。但鉴于在合同签订前监理方的前期准备工作是监理后l工作的基础Q因此先描述监理方的准备工作是非常必要的?/p>
在签订监理合同之前,监理公司首先应对单位q行需求调研。此ơ需求调研的直接目的是ؓ了编制更详细的项目徏议书以获得监理合同,同时也是为招投标阶段~制招标文g做准备。此ơ调研主要明如下问题:方在该项目上M上要辑ֈ什么目标?l分后分别是什么目标?质量上要辑ֈ什么要求?旉斚w的要求?投资预算多少Q等。最后完成项目徏议书和初步监理规划?/p>
下面详l叙q每个阶D늚特点及监理方在该阶段的工作?/p>
二、Y件开发型目监理基本程 1、招投标阶段 在招投标阶段Q监理方主要工作是根据前期调研工作,协助方编制招标文Ӟ协助方评标及保管合同及文档。其中招标文件应包括Q投标hȝ、招标项目性质、技术要求、质量要求、工期要求、培训要求、验收要求、报仯求、投标h资质{要求、投标保证金要求、投标文件编制要求、评标标准、U担保函、合同主要条Ƅ内容。而协助评标工作主要则从以下方面入手: ⑴、技术方?/p>
对于技术方面的评比Q一般有两种ҎQ一是比较法Q二是打分法。比较法一般是从标书的技术部分中选取一些关键技术进行横向比较,谁的参数最接近标书要求Q谁的技术评比的名次p靠前。相对于比较法,打分法的_性更高些。打分法也是从标书中选择关键技术参敎ͼ按照预定好的权D分D行打分,分数高者就在技术方面具有更大优ѝ两U方法各有长短。打分法一般适用于需要提取的关键技术种cL较多比较复杂且具有较大的成熟度、能较清晰划分高下的情况Q但在目前的评标工作中,一般都是采用比较法?/p>
在技术方面,同时q应该考虑投标单位的技术背景等信息。比如公司具有的CMM{Q是否有q类似项目的开发经验以及过去项目的客户反馈{?/p>
ch格方?/p>
在h格方面,监理方应协助招标方对评标仯行评比。在核算时应注意如下因素Q?/p>
①、Lh否等于各分项报h之和。如果L价不{于各分Ҏ价之和,则以各分Ҏ价之和ؓ准,价差按误差处理?/p>
②、货币{换。如果投标h所使用的货币不一P则需Ҏ开标当日中国国家外汇管理局公布的各U货币对元汇率的卖ZhQ将非美元报h成元报h后再q行比较?/p>
③、报L的处理。对照投标文件的要求核对每一ҎP如果发现有缺ҎP按规定必d发函澄清Q如果属实则这一标中所报该的q_报h补充投标商缺Ҏ仯评标h|q且注明该项补遗的相x标在招标文g中的序号及理由。如果缺的总金额超q开标h格的5%Ӟ则可视ؓ重大偏差?/p>
④、超范围投标目的处理。投标商在投标文件中过投标文g规定范围投报的项目,原则上不能作为增减因素修改评标h|也不可以发函澄清其报仗只有当范围投标项目在报h表中有单独列名报hQ经批准可以从评标hg扣除Qƈ且在表下注明该项报h在投标文件中的编号以及理由?/p>
l过调整补充所得到的报价则UCؓ评标P对评标hq行评比和排序即得到h斚w的评结果?/p>
⑶、其它方?/p>
M产品的生产,都着重对质量、成本和交货期三斚w的控制。对于Y件开发项目,除了技术因素和h因素Q交货期也是一个重要的指标。所以投标书所报的交货期也需重点考虑。与此同Ӟ技术规范中所要求的有x务费用,投标人的信誉Q售后服务等因素也需要考虑到?/p>
2、M规划阶段 在招投标阶段定中标人,甲乙双方{订合同之后Q整个项目就形成了徏设方、承建方和监理方的三方ƈ存协作的一个团体,因此合理l一的规划就是项目成功的基础。M规划阶段的主要Q务,是在承建方制定出项目规划后Q对光目规划审查,q根据承建方的项目规划,修订前期制定的监理项目规划?/p>
监理规划的性质Q是监理方对整个目工作的初步设计,是具体的监理zd的基。监理规划一般由监理方在该项目的ȝ理工E师制定。其基本内容应包括: ⑴、工E概c包括工E名U、徏讑֜址Q项目组成及规模Q预计L资额Q预计项目工期,工程质量{Q设计、开发单位名Uͼ工程特点{?/p>
c监理范围和目标。监理范围一般包括在工程各阶D늚质量控制、进度控制和投资控制Q以及其它委托服务。监理目标以三大控制为目标?/p>
⑶、主要监理措施?/p>
监理组l机构?/p>
⑸、项目监理工作制度。如监理方内部的工作会议制度、监理日志制度、监理周报和月报制度Q监理方与另两方的定期沟通制度等?/p>
q个阶段l束Ӟ监理方应提交Q监理规划?/p>
3、需求分析阶D?/p>
需求分析是目的基矻I监理方在需求分析阶D应以尊重承建方的项目管理和目分析能力为前提,在具体的d开展上不深入、不q扰承徏方的自主权。同Ӟ监理方要充分发挥好项目监督及沟通徏设方和承建方之间的桥梁作用?/p>
需求分析的工作ҎQ通常有三个阶Dc?/p>
W一阶段Q访谈阶Dc这一阶段是和具体用户方的领导层、业务层人员的访谈式沟通,目的是从宏观了解用户需求方向和势Q了解现有组l构架、业务流E、Yg环境及用情c实现手D通常是事先将调查问卷发放到待调研部门Q然后在U定旉围绕问卷q行交流访谈?/p>
W二阶段Q深入阶Dc这一阶段的工作是建立在访谈阶D工作完成,承徏方已l了解了用户的组l构架、业务流E、Yg环境及用情늭基本现状的基之上。承建方Ҏ以往目l验以及业务专家的经验,和徏设方共同探讨业务模型的合理性、准性和发展方向{问题,得到相对先进的业务模型?/p>
W三阶段Q确认阶Dc在完成上两阶段的工作之后,需要对具体的流E细化,Ҏ据进行确认了。根据前两个阶段的工作,承徏方应草拟Z份需求分析报告,q提供原型演C系l,和徏设方q行q一步的讨论Q最l确定一份需求分析报告?/p>
需要指出的是,在系l徏讄q程中,特别在采用P代法的开发模式时Q需求分析的工作需一直进行下去,而在后期的需求改q中Q工作则基本集中在后两个阶段中?/p>
监理方在q三个阶D늚工作Q按照内容可以分Z部分Q监督和沟通。监督工作包括对需求分析阶D늚各种文档的保监督,Ҏ建方的访谈活动的监督Q对需求分析报告、原型演C系l的认{;沟通工作则表现在当方和承徏方由于知识背景不同而在访谈q程中沟通不畅的时候,监理方应利用自n优势使得双方利理解Ҏ?/p>
需求分析阶D,监理方可参考的标准有:GB938588计算Y仉求说明编写指南?/p>
q个阶段监理方应提交Q在需求分析进行前提交需求分析阶D늛理细则、监理日志、在需求分析结束后提交需求分析阶D|ȝ报告?/p>
4、概要设计阶D?/p>
概要设计Q即Y仉求{化ؓ数据l构和Y件的pȝl构Q一般包括数据设计和pȝl构设计。其中数据设计侧重于数据l构的定义,pȝl构设计定义软gpȝ各主要成份之间的关系?/p>
在承建方q行概要设计的过E中Q监理方需要监督以下方面: ⑴、制定规?/p>
在进入Y件开发阶D之初,首先应ؓ软g开发组制定在设计时应该共同遵守的标准,以便协调l内各成员的工作。包括: 阅读和理解Y仉求说明书Q确认用戯求能否实玎ͼ明确实现的条Ӟ从而确定设计的目标Q以及它们的优先序Q?/p>
Ҏ目标定最合适的设计ҎQ?/p>
规定设计文档的编制标准; 规定~码的信息Ş式,与硬Ӟ操作pȝ的接口规U,命名规则?/p>
cY件系l结构的M设计 Ҏ需求分析,Z功能层次l构建立pȝQ其中包括采用某U设计方法,系l按功能划分成模块的层次l构、确定每个模块的功能、徏立与已确定的软g需求的对应关系、确定模块间的调用关pR确定模块间的接口、评估模块划分的质量?/p>
⑶、处理方式设?/p>
处理方式设计要确定ؓ实现pȝ的功能需求所必需的算法,评估法的性能Q确定ؓ满pȝ的性能需求所必需的算法和模块间的控制方式Q确定外部信L接收发送Ş式?/p>
数据结构设?/p>
Ҏ需求分析报告进行数据库设计。数据库设计包括定软g涉及的文件系l的l构以及数据库的模式、子模式Q进行数据完整性和安全性的设计Q确定输入,输出文g的详l的数据l构Q结合算法设计,定法所必需的逻辑数据l构及其操作Q确定对逻辑数据l构所必需的那些操作的E序模块(软g?Q限制和定各个数据设计决策的媄响范_若需要与操作pȝ或调度程序接口所必须的控制表{数据时Q确定其详细的数据结构和使用规则Q数据的保护性设计;数据的一致性设计;冗余性设计等?/p>
⑸、可靠性设?/p>
可靠性设计也叫做质量设计。在q行q程中,Z适应环境的变化和用户新的要求Q需l常对Y件进行改造和修正。在软g开发的一开始就要确定Y件可靠性和其它质量指标Q考虑相应措施Q以使得软g易于修改和易于维护?/p>
V概要设计阶D늚文档 概要设计阶段完成时应~写以下文档Q概要设计说明书、数据库设计说明书、用h册、制定初步的试计划?/p>
针对上述工作Q监理方应按如下标准评定承徏方的概要设计Q?/p>
⑴、可q溯性:认该设计是否覆盖了所有已定的Y仉求,软g每一成䆾是否可追溯到某一w求; c接口:认该Y件的内部接口与外部接口是否已l明定义,模块是否满高内聚和低耦合的要求,模块作用范围是否在其控制范围之内Q?/p>
⑶、风险:认该设计在现有技术条件下和预范围内是否能按时实玎ͼ 实用性:认该设计对于需求的解决Ҏ是否实用Q?/p>
⑸、技术清晰度Q确认该设计是否以一U易于翻译成代码的Ş式表达; V可l护性:认该设计是否考虑了方便未来的l护Q?/p>
⑺、质量:认该设计是否表现出良好的质量特征; ⑅R各U选择ҎQ看是否考虑q其它方案,比较各种选择Ҏ的标准是什么; ⑹{限Ӟ评估对该软g的限制是否现实,是否与需求一_ ⑽、其它具体问题:对于文档、可试性、设计过E等q行评估?/p>
q个阶段监理方应提交Q在概要设计q行前提交M设计阶段监理l则、监理周记、在概要设计完成后提交概要设计监理报告?/p>
5、详l设计阶D?/p>
详细设计阶段的直接目标是~写详细设计说明书,为此Q承建方应做如下工作Q?/p>
⑴、确定每个模块的法Q用工具表达法的过E,写出模块的详l过E性描qͼ c确定每一模块的数据结构; ⑶、确定模块接口细节?/p>
监理方在q个阶段主要是在q度上进行控Ӟ主要手段是定期与承徏Ҏ通,查文档?/p>
q个阶段监理方应提交Q在详细设计q行前提交详l设计阶D늛理细则、监理周记、在详细设计完成后提交详l设计说明书的确认报告?/p>
6、编码及试阶段 ~码是将详细设计阶段的设计思想用某U计机语言实现的过E。监理方应从l构化程序设计原则来q行~码工作的监理: ⑴、用语a中的序、选择、重复等有限的基本控制结构表C程序逻辑Q?/p>
c选用的控制结构只准许有一个入口和一个出口; ⑶、程序语句组成容易识别的块,每块只有一个入口和一个出口; 复杂结构应该用基本控制l构q行l合嵌套来实玎ͼ ⑸、语a中没有的控制l构Q可用一D늭LE序D|拟,但要求该E序D在整个pȝ中应前后一_ 通常试是伴随着~码而同时进行的。广义上软g试q只在q个阶段才有Q而是贯穿软g需求分析、概要设计、详l设计等阶段的。本处的试Q则指代码测试。在试阶段Q监理方应依据测试原则对承徏方的试q行监督Q?/p>
⑴、应早的和不断的进行Y件测试; c测试用例应由测试输入数据和对应的预期输出结果这两部分组成; ⑶、程序员应避免检查自qE序Q?/p>
在设计试用例Ӟ应包括合理的输入条g和不合理的输入条Ӟ ⑸、充分注意测试中的群集现象,即一般测试后E序中残存的错误数目与该E序中已发现的错误数目成正比Q?/p>
V严格执行测试计划,排除试的随意性; ⑺、应当对每一个测试结果做全面查?/p>
⑅R妥善保存测试计划,试用例Q出错统计和最l分析报告,为维护提供方ѝ?/p>
在编码及试阶段监理方可参考的标准有:GB938688计算Y件测试文件编制规范、GB/T1250490计算Y件质量标准保证计划规范、GB/T1250590计算Y仉|管理计划规范、GB/T1553295计算Y件单元测试等?/p>
7、系l试q行阶段 ׃信息化Y件一般都是比较大型的软gQ因此在完成了系l测试后q需要经q一D|间的试运行。系l试q行实际是测试的延箋Q检查系l的E_性、适用性等。监理方在这个阶D늚主要工作有: ⑴、审核竣工文档资料的完整性、可L及其与工程实际的一致性; c审核操作系l、应用系l等软g配置与设计方案的W合性; ⑶、检验证系l功能性能与合同的W合性; 检查h员培训计划落实情况; ⑸、出具验收报告; V帮助用户制定系l运行管理规章制度; ⑺、在保修期内定期或不定期寚w目进行质量检查、督促承建方按合同要求进行维护?/p>
结 从监理合同签订开始到最后系l试q行l束Q监理方工作在职能上可以归结Z点:沟通与监督。沟通的目标是徏设方与承建方信息对等Q沟通的手段是定期或不定期召开工作会议Q监督的目标是在质量、进度和投资上进行控Ӟ监督的手D|合同理和文档管理?/p>
参考文?/p>
1.葛乃P|四l信息工E徏讄理电子工业出版社2002q?br> 2.张v藩Y件工E导论清华大学出版社1998q?br> 3.黄学战项目需求阶D늚监理角色和方法论中国计算机报2003q第三期 串口操作需要的头文?
?Linux 下串口文件是位于 /dev 下的
串口一 ?/dev/ttyS0
串口??/dev/ttyS1
打开串口是通过使用标准的文件打开函数操作Q?
最基本的设|串口包括L特率讄Q效验位和停止位讄?/p> 串口的设|主要是讄 struct termios l构体的各成员倹{?
讄q个l构体很复杂Q我q里只说说常见的一些设|:
波特率设|?/p> 下面是修ҎL特率的代码: 需要注意的? 如果不是开发终端之cȝQ只是串口传输数据,而不需要串口来处理Q那么用原始模?Raw Mode)方式来通讯Q设|方式如下:
讄好串口之后,d串口很Ҏ了,把串口当作文件读写就是?
使用文g操作read函数dQ如果设|ؓ原始模式(Raw Mode)传输数据Q那么read函数q回的字W数是实际串口收到的字符数?
可以使用操作文g的函数来实现异步dQ如fcntlQ或者select{来操作?
关闭串口是关闭文g?
]]>
]]>
]]>
]]>Linux 下串口编E入?/h1>
计算Z口的引脚定义
串口操作
序号
信号名称
W号
向
功能
2
发送数?/td>
TXD
DTE→DCE
DTE发送串行数?/td>
3
接收数据
RXD
DTE←DCE
DTE 接收串行数据
4
h发?/td>
RTS
DTE→DCE
DTE h DCE 线路切换到发送方?/td>
5
允许发?/td>
CTS
DTE←DCE
DCE 告诉 DTE U\已接通可以发送数?/td>
6
数据讑֤准备?/td>
DSR
DTE←DCE
DCE 准备?/td>
7
信号?/td>
信号公共?/td>
8
载L?/td>
DCD
DTE←DCE
表示 DCE 接收到远E蝲?/td>
20
数据l端准备?/td>
DTR
DTE→DCE
DTE 准备?/td>
22
振铃指示
RI
DTE←DCE
表示 DCE 与线路接通,出现振铃
#include
#include
#include
#include
#include
#include
#include
#include
fd = open( "/dev/ttyS0", O_RDWR);//| O_NOCTTY | O_NDELAY
if (-1 == fd)
{
/* 不能打开串口一*/
perror(" 提示错误Q?);
}struct termio
{ unsigned short c_iflag; /* 输入模式标志 */
unsigned short c_oflag; /* 输出模式标志 */
unsigned short c_cflag; /* 控制模式标志*/
unsigned short c_lflag; /* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};struct termios Opt;
tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*讄?9200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);
讄波特率的例子函数Q?br />/**
*@brief 讄串口通信速率
*@param fd cd int 打开串口的文件句?br />*@param speed cd int 串口速度
*@return void
*/
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400, 19200, 9600, 4800, 2400, 1200, 300, 38400,
19200, 9600, 4800, 2400, 1200, 300, };
void set_speed(int fd, int speed){
int i;
int status;
struct termios Opt;
tcgetattr(fd, &Opt);
for ( i= 0; i < sizeof(speed_arr) / sizeof(int); i++) {
if (speed == name_arr[i]) {
tcflush(fd, TCIOFLUSH);
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd1, TCSANOW, &Opt);
if (status != 0) {
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH);
}
}
}
效验位和停止位的讄Q?br />无效?/td> 8?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS8;
奇效?Odd) 7?/td>
Option.c_cflag |= ~PARENB;
Option.c_cflag &= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
偶效?Even) 7?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag |= ~PARODD;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= ~CSIZE;
Option.c_cflag |= ~CS7;
Space效验 7?/td>
Option.c_cflag &= ~PARENB;
Option.c_cflag &= ~CSTOPB;
Option.c_cflag &= &~CSIZE;
Option.c_cflag |= CS8;
讄效验的函敎ͼ
/**
*@brief 讄串口数据位,停止位和效验?br />*@param fd cd int 打开的串口文件句?br />*@param databits cd int 数据? 取??7 或?
*@param stopbits cd int 停止? 取gؓ 1 或?
*@param parity cd int 效验cd 取gؓN,E,O,,S
*/
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0) {
perror("SetupSerial 1");
return(FALSE);
}
options.c_cflag &= ~CSIZE;
switch (databits) /*讄数据位数*/
{
case 7:
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unsupported data size\n"); return (FALSE);
}
switch (parity)
{
case 'n':
case 'N':
options.c_cflag &= ~PARENB; /* Clear parity enable */
options.c_iflag &= ~INPCK; /* Enable parity checking */
break;
case 'o':
case 'O':
options.c_cflag |= (PARODD | PARENB); /* 讄为奇效验*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'e':
case 'E':
options.c_cflag |= PARENB; /* Enable parity */
options.c_cflag &= ~PARODD; /* 转换为偶效验*/
options.c_iflag |= INPCK; /* Disnable parity checking */
break;
case 'S':
case 's': /*as no parity*/
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;break;
default:
fprintf(stderr,"Unsupported parity\n");
return (FALSE);
}
/* 讄停止?/
switch (stopbits)
{
case 1:
options.c_cflag &= ~CSTOPB;
break;
case 2:
options.c_cflag |= CSTOPB;
break;
default:
fprintf(stderr,"Unsupported stop bits\n");
return (FALSE);
}
/* Set input parity option */
if (parity != 'n')
options.c_iflag |= INPCK;
tcflush(fd,TCIFLUSH);
options.c_cc[VTIME] = 150; /* 讄时15 seconds*/
options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
if (tcsetattr(fd,TCSANOW,&options) != 0)
{
perror("SetupSerial 3");
return (FALSE);
}
return (TRUE);
}options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/
options.c_oflag &= ~OPOST; /*Output*/char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
d串口数据
char buff[1024];int Len;int readByte = read(fd,buff,Len);
close(fd);
]]>
q入vi的命?/span>
vi filename :打开或新建文Ӟq将光标|于W一行首
vi +n filename Q打开文gQƈ光标置?font color="#ff6600">Wn行首
vi + filename Q打开文gQƈ光标置?font color="#ff6600">最后一行首
vi +/pattern filenameQ打开文gQƈ光标置于第一个与pattern匚w的串?
vi -r filename Q在上次正用vi~辑时发生系l崩溃,恢复filename
vi filename....filename Q打开多个文gQ依ơ进行编?
Ud光标cd?/span>
h ?BackspaceQ: 光标左移一个字W?
l ?spaceQ: 光标右移一个字W?
k ?Ctrl+pQ? 光标上移一?
j ? Enter ?Ctrl+n Q光标下UM?
w Q? 光标右移一个字臛_?
W Q光标右UM个字臛_首,忽略标点W号
b ?B Q? 光标左移一个字臛_?
e ?E Q? 光标右移一个字臛_?
) Q光标移臛_?
( Q光标移臛_?
}Q光标移x落开?
{Q光标移x落结?
光标控制命o
命o
光标Ud
h
?/span>
^h
向左UM个字W?/span>
j
?/span>
^j
?/span>
^n
向下UM?/span>
k
?/span>
^p
向上UM?/span>
l
或空?/span>
向右UM个字W?/span>
G
Ud文g的最后一?/span>
nG
Ud文g的第
n
?/span>
w
Ud下一个字的开?/span>
W
Ud下一个字的开_忽略标点W号
b
Ud前一个字的开?/span>
B
Ud前一个字的开_忽略标点W号
L
Ud屏幕的最后一?/span>
M
Ud屏幕的中间一?/span>
H
Ud屏幕的第一?/span>
e
Ud下一个字的结?/span>
E
Ud下一个字的结,忽略标点W号
(
Ud句子的开?/span>
)
Ud句子的结?/span>
{
UdD落的开?/span>
}
Ud下一个段落的开?/span>
0
?/span>
|
Ud当前行的W一?/span>
n|
Ud当前行的W?/span>
n
?/span>
^
Ud当前行的W一个非I字W?/span>
Q?span>
nGQ光标移至第n行首
n+Q光标下Un?
n-Q光标上Un?
n$Q光标移至第n行尾
H Q光标移臛_q顶?
M Q光标移臛_q中间行
L Q光标移臛_q最后行
0Q(注意是数字零Q光标移臛_前行?
$Q光标移臛_前行?
屏幕Lcd?/span>
Ctrl+uQ?向文仉d?
Ctrl+dQ?向文件尾d?
Ctrl+fQ? 向文件尾M?
CtrlQbQ向文g首翻一?
nzQ? 第n行滚臛_q顶部,不指定n时将当前行滚臛_q顶部?
插入文本cd?/span>
i Q在光标?
I Q在当前行首
aQ光标后
AQ在当前行尾
oQ在当前行之下新开一?
OQ在当前行之上新开一?
rQ替换当前字W?
RQ替换当前字W及其后的字W,直至按ESC?
sQ从当前光标位置处开始,以输入的文本替代指定数目的字W?
SQ删除指定数目的行,q以所输入文本代替?
ncw或nCWQ修Ҏ定数目的?
nCCQ修Ҏ定数目的?
删除命o
ndw或ndWQ删除光标处开始及其后的n-1个字
doQ删臌?
d$Q删臌?
nddQ删除当前行及其后n-1?
x或XQ删除一个字W,x删除光标后的Q而X删除光标前的
Ctrl+uQ删除输入方式下所输入的文?
搜烦及替换命?/span>
/patternQ从光标开始处向文件尾搜烦pattern
?patternQ从光标开始处向文仉搜烦pattern
nQ在同一方向重复上一ơ搜索命?
NQ在反方向上重复上一ơ搜索命?
Qs/p1/p2/gQ将当前行中所有p1均用p2替代
Qn1,n2s/p1/p2/gQ将Wn1至n2行中所有p1均用p2替代
Qg/p1/s//p2/gQ将文g中所有p1均用p2替换
选项讄
allQ列出所有选项讄情况
termQ设|终端类?
ignoranceQ在搜烦中忽略大写
listQ显C制表位(Ctrl+I)和行标志($)
numberQ显C?
reportQ显C由面向行的命o修改q的数目
terseQ显C简短的警告信息
warnQ在转到别的文g时若没保存当前文件则昄NO write信息
nomagicQ允许在搜烦模式中,使用前面不带“\”的Ҏ字符
nowrapscanQ禁止vi在搜索到达文件两端时Q又从另一端开?
mesgQ允许vi昄其他用户用write写到自己l端上的信息
末行方式命o
Qn1,n2 co n3Q将n1行到n2行之间的内容拯到第n3行下
Qn1,n2 m n3Q将n1行到n2行之间的内容U至到第n3行下
Qn1,n2 d Q将n1行到n2行之间的内容删除
Qw Q保存当前文?
Qe filenameQ打开文gfilenameq行~辑
QxQ保存当前文件ƈ退?
QqQ退出vi
Qq!Q不保存文gq出vi
Q?commandQ执行shell命ocommand
Qn1,n2 w!commandQ将文g中n1行至n2行的内容作ؓcommand的输入ƈ执行之,若不指定n1Qn2Q则表示整个文件内容作为command的输?
Qr!commandQ将命ocommand的输出结果放到当前行
寄存器操?/span>
"?nyyQ将当前行及其下n行的内容保存到寄存器Q中Q其?Z个字母,nZ个数?
"?nywQ将当前行及其下n个字保存到寄存器Q中Q其?Z个字母,nZ个数?
"?nylQ将当前行及其下n个字W保存到寄存器?中,其中?Z个字母,nZ个数?
"?pQ取出寄存器Q中的内容ƈ其攑ֈ光标位置处。这里?可以是一个字母,也可以是一个数?
nddQ将当前行及其下共n行文本删除,q将所删内Ҏ?号删除寄存器中?/p>
+ ?/span> return Ud下一行的W一个字W?/span>
- Ud前一行的W一个非I字W?/span>
?/span> vi 中添加文?/span>
命o 插入动作
a 在光标后插入文本
A 在当前行插入文本
i 在光标前插入文本
I 在当前行前插入文?/span>
o 在当前行的下Ҏ入新?/span>
O 在当前行的上Ҏ入新?/span>
:r file d文g file 内容Qƈ插在当前行后
:nr file d文g file 内容Qƈ插在W?/span> n 行后
escape 回到命o模式
^v char 插入时忽?/span> char 的指定意义,q是Z插入Ҏ字符
?/span> vi 中删除文?/span>
命o 删除操作
x 删除光标处的字符Q可以在 x 前加上需要删除的字符数目
nx 从当前光标处往后删?/span> n 个字W?/span>
X 删除光标前的字符Q可以在 X 前加上需要删除的字符数目
nX 从当前光标处往前删?/span> n 个字W?/span>
dw 删至下一个字的开?/span>
ndw 从当前光标处往后删?/span> n 个字
dG 删除行,直到文gl束
dd 删除整行
ndd 从当前行开始往后删?/span>
db 删除光标前面的字
ndb 从当前行开始往前删?/span> n ?/span>
:n,md 从第 m 行开始往前删?/span> n ?/span>
d ?/span> dQ?span> 从光标处删除到行?/span>
dcursor_command 删除臛_标命令处Q如 dG 从当胆行删除x件的末尾
^h ?/span> backspace 插入Ӟ删除前面的字W?/span>
^w 插入Ӟ删除前面的字
修改 vi 文本
每个命o前面的数字表C命o重复的次?/span>
命o 替换操作
rchar ?/span> char 替换当前字符
R text escape ?/span> text 替换当前字符直到换下 Esc ?/span>
stext escape ?/span> text 代替当前字符
S ?/span> cctext escape ?/span> text 代替整行
cwtext escape 当前字改ؓ text
Ctext escape 当前行余下的改?/span> text
cG escape 修改x件的末尾
ccursor_cmd text escape 从当前位|处到光标命令位|处都改?/span> text
?/span> vi 中查找与替换
命o 查找与替换操?/span>
/text 在文件中向前查找 text
?text 在文件中向后查找 text
n 在同一方向重复查找
N 在相反方向重复查?/span>
ftext 在当前行向前查找 text
Ftext 在当前行向后查找 text
ttext 在当前行向前查找 text Qƈ光标定位在 text 的第一个字W?/span>
Ttext 在当前行向后查找 text Qƈ光标定位在 text 的第一个字W?/span>
:set ic 查找时忽略大写
:set noic 查找时对大小写敏?/span>
s/ pat1 /g ?/span> newtext 替换 oldtext
:m,ns/oldtext/newtext ?/span> m 行通过 n Q用 newtext 替换 oldtext
& 重复最后的 :s 命o
:g/text1/s/text2/text3 查找包含 text1 的行Q用 text3 替换 text2
:g/text/command 在所有包?/span> text 的行q行 command 所表示的命?/span>
:v/text/command 在所有不包含 text 的行q行 command 所表示的命?/span>
?/span> vi 中复制文?/span>
命o 复制操作
yy 当前行的内Ҏ入时缓冲区
nyy ?/span> n 行的内容攑օ临时~冲?/span>
p 时缓冲区中的文本攑օ光标?/span>
P 时缓冲区中的文本攑օ光标?/span>
"(a-z)nyy 复制 n 行放入名字ؓ圆括号内的可命名~冲区,省略 n 表示当前?/span>
"(a-z)ndd 删除 n 行放入名字ؓ圆括号内的可命名~冲区,省略 n 表示当前?/span>
"(a-z)p 名字ؓ圆括L可命名缓冲区的内Ҏ入当前行?/span>
"(a-z)P 名字ؓ圆括L可命名缓冲区的内Ҏ入当前行?/span>
?/span> vi 中撤消与重复
命o 撤消操作
u 撤消最后一ơ修?/span>
U 撤消当前行的所有修?/span>
. 重复最后一ơ修?/span>
, 以相反的方向重复前面?/span> f ?/span> F ?/span> t ?/span> T 查找命o
; 重复前面?/span> f ?/span> F ?/span> t ?/span> T 查找命o
"np 取回最后第 n ơ的删除 ( ~冲Z存有一定次数的删除内容Q一般ؓ 9)
n 重复前面?/span> / ?/span> ? 查找命o
N 以相反方向重复前面的 / ?/span> ? 命o
保存文本和退?/span> vi
命o 保存?/span> / 或退出操?/span>
:w 保存文g但不退?/span> vi
:w file 修改保存在 file 中但不退?/span> vi
:wq ?/span> ZZ ?/span> :x 保存文gq?/span> vi
:q! 不保存文Ӟ退?/span> vi
:e! 攑ּ所有修改,从上ơ保存文件开始再~辑
vi 中的选项
选项 作用
:set all 打印所有选项
:set nooption 关闭 option 选项
:set nu 每行前打印行?/span>
:set showmode 昄是输入模式还是替换模?/span>
:set noic 查找时忽略大写
:set list 昄制表W?/span> (^I) 和行?/span>
:set ts=8 为文本输入设|?/span> tab stops
:set window=n 讄文本H口昄 n ?/span>
:syntax on 语法加亮
VI的状?/strong>
选项 作用
:.= 打印当前行的行号
:= 打印文g中的行数
^g 昄文g名、当前的行号、文件的总行数和文g位置的百分比
:l 使用字母 "l" 来显C多的Ҏ字符Q如制表W和换行W?/span>
在文本中定位D落和放|标?/strong>
选项 作用
{ 在第一列插?/span> { 来定义一个段?/span>
[[ 回到D落的开头处
]] 向前Ud下一个段落的开头处
m(a-z) 用一个字母来标记当前位置Q如?/span> mz 表示标记 z
'(a-z) 光标移动到指定的标讎ͼ如用 'z 表示Ud?/span> z
?/span> vi 中连接行
选项 作用
J 下一行连接到当前行的末尾
nJ q接后面 n ?/span>
光标攄与屏q调?/strong>
选项 作用
H 光标移动到屏幕的顶?/span>
nH 光标移动到屏幕行下的W?/span> n ?/span>
M 光标移动到屏幕的中?/span>
L 光标移动到屏幕的底?/span>
nL 光标移动到屏幕底行上的W?/span> n ?/span>
^e(ctrl+e) 屏q上滚一?/span>
^y 屏q下滚一?/span>
^u 屏q上滚半?/span>
^d 屏q下滚半?/span>
^b 屏q上滚一?/span>
^f 屏q下滚一?/span>
^l 重绘屏幕
z-return 当前行|ؓ屏幕的顶?/span>
nz-return 当前行下的W?/span> n 行置为屏q的行
z. 当前行|ؓ屏幕的中?/span>
nz. 当前行上的W?/span> n 行置为屏q的中央
z- 当前行|ؓ屏幕的底?/span>
nz- 当前行上的W?/span> n 行置为屏q的底行
vi 中的 shell 转义命o
选项 作用
:!command 执行 shell ?/span> command 命oQ如 :!ls
:!! 执行前一?/span> shell 命o
:r!command d command 命o的输入ƈ插入Q如 :r!ls 会先执行 ls Q然后读入内?/span>
:w!command 当前已~辑文g作ؓ command 命o的标准输入ƈ执行 command 命oQ如 :w!grep all
:cd directory 当前工作目录更改ؓ directory 所表示的目?/span>
:sh 启动一个子 shell Q?/span> ^d(ctrl+d) q回 vi
:so file ?/span> shell E序 file 中读入和执行命o
vi 中的宏与~写
( 避免使用控制键和W号Q不要用字W?/span> K ?/span> V ?/span> g ?/span> q ?/span> v ?/span> * ?/span> = 和功能键 )
选项 作用
:map key command_seq 定义一个键来运?/span> command_seq Q如 :map e ea Q无Z么时候都可以 e Ud一个字的末来q加文本
:map 在状态行昄所有已定义的宏
:umap key 删除该键的宏
:ab string1 string2 定义一个羃写,使得当插?/span> string1 Ӟ?/span> string2 替换 string1 。当要插入文本时Q键?/span> string1 然后?/span> Esc 键,pȝ插入了 string2
:ab 昄所有羃?/span>
:una string 取消 string 的羃?/span>
?/span> vi 中羃q文?/span>
选项 作用
^i(ctrl+i) ?/span> tab 插入文本Ӟ插入Ud的宽度,Ud宽度是事先定义好?/span>
:set ai 打开自动~进
:set sw=n 移动宽度设|ؓ n 个字W?/span>
n<< ?/span> n 行都向左Ud一个宽?/span>
n>> ?/span> n 行都向右Ud一个宽度,例如 3>> 将接下来的三行每行都向右移动一个移动宽?/span>
此乃六祖慧能的悟之aQ因为其师兄的:w似菩提树,心似明镜収ͼ时时勤拂拭,不惹尘?。六感觉悟不dQ于是他吟出了:菩提本无?明镜亦非?本来无一?何处惹尘??/font>
从字面上Ԍ菩提树是I的Q明镜台也是I的Qn与心俱是I的Q本来无一物的I,又怎么可能惹尘埃呢?
佛对我说Q你的心上有。我用力地擦拭?br /> 佛说Q你错了Q尘是擦不掉的。我于是心剥了下来.
佛又_你又错了Q尘本非,何来有尘
我领悟不透,是什么意思?
我想q是从神U和慧能那两个偈子引申出来?br /> 秀_“n是菩提树Q心如明镜台Q时时勤拂拭Q勿使惹埃。?br /> 慧能_“菩提本无树Q明镜亦非台Q本来无一物,何处惹尘埃。?br /> 的确Q要能够参透这两个偈子的确很难Q就是正的理解也不易?br /> 参悟不?..
w是菩提树,心如明镜収ͼ时时勤拂拭,勿惹尘?br /> 众生的n体就是一觉悟的智慧树,
众生的心灵就象一座明亮的台镜?br /> 要时时不断地它掸拂擦试Q?br /> 不让它被垢污染障蔽了光明的本性?br />
菩提本无树,明镜亦非収ͼ本来无一物,何处惹尘?br /> 菩提原本没有树Q?br /> 明亮的镜子也q不是台?br /> 本来是虚无没有一物,
那里会染上什么尘?
现在只能从字面上ȝ解它Q惨悟不透!
心本无尘Q尘x心。无心无,Z歅R?br />
其实在外,心在内,常拂之,心净无尘Q?br /> 在内,心在外,常剥之,无尘无心Q?br /> 心中有尘Q尘本是心,
何畏心中,无尘亦无??正如慧能所说的 仁者心?br />
又如道家所说的 道可道非帔R
它们的道理是一L
佛家讲究万物在心 q求修世
道家讲究无牵无挂 q求避世
佛家惌׃?道家则是修行今世 而追I其原理来说都是一U修?br />
而最l的说的是一U超?br />
却不是刻意的L
L在心
世间人,法无定法Q然后知非法法也Q?br /> 天下事,了犹未了Q何妨以不了了之?
我本n来讲Q对于世间的事情Q万物,我认为,需要一颗宁静的心,去面对这一切?/font>
׃息位产生冗余位的~码q程,是已知K(X)求R(X)的过E。在CRC码中可以通过扑ֈ一个特定的rơ多式G (X)(其最高项Xr的系数恒?),然后用Xr·K(X)去除以G(X),得到的余式就是R(X)。特别要的是,q些多项式中?+"都是??也即异或q算);此外,q里的除法用的也是模2除法,即除法过E中用到的减法是?减法,它和?加法的运规则一?都是异或q算,q是一U不考虑加法q位和减法借位的运??/p>
0+O=0,0+1=1,1+0=1,1+1=0
0-0=0,0-1=1,1-0=1,1-1=0
在进行基于模2q算的多式除法?只要部分余数首位?,便可上商1,否则上商0。然后按?减法求得余数,该余C计最高位。当被除数逐位除完?最后得到比除数一位的余数。此余数即ؓ冗余?其d在信息位后便构成CRC码字?br /> 仍以上例中K(X)=X6+X4+X3+1Z(即信息位?011001),若G(X)=X4+X3+1
(对应代码11001),取r=4,则X4·K(X)=X10+X8+X7+X4(对应代码?110010000),其由?除法求余式R(X)的过E所C如?
得到的最后余Cؓ1010,q就是冗余位,对应R(X)=X3+X?br /> ׃R(X)是Xr·K(X)除以G(X)的余?那么下列关系式必然满?br /> Xr·K(X)=G(X)Q(X)+R(X)
其中Q(X)为商式。根据模二运规则R(X)+R(X)=0的特?可将上式改记?/p>
[Xr-K(X)+R(X)]/G(X)=Q(X)
? T(X)/G(X)=Q(X)
由此可见,信道上发送的码字多项式T(X)=Xr-K(X)+R(X)。若传输q程无错Q则接收Ҏ到的码字也对应于此多式,也即接收到的码字多项式能被G(X)整除。因而接收端的校验过E就是将接收到的码字多项式除以G(X)的过E。若余式为零则认Z输元差错;若余式不为零则传输有差错?/p>
例如,前述例子中若码字10110011010l传输后׃受噪声的q扰,在接收端变成?0110011100,则求余式的除法如?
求得的余式不为零,相当于在码字上面半加上了差错模式00000000110。差错模式对应的多项式记为E(X),上例中E(X)=X2+X。有差错?接收端收到的不再是T(X),而是T(X)与E(X)之模二加,?br /> [T(X)+E(X)]/G(X)=T(X)/G(X)+E(X)/G(X)
若E(X)/G(X)=0,则这U差错就能检出?若E(X)/G(X)=0,那么׃接收到的码字多项式仍然可被G(X)整除,错误检不出来,也即发生了漏?/p>
理论上可以证明@环冗余校验码的检错能力有以下特点:
(1)可检出所有奇C错?br /> (2)可检出所有双比特的错?br /> (3)可检出所有小于、等于校验位长度的突发错?/p>