当前位置:文档之家› 调试程序的简单说明.

调试程序的简单说明.

调试程序的简单说明.
调试程序的简单说明.

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。

我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下:

VC 调试篇

设置

为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。

为了增加调试信息,可以按照下述步骤进行:

?

打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开

?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括:

命令行 Project settings 说明

无 None 没有调试信息

/Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息

/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等

/Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。

/ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使

#pragma 设置的优化功能无效

?

选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL

?如果C/C++页中设置了Program Database 以上的选项,则Link

incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法:

1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。

2、防御性的编程

3、使用Trace

4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因

5、把错误信息记录到文件中

位置断点(Location Breakpoint

大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:

void CForDebugDlg::OnOK(

{

for (int i = 0; i < 1000; i++ //A

{

int k = i * 10 - 2; //B

SendTo(k; //C

int tmp = DoSome(i; //D

int j = i / tmp; //E

}

}

执行此函数,程序崩溃于E行,发现此时tmp为0,假设tmp本不应该为0,怎么这个时候为0呢?所以最好能够跟踪此次循环时DoSome函数是如何运行的,但由于是在循环体内,如果在E行设置断点,可能需要按F5(GO许多次。这样手要不停的按,很痛苦。使用VC6断点修饰条件就可以轻易解决此问题。步骤如下。

1 Ctrl+B打开断点设置框,如下图:

Figure 1设置高级位置断点

2 然后选择D行所在的断点,然后点击condition按钮,在弹出对话框的最下面一个编辑框中输入一个很大数目,具体视应用而定,这里1000就够了。

3 按F5重新运行程序,程序中断。Ctrl+B打开断点框,发现此断点后跟随一串说明:...487 times remaining。意思是还剩下487次没有执行,那就是说执行到513(1000-487次时候出错的。因此,我们按步骤2所讲,更改此断点的skip次数,将1000改为513。

4 再次重新运行程序,程序执行了513次循环,然后自动停在断点处。这时,我们就可以仔细查看DoSome是如何返回0的。这样,你就避免了手指的痛苦,节省了时间。

再看位置断点其他修饰条件。如Figure 1所示,在“Enter the expression to be evaluated:”下面,可以输入一些条件,当这些条件满足时,断点才启动。譬如,刚才的程序,我们需要i为100时程序停下来,我们就可以输入在编辑框中输入“i==100”。

另外,如果在此编辑框中如果只输入变量名称,则变量发生改变时,断点才会启动。这对检测一个变量何时被修改很方便,特别对一些大程序。

用好位置断点的修饰条件,可以大大方便解决某些问题。

数据断点(Data Breakpoint

软件调试过程中,有时会发现一些数据会莫名其妙的被修改掉(如一些数组的越界写导致覆盖了另外的变量,找出何处代码导致这块内存被更改是一件棘手的事情(如果没有调试器的帮助。恰当运用数据断点可以快速帮你定位何时何处这个数据被修改(最好使用内存来查找,使用变量名的话,IDE不一定能找到。。譬如下面一段程序:

#include "stdafx.h"

#include

int main(int argc, char* argv[]

{

char szName1[10];

char szName2[4];

strcpy(szName1,"shenzhen";

printf("%s\n", szName1; //A

strcpy(szName2,

"vckbase"; //B

printf("%s\n", szName1;

printf("%s\n", szName2;

return 0;

}

这段程序的输出是

szName1: shenzhen

szName1: ase

szName2: vckbase

szName1何时被修改呢?因为没有明显的修改szName1代码。我们可以首先在A行设置普通断点,F5运行程序,程序停在A行。然后我们再设置一个数据断点。如下图:

Figure 2数据断点

F5继续运行,程序停在B行,说明B处代码修改了szName1。B处明明没有修改szName1呀?但调试器指明是这一行,一般不会错,所以还是静下心来看看程序,哦,你发现了:szName2只有4个字节,而strcpy了7个字节,所以覆写了szName1。

数据断点不只是对变量改变有效,还可以设置变量是否等于某个值。譬如,你可以将Figure 2中红圈处改为条件”szName2[0]==''''y''''“,那么当szName2第一个字符为y时断点就会启动。

可以看出,数据断点相对位置断点一个很大的区别是不用明确指明在哪一行代码设置断点。

上图中的断点设置最好用内存地址来表示,否则vc会出错。

其他调试手段:系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息,如下:

宏名/函数名说明

TRACE 使用方法和printf完全一致,他在output框中输出调试信息

ASSERT 它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText

VERIFY 等。和 ASSERT 功能类似,所不同的是, Release 版本中,在ASSERT 不计算输入的表达式的值,而 VERIFY 计算表达式的值。使用_ASSETE 来 debug,这三个都是 MFC 的。_ASSERTE 的头文件是 crtdbg.h。值 Watch VC 支持查看变量、表达式和内存的值。所有这些观察都必须是在断点中断的情况下进行。观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。 VC 提供一种被成为 Watch 的机制来观看变量和表达式的

值。在断点状态下,在变量上单击右键,选择 Quick Watch,就弹出一个对话框,显示这个变量的值。单击 Debug 工具条上的 Watch 按钮,就出现一个 Watch 视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。注意:这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。也可以修改某个变量的值。 Memory 由于指针指向的数组,Watch 只能显示第一个元素的值。为了显示数组的后续内容,或者要显示一片内存的内容,可以使用 memory 功能。在 Debug 工具条上点 memory 按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。 Variables Debug 工具条上的 Variables 按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。寄存器 Debug 工具条上的 Registers 按钮弹出一个框,显示当前的所有寄存器的值。调试技巧: 1、VC++中 F5 进行调试运行 a、在 output Debug 窗口中可以看到用 TRACE 打印的信息 b、 Call Stack 窗口中能看到程序的调用堆栈 2、当 Debug 版本运行时发生崩溃,选择 retry 进行调试,通过看 Call Stack 分析出错的位置及原因

3、使用映射文件调试 a、创建映射文件:Project settings 中 link 项,选中Generate mapfile,输出程序代码地址:/MAPINFO: LINES,得到引出序号:

/MAPINFO: EXPORTS。 b、程序发布时,应该把所有模块的映射文件都存档。c、查看映射文件:见” 通过崩溃地址找出源代码的出错行”文件。 4、可以调试的Release 版本 Project settings 中 C++项的 Debug Info 选择为 Program Database,Link 项的 Debug 中选择 Debug Info 和 Microsoft format。 5、查看 API 的错误码,在watch 窗口输入@err 可以查看或者@err,hr,其中”,hr”表示错误码的说明。 6、Set Next Statement:该功能可以直接跳转到指定的代码行执行,一般用来测试异常处理的代码。 7、调试内存变量的变化:当内存发生变化时停下来。???进程控制VC 允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11 和 CTRL+F10。各个快捷键功能如下:快捷键 F5 F10 F11 CTRL+F10 F7 F9 Ctrl+Shift+F9 Shift+F5 说明调试/继续运行单步,如果涉及到子函数,不进入子函数内部单步,如果涉及到子函数,进入子函数内部运行到当前光标处。重

建设置断点/清除断点清除所有断点结束调试 Call Stack 调用堆栈反映了当前断点处函数是被那些函数按照什么顺序调用的。单击 Debug 工具条上的 Call stack 就显示 Call Stack 对话框。在 CallStack 对话框中显示了一个调用系列,最上面的是当前函数,往下依次是调用函数的上级函数。单击这些函数名可以跳到对应的函数中去。

关注一个好的程序员不应该把所有的判断交给编译器和调试器,应该在程序中自己加以程序保护和错误定位,具体措施包括:对于所有有返回值的函数,都应该检查返回值,除非你确信这个函数调用绝对不会出错,或者不关心它是否出错。一些函数返回错误,需要用其他函数获得错误的具体信息。例如accept 返回 INVALID_SOCKET 表示 accept 失败,为了查明具体的失败原因,应该立刻用 WSAGetLastError 获得错误码,并针对性的解决问题。有些函数通过异常机制抛出错误,应该用 TRY-CATCH 语句来检查错误程序员对于能处理的错误,应该自己在底层处理,对于不能处理的,应该报告给用户让他们决定怎么处理。如果程序出了异常,却不对返回值和其他机制返回的错误信息进行判断,只能是加大了找错误的难度。另外:VC 中要编制程序不应该一开始就写 cpp/h 文件,而应该首先创建一个合适的工程。因为只有这样,VC 才能选择合适的编译、连接选项。对于加入到工程中的 cpp 文件,应该检查是否在第一行显式的包含stdafx.h 头文件,这是 Microsoft Visual Studio 为了加快编译速度而设置的预编译头文件。在这个 #include "stdafx.h"行前面的所有代码将被忽略,所以其他头文件应该在这一行后面被包含。对于.c 文件,由于不能包含 stdafx.h,因此可以通过 Project settings 把它的预编译头设置为“不使用”,方法是:弹出 Project settings 对话框选择 C/C++ Category 选择 Precompilation Header 选择不使用预编译头。便于调试的代码风格:最好不用全局变量所有变量都要初始化,成员变量在构造函数中初始化尽量使用 const 详尽的注释总结调试最重要的还是你要思考,要猜测你的程序可能出错的地方,然后运用你的调试器来证实你的猜测

CodeWarrior 基本使用教程

1). CodeWarrior 能做些什么? A).使用C/C++ 进行编程 B).也支持Java 开发 本课程仅限于应用C/C++ 语言在Windows 平台上使用CodeWarrior 进行的开发. 2). CodeWarrior 优点是什么? CodeWarrior 能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行你的程序. 3).常用编程类型说明: A).应用程序(如:文本编辑器WordPad ) B). 庞大的商业软(如:比如象Adobe Photoshop,MicrosoftWord,CodeWarrior…) C). 控制面板(control panels)<实际上是设置系统功能的一个简单界面,比如可以在控制面板中 完成.如:设置音量和鼠标移动速度这样一些参数.> D). 动态链接库(dynamic linked libraries,DLLs)<提供一些很有用的被系统和应用程序共享 的函数.通常它们没有用户界面.> E). 插件(plug-ins)<类似于DLLs,插件也是可供其它软件使用的小程序,但插件只能被特定的软 件使用.>

4).CodeWarrior工具条介绍: 4.1).文件菜单: 4.2).编辑菜单

4.3). 查看菜单 4.4). 查找菜单4.5). 工程菜单

4.6). 调试菜单 4.8).窗口菜单 4.9). 帮助菜单 4.7).VCS 菜单

5).CodeWarrior 集成开发环境的设置

软件开发过程详解

软件开发过程详解 软件开发过程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件开发过程覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。 1.需求分析 1.1 需求分析的特点和任务 需求分析是软件开发的第一步。获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。参与需求获取者只有在他们理解了问题之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。把需求获取集中在用户任务上—而不是集中在用户接口上—有助于防止开发组由于草率处理设计问题而造成的失误。有几种原因使需求分析变得困难:(1)客户说不清楚需求;(2)需求自身经常变动;(3)分析人员或客户理解有误。 需求获取、分析、编写需求规格说明和验证并不遵循线性的顺序,这些活动是相互隔开、增量和反复的。当你和客户合作时,你就将会问一些问题,并且取得他们所提供的信息(需求获取)。同时,你将处理这些信息以理解它们,并把它们分成不同的类别,还要把客户需求同可能的软件需求相联系(分析)。然后,你可以使客户信息结构化,并编写成文档和示意图(说明)。下一步,就可以让客户代表评审文档并纠正存在的错误(验证)。这四个过程贯穿着需求分析的整个阶段。需求获取可能是软件开发中最困难、最关键、最易出错及最需要交流的方面。需求获取只有通过有效的客户—开发者的合作才能成功。分析者必须建立一个对问题进行彻底探讨的环境,而这些问题与产品有关。为了方便清晰地进行交流,就要列出重要的小组,而不是假想所有的参与者都持有相同的看法。对需求问题的全面考察需要一种技术,利用这种技术不但考虑了问题的功能需求方面,还可讨论项目的非功能需求。确定用户已经理解:对于某些功能的讨论并不意味着即将在产品中实现它。对于想到的需求必须集中处理并设定优先级,以避免一个不能带来任何益处的无限大的项目。 1.2.需求分析的一般方法

实验一 Keil软件的使用及简单程序的调试方法

实验一 Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下: 几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程

名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示 单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。

codewarrior软件与编程的讲解完整版

CodeWarrior 使用教程 第一课认识CodeWarrior Translated from?https://www.doczj.com/doc/558913338.html, CodeWarrior?能做些什么? ????当你知道自己能写更好的程序时,你一定不会再使用别人开发的应用程序。但是常常会发生这种情况,就是当你写了无数行代码后,却找不到使得整个程序出错的那一行代码,导致根本没法编译和链接整个程序。这可能更令人灰心丧气。 ????本文将告诉你如何使用?CodeWarrior?这一工具解决上述问题。 ????从现在开始,我们将集中精力学习如何在?CodeWarrior?中使用?C/C++?进行编程。为了学习本课程,你必须已经能够比较熟练地使用上述两种语言之一。CodeWarrior?也可以支持?Java?开发,但那是另一门课程的内容。本课程仅限于在?Windows?平台上使用?CodeWarrior?进行的开发。一旦你精通了?CodeWarrior?编程后,你可以试试在其它平台上使用?CodeWarrior。本文中讨论过的大部分内容都可以应用到开发?Mac?应用程序中。 ??? CodeWarrior?能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行你的程序。你所使用过的每个应用程序都经过了使用象?CodeWorrior?这样的开发工具进行编码、编译、编辑、链接和调试的过程。现在你在我们的指导下,自己也可以去做这些工作了。

????你可以使用?CodeWarrior?来编写你能够想象得到的任何一种类型的程序。如果你是一个初学者,你可以选择编写一个应用程序(比如一个可执行程序),比如象微软公司的文本编辑器?WordPad?这样的应用程序。 ????应用程序可能是最容易编写的程序了,而那些庞大的商业软件,比如象?Adobe Photoshop,Microsoft Word?以及?CodeWarrior?软件都是极其复杂的。其它类型的程序指的是控制面板(control panels),动态链接库(dynamic linked libraries,DLLs)?和插件(plug-ins)。我们先来简单的讨论一下这些类型的程序。 ????在?Windows?中,控制面板程序是一些(通常比较小的)存放在控制面板目录下的程序,可以在开始菜单的控制面板项中看到它们。控制面板实际上是设置系统功能的一个简单界面,比如可以在控制面板中完成诸如设置音量和鼠标移动速度这样一些参数。????动态链接库?(DLLs)?提供了一些很有用的被系统和应用程序共享的函数。通常它们都是没有用户界面的。 ????插件?(Plug-ins)?有点类似于?DLLs,插件也是可供其它软件使用的小程序,但插件只能被特定的软件使用。比如说,Photoshop?的插件允许程序员方便地扩展?Photoshop?的功能,而不需要去修改它的源代码。同样的,许多?Web?浏览器也使用插件来增加功能,或者为了让你能够看到页面上的新的内容类型。实际上,有许多程序,包括?CodeWarrior,都使用这种插件结构。 ????一旦你掌握了?CodeWarior?和你所使用的操作系统的编程接口时,你可以编写许多其它类型的程序。实际上,本课程也是你深入学习其它编程方法的基础课程。你已经找到了一个最优秀的地方开始你的编程之旅。好,现在请坐好,放松,去吸取这门课程的精

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

LCF文件资料使用说明书

序言:Codewarrior 2.10是飞思卡尔32位汽车级单片机Qorriva 系列的集成开发环境,与之前版本2.8、2.9完全兼容。Codewarrior 10.3是飞思卡尔最新的集成开发环境,是一个开放源代码的、基于Java 的可扩展开发平台。许多新用户对codewarrior 链接文件不是十分了解,本文将针对链接文件的常见问题以及段的定义进行介绍帮助用户快速了解和使用CodeWarrior 。 目录 第一节 LCF 文件定义及使用说明 1: LCF 文件介绍 2:LCF 文件中各个预定义段的说明 3:常用关键字和宏定义说明 第二节 EPPC 链接器介绍及使用说明 第三节 代码重定向 第一节 LCF 文件定义及使用说明 1:LCF 文件介绍 链接文件用来控制不同类型数据代码、数据以某种排列方式在最终在生成的可执行文件或者二进制文件,调试文件中的放置位置。它可以通过在EPPC linker 的面板中进行配置,也可以直接在lcf 文件中直接进行修改。 Lcf 文件中首先是对整个memory map(MEMORY )地址空间内的所有RAM,ROM 进行分割,将其分为几个区域,便于放置不同类型的存储内容,而这些区域内包含的内容可以是用户自定义的段或者系统预定义的段(SECTION )。关于段的定义和使用将在lcf 文件介绍结束后进行介绍。 一个工程通常在建立的时候默认的调试方式都是在RAM 中进行调试,由于RAM 中执行的效率高于FLASH ,并且下载速度快。在生成的ROM Image 中常量,初始化过的数据或者代码如果没有被定义在ROM 区域则假设为这部分代码要在程序开始执行的时候从ROM 去拷贝到RAM 区。 下面是一个完整的lcf 文件,其中包括每行的解释及用法。 /* lcf file for MPC5604B M27V (debug RAM version) 文件的名字及对应单片机(RAM 版本) */ //RAM 版本和ROM 版本的区别在于RAM 版本不将程序下载到ROM 中去,而在RAM 中执行程序 /* 512KB Flash, 32KB SRAM */ //单片机的FLASH 和SRAM 大小 MEMORY 下面是对单片机存储空间的定义,不同的段的起始地址,不能叠加地址空间 {

嵌入式软件开发流程图

嵌入式软件开发流程 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。 图1.1 嵌入式系统开发流程图 在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成本,但能大大提高产品的性能和可靠性。 再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。

1.2 嵌入式软件开发概述 嵌入式软件开发总体流程为图4.15中“软件设计实现”部分所示,它同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开画出。 由于在嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。 嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior(下面要介绍的ADS 的一个工具)等,在调试阶段所用的Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图4.16是嵌入式开发的不同阶段的常用软件。 图1.2 嵌入式开发不同阶段的常用软件 嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。 1.交叉编译 嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在第3章中已经提到,编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图4.17所示。

codewarrior v10.x快速指南

Quick Start for Microcontrollers V10.1

CodeWarrior Development Studio for Microcontrollers V10.x Quick Start SYSTEM REQUIREMENTS Hardware Windows? OS: PC with 1 GHz Intel? Pentium? compatible processor Linux? OS: 1.8 GHz Intel Pentium class processor (or better) 2GB of RAM CD-ROM drive Depending on host-target connection: Parallel Port, 9-pin Serial Port, or USB Port Operating System Microsoft? Windows XP 32-bit and 64-bit (Professional Edition), Microsoft Windows Vista? 32-bit and 64-bit (Home Premium Edition and Business Edition), or Microsoft Windows 7 32-bit and 64-bit (Home Premium Edition and Professional Edition) Red Hat Enterprise Edition 5.2 Disk Space 2 GB total 400MB on Windows system disk This Quick Start explains how to install the CodeWarrior Development Studio for Microcontrollers V10.x software on Windows and Linux operating systems, and how to use the CodeWarrior IDE to create, build, and debug a project. Section A:Installing CodeWarrior Software NOTE This section describes how to download and install CodeWarrior for Microcontrollers V10.x from the Web or install it from the CD. The Web version has a time-bombed license.

CodeWarriorV软件使用指南

Code Warrior V5.1软件使用指南 一、软件安装指南 二、关于BDM驱动 三、创建一个新的工程 四、编写与运行你的程序 2011年10月16日陈万忠

Code Warrior V5.1软件使用指南 一、软件安装指南 1. 打开文件安装文件夹 2. 找到安装文件 3. 双击此文件,出现安装界面: 4. 点击“NEXT”按钮,出现安装路径信息。如果修改系统默认路径,点击“change”按钮,然后修改安装路径,否则点击“NEXT”按钮。

5. 在安装过程中,根据提示信息,完成每一步的安装。 6. 安装完毕后,在所有程序中找到Code Warrior V5.1执行文件,点击执行即可进入Code Warrior V5.1集成环境。

7. 也可以拖到桌面上。此时桌面出现如下图标: 二、关于BDM驱动 请将“BDM使用说明和驱动”文件夹下的文件: OpenSourceBDM.dll 和 tblcf.dll以及 tblcf_gdi.dll 三个文件,复制到: C:\Program Files\Freescale\CWS12v5.1\Prog\gdi目录下(或者你安装时修改过的Code Warrior V5.1所在目录\Prog\gdi子目录下),在调试时选择Open Source BDM 调试接口即可。

三、创建一个新的工程 创建一个新的工程,要按照下面向导选项的8个步骤来选择完成。 双击桌面快捷图标,进入 Code Warrior集成开发环境窗口。 第一步:创建一个新的工程。

第二步:选择CPU类型,选择HCS12X目录下的HCS12X Family。 第三步:选择CPU芯片型号和BDM工具TBDML。 第四步:选择编程语言,我们选择C语言编程。

调试程序的简单说明

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。 为了增加调试信息,可以按照下述步骤进行: ?打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) ?选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括: ?选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译),而不必每次都从头开始编译。 调试方法:

1、使用 Assert(原则:尽量简单)assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint) 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码: void CForDebugDlg::OnOK() { for (int i = 0; i < 1000; i++) //A { int k = i * 10 - 2; //B SendTo(k); //C int tmp = DoSome(i); //D int j = i / tmp; //E } } 执行此函数,程序崩溃于E行,发现此时tmp为0,假设tmp本不应该为0,怎么这个时候为0呢?所以最好能够跟踪此次循环时DoSome函数是如何运行的,但由于是在循环体内,如果在E行设置断点,可能需要按F5(GO)许多次。这样手要不停的按,很痛苦。使用VC6断点修饰条件就可以轻易解决此问题。步骤如下。 1 Ctrl+B打开断点设置框,如下图:

调试程序的简单说明.

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC 调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。 为了增加调试信息,可以按照下述步骤进行: ? 打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开 ?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括: 命令行 Project settings 说明 无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息

/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功能无效 ? 选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database 以上的选项,则Link incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法: 1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

我对软件开发过程的理解

软件开发的过程 摘要:软件开发过程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。 生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件开发过程覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。 1.需求分析 1.1 需求分析的特点和任务 需求分析是软件开发的第一步。获取需求的一个必不可少的结果是对项目中描述的客户需求的普遍理解。一旦理解了需求,分析者、开发者和客户就能探索出描述这些需求的多种解决方案。参与需求获取者只有在他们理解了问题之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。把需求获取集中在用户任务上—而不是集中在用户接口上—有助于防止开发组由于草率处理设计问题而造成的失误。有几种原因使需求分析变得困难:(1)客户说不清楚需求;(2)需求自身经常变动;(3)分析人员或客户理解有误。 需求获取、分析、编写需求规格说明和验证并不遵循线性的顺序,这些活动是相互隔开、增量和反复的。当你和客户合作时,你就将会问一些问题,并且取得他们所提供的信息(需求获取)。同时,你将处理这些信息以理解它们,并把它们分成不同的类别,还要把客户需求同可能的软件需求相联系(分析)。然后,你可以使客户信息结构化,并编写成文档和示意图(说明)。下一步,就可以让客户代表评审文档并纠正存在的错误(验证)。这四个过程贯穿着需求分析的整个阶段。需求获取可能是软件开发中最困难、最关键、最易出错及最需要交流的方面。需求获取只有通过有效的客户—开发者的合作才能成功。分析者必须建立一个对问题进行彻底探讨的环境,而这些问题与产品有关。为了方便清晰地进行交流,就要列出重要的小组,而不是假想所有的参与者都持有相同的看法。对需求问题的全面考察需要一种技术,利用这种技术不但考虑了问题的功能需求方面,还可讨论项目的非功能需求。确定用户已经理解:对于某些功能的讨论并不意味着即将在产品中实现它。对于想到的需求必须集中处理并设定优先级,以避免一个不能带来任何益处的无限大的项目。 1.2.需求分析的一般方法 跟班作业。通过亲身参加业务工作来了解业务活动的情况。这种方法可以比

Codewarrior License制作教程(优选.)

目录 第1章 Codewarrior License制作教程 (1) 1.1 准备工作 (1) 1.2 制作步骤 (1) 1.2.1 确定FlexLm版本号 (1) 1.2.2 找FEATURE (2) 1.2.3 找vendor (5) 1.2.4 找计算seed的关键数据 (6) 1.2.5 计算ENCRYPTION_SEED (8) 1.2.6 制作License生成器 (9) 1.2.7 生成License (9)

第1章Codewarrior License制作教程 声明 作者出于学习的目的撰写此文,读者需承担文章使用或传播过程中产生的一切后果,作者概不负责。 我们以飞思卡尔Codewarrior for HC08 v6.0为例,来介绍制作过程。 1.1 准备工作 我们需要事先准备如下软件: z Lmtools z OllyICE z Calcseed z Lmcryptgui 1.2 制作步骤 破解Flexlm最主要的是找到4样东西: z确定Flexlm版本号 z找FEATURE z找vendor z计算ENCRYPTION_SEED 1.2.1确定FlexLm版本号 运行Lmtools,选择Utilities标签页,点击Browse选择Codewarrior安装目录bin目录下lmgr8c.dll,然后点击Find Version,如图 1.1。 图 1.1 确定Flexlm版本号

1.2.2找FEATURE 运行OllyICE,界面如图 1.2。 图 1.2 OllyICE运行界面 点击“文件/打开”,选择Codewarrior安装目录bin目录下IDE.exe,界面如图 1.3。 图 1.3 打开IDE.exe界面

调试过程说明文档

使用我司展讯平台的屏调试流程: 如果首次调试没有安装必须的程序,先装转换、下载和驱动工具。 1、拷贝HWInfo(20130412)、展讯平台研发下载工具(2013-09-03)、dotnetfx.exe,先打开 AndroidHWInfo.exe看是否能正常打开,不能的话点击dotnetfx.exe此执行程序进行安装,安装好之后打开。 2、装下载驱动进入展讯平台研发下载工具(2013-09-03)—》驱动—》智能机USB驱动 V1.0.0.21—》32位系统驱动(此处是选择和你电脑系统匹配的位数)—》dpinst.exe安装。安装完成后即可以下载,如果下载时仍然提示安装,请选择手动或自动安装。 3、我们的驱动装换工具如下图所示: (1)第一个选择LCD驱动程序,即FAE调试的文件,文件以供应商的名字缩写+LCD型号等组成。LCD目录点后面的找到.config所在的文件,然后再LCD驱动的下拉中点击此.config.6820和6825平台的TP选择不一样,我以易欣达Y82947为例。6825平台:

当文件都选取好了之后,点击此工具任一界面右下方的按钮,这样就生成了一个以.img做后缀的文件即我们可以下载的驱动了,在文件生成后的保存的位置可以有我们自己选择,默认是放在和LCD驱动文件的同一级目录下。生成的文件如下: 6820平台: 6820和6825在驱动生成方面的不同点就在于一个TP文件的改动,其他步骤同样。6825是要选择这两个地方,而6820平台是把这两个文件合成了一个文件了,即我们在选择时只用选择,而把置空。

4、下载 打开下载工具中的ResearchDownload.exe出现如下界面,点击第二个按钮,进行相应的下载必选文件的放置。

codewarrior快速使用手册

CodeWarrior? Development Studio for Microcontrollers V6.x Quick Start SYSTEM REQUIREMENTS Hardware PC with 1 GHz Intel? Pentium? compatible processor 512 MB of RAM (1 GB recommended) CD-ROM drive Depending on host-target connection: Parallel Port, 9-pin Serial Port, or USB Port Operating System Microsoft? Windows? XP or Microsoft Windows Vista? Operating Systems 32-bit (Home Premium Edition and Business Edition) Disk Space 2 GB total 400MB on Windows system disk This Quick Start explains how to install the CodeWarrior Development Studio for Microcontrollers V6.x software, and how to use the IDE to create, build, and debug a project. Section A:Installing CodeWarrior Software NOTE You must install the CodeWarrior software on the equipment on which you intend to use the software. 1.Insert CodeWarrior Development Studio CD into CD-ROM drive — CW Auto Install begins NOTE If Auto Install does not start, run launch.exe, which is located in the root directory of the CD. The CodeWarrior software may be part of a DVD included with your kit. In this case, click Install CodeWarrior Development Studio for Microcontrollers, follow the on-screen instructions, and skip to step "Check for updates".

实验三简单程序调试

实验三 简单程序调试 一、实验目的 初步掌握汇编语言程序设计及调试的方法 二、实验仪器 1、 DVCC-598JH 单片开发机一台; 2、 WD-5 型直流稳压源一台。 三、实验预习 1、认真阅读实验指导书有关内容,明确实验目的、内容和操作步骤; 2、对实验中的程序进行手工汇编; 3、复习实验中相关指令的功能; 4、复习顺序结构程序设计思想。 四、实验内容 程序一: BCD 码数的加法运算 设有两个4位压缩的BCD 码数,一个数存放在片内RAM31H (千位、百位) 和30H (十位、个位)单元,另一个数高位存在 33H 单元,低位存在32H 单元, 求两数之和,其结果存30H 和31H 单元。 参考程序: 地址 目标程序 源程序 ORG 1000H 1000 7830 MOV R0, #30H 1002 7932 MOV R1, #32H 1004 E6 MOV A , @R0 1005 27 ADD A , @R1 1006 D4 DA A 1007 F6 MOV @R0, A 1008 08 INC R0

100909INC R1 100A E6MOV A,@R0

100B 37 ADDC A , @R1 100C D4 DA A 100D F6 MOV @R0, A 100E 80FE SJMP $ END 程序二: 拆字程序 设有一个 8 位二进制数存放在片内 RAM40H 单元,将其拆为两个 4 位二进 制数,高 4 位存于 41H 单元, 低 4 位存于 42H 单元。 参考程序: ORG 1000H START : MOV A , 40H ; 取数 ANL A , #0FH ;屏蔽高四位 MOV 42H , A ; 存低四位数 MOV A , 40H ; 重新取数 SWAP A ;高低四位互换 ANL A , #0FH ;屏蔽低四位 MOV 41H , A ; 存高四位数 SJMP $ END 程序三: 负数求补程序 已知一个16位二进制负数存放在R1R0中,试求其补码,并将结果存在R3R2 中。 提示:二进制负数的求补方法可归纳为“求反加 1”。即可利用CPL 指令实 现求反,而 16 位加 1,则应是低 8位先加 1 ,高8位再加上低位的进行位。 注意, 这里不能用 INC 指令,因 INC 指令不影响标志位。 参考程序: ORG 1000H START : MOV A , R0 ;读低 8 位 CPL A ;取反

嵌入式软件开发流程

嵌入式软件的开发流程 嵌入式系统是指用于执行独立功能的专用计算机系统。它由包括微处理器、定时器、微控制器、存储器、传感器等一系列微电子芯片与器件,和嵌入在存储器中的微型操作系统、控制应用软件组成,共同实现诸如实时控制、监视、管理、移动计算、数据处理等各种自动化处理任务。嵌入式系统以应用为中心,以微电子技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件与硬件可剪裁,以此满足系统对功能、成本、体积和功耗等要求。最简单的嵌入式系统仅有执行单一功能的控制能力,比如说单片机的应用,在唯一的ROM 中仅有实现单一功能控制程序,无微型操作系统。复杂的嵌入式系统,例如个人数字助理(PDA)、手持电脑(HPC)等,具有与PC几乎一样的功能。实质上与PC的区别仅仅是将微型操作系统与应用软件嵌入在ROM、RAM 和/或FLASH存储器中,而不是存贮于磁盘等载体中。很多复杂的嵌入式系统又是由若干个小型嵌入式系统组成的。 近些年来,随着以计算机技术,通讯技术为主的信息技术的快速发展和Internet 的广泛应用,传统的控制学科正在发生变革,出现了许多新的生长点。伴随而来的一个现象是控制专业的相当多的学生在毕业后进入了计算机,通讯行业,以致有人说学控制没有用,自动化专业可以取消了。这些情况的出现使我们控制教育工作者反复思考,传统的控制应如何拓宽它的领域?控制专业应该教什么才使学生感到有用?流行的嵌入式操作系统可以分为两类:一类是从运行在个人电脑上的操作系统向下移植到嵌入式系统中,形成的嵌入式操作系统,如微软公司的Windows CE及其新版本,SUN公司的Java操作系统,朗讯科技公司的Inferno,嵌入式Linux等。这类系统经过个人电脑或高性能计算机等产品的长期运行考验,技术日趋成熟,其相关的标准和软件开发方式已被用户普遍接受,同时积累了丰富的开发工具和应用软件资源。 另一类是实时操作系统,如WindRiver 公司的VxWorks,ISI 的pSOS,QNX系统软件公司的QNX,ATI 的Nucleus,中国科学院凯思集团的Hopen嵌入式操作系统等,这类产品在操作系统的结构和实现上都针对所面向的应用领域,对实时性高可靠性等进行了精巧的设计,而且提供了独立而完备的系统开发和测试工具,较多地应用在军用产品和工业控制等领域中。Linux 是90年代以来逐渐成熟的一个开放源代码的操作系统。PC机上的Linux 版本在全球数以百万计爱好者的合力开发下,得到了非常迅速的发展。90 年代末uClinux,RTLinux 等相继推出,在嵌入式领域得到了广泛的关注,它拥有大批的程序员和现成的应用程序,是研究开发工作的宝贵资源。 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。

相关主题
文本预览
相关文档 最新文档