问答题
阅读以下关于嵌入式操作系统软件编码优化的技术说明,根据要求回答问题1至问题5。
【说明】
由于嵌入式系统对实时性的要求较高,因此一般要求对代码的性能进行优化,使代码的执行速度越快越好。图6-22给出了两个算术运算的程序段(a)、(b)。
问答题
【问题1】
在嵌入式系统设计过程中,给定一份软件设计规格说明书后,下一步的工作就是编写代码。通常编码工作包含哪些步骤? |
【正确答案】
【答案解析】①给定源程序的标准格式,制定编程规范
②准备编程环境,包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等
③编写程序源代码
④进行代码审查,以提高编码质量
这是一道要求读者掌握嵌入式系统软件编码步骤的简答题。本题所涉及的知识点如下:
在嵌入式系统设计过程中,给定一份软件设计规格说明书后,下一步的工作就是编写代码。通常编码工作可分为四个步骤:
①给定源程序的标准格式,制定编程规范。
②准备编程环境,包括软/硬件平台的选择、操作系统、编程语言、集成开发环境等。
③编写程序源代码。
④进行代码审查,以提高编码质量。在审查时,检查软件规格说明书与编码内容是否一致,代码对硬件和操作系统资源的访问是否正确,中断控制模块是否正确执行等。
问答题
【问题2】
图6-22所示的(a)、(b)程序段的功能是完全一样的,都是对一个结构体数组的各个元素进行初始化,但采用两种不同的方法来实现。请在200字以内归纳这两个算术运算程序段所采用的实现方法。 |
【正确答案】
【答案解析】(a)程序段采用的是数组下标的方法,在定位第i个数组元素时,需要将i乘以结构体元素的大小,再加上数组的起始地址
(b)程序段采用的是指针访问的方法,先把指针fp初始化为数组的起始地址,然后每访问完一个数组元素,就把fp加1,指向下一个元素
这是一道要求读者掌握嵌入式系统软件平台选择的简答题。本题所涉及的知识点如下:
图6-22所示的(a)、(b)程序段的功能是完全一样的,都是对一个结构体数组的各个元素进行初始化,但采用两种不同的方法来实现。
图6-22(a)所示的程序段采用的是数组下标的方法,在定位第i个数组元素时,需要将i乘以结构体元素的大小,再加上数组的起始地址。
图6-22(b)所示的程序段采用的是指针访问的方法,先把指针fp初始化为数组的起始地址,然后每访问完一个数组元素,就把fp加1,指向下一个元素。
问答题
【问题3】
在一台采用S3C44BOX微处理器(32位RISC结构)的嵌入式系统中,将图6-22所示的(a)、(b)程序段分别重复11
000次,(a)程序段需要2.13 ms;(b)程序段需要1.01 ms。
由此可见,在进行算术运算编码时遵守哪些编码准则? |
【正确答案】
【答案解析】①尽量使用整数(char、shon、int和long)的加法和减法,
②如果没有硬件支持,尽量避免使用乘法,
③如果没有硬件支持,尽量避免使用浮点数,
④编程时尽量避免使用除法
这是一道要求读者掌握嵌入式系统软件平台选择的简答题。本题所涉及的知识点如下:
在算术运算编码时,需要仔细地选择和使用算术运算符。一般来说,整数的算术运算最快,其次是带有硬件支持的浮点运算,而用软件来实现的浮点运算是比较慢的。因此在编码时需要遵守以下准则:
①尽量使用整数(char、short、int和long)的加法和减法。
②如果没有硬件支持,尽量避免使用乘法。
③如果没有硬件支持,尽量避免使用浮点数。
④编程时尽量避免使用除法。
问答题
【问题4】
在嵌入式系统中,由于软/硬件资源有限,且系统对实时性和可靠性要求较高,因此在进行嵌入式软件开发时,要注意对执行时间、存储空间和开发/维护时间这三种资源的使用进行优化。请具体说明在编写代码时,需要做到哪几点编码准则? |
【正确答案】
【答案解析】在编写代码时,需要做到以下6点编码准则:
①保持函数短小,以提高代码的可靠性和可维护性;
②封装代码,尽量消除代码之间的依赖性,提高对象的内聚性,
③消除冗余代码,避免出现类似一个变量初始化或设置一个变量后却从不使用的现象;
④减少实时代码,最好将对执行时间要求严格的代码转移到一个单独的任务或程序段中;
⑤编写优雅流畅的代码,例如使用Tab键为每个条件体或循环体进行有层次地缩进;将大括号放置在关键词下方的同列处等;
⑥遵守代码编写标准并借助自动检查工具,以捕捉通过传统测试检查不到的各种问题
这是一道要求读者掌握嵌入式系统软件平台选择的简答题。本题所涉及的知识点如下:
在进行嵌入式软件开发时,要注意对执行时间、存储空间和开发/维护时间这三种资源的使用进行优化。也就是说,代码的执行速度越快越好、系统占用的存储空间越小越好,软件开发和维护时间越少越好。具体来说,在编写代码时,需要做到以下六点编码准则:
①保持函数短小,以提高代码的可靠性和可维护性。
②封装代码,尽量消除代码之间的依赖性,提高对象的内聚性。
③消除冗余代码,避免出现类似一个变量初始化或设置一个变量后却从不使用的现象。
④减少实时代码,最好将对执行时间要求严格的代码转移到一个单独的任务或程序段中。
⑤编写优雅流畅的代码,例如使用Tab键为每个条件体或循环体进行有层次的缩进;将大括号放置在关键词下方的同列处;不要把小括号和关键词(if、while等)紧贴在一起,要用空格隔开它们;不要把小括号和函数名紧贴在一起;等等。
⑥遵守代码编写标准并借助自动检查工具,以捕捉通过传统测试检查不到的各种问题。
另外,在嵌入式软件开发过程中,遵守编程规范,养成良好的编程习惯,将直接影响到所编写的代码的质量。编程规范主要涉及命名规则、编码格式及注释的书写这三方面的内容。
问答题
【问题5】
编译器对程序进行一定的优化是非常有必要的,高级语言的程序可以被转化为汇编语言的指令形式。通常优化的方法有(1)、循环优化、废代码的清除等。
对嵌入式系统进行性能测试可以衡量系统的实时性,分析嵌入式软件的优劣,同时分析程序的执行时间可以帮助分析CPU功耗等特性。最坏执行时间是指(2)。 |
【正确答案】
【答案解析】简化算术表达式
(2)程序的大量输入序列所产生的最长的程序执行时间
这是一道要求读者掌握嵌入式系统程序优化技术和程序执行时间的基本概念题。本题所涉及的知识点如下;
编译器对程序进行一定的优化是非常有必要的,高级语言的程序可以被转化为汇编语言的指令形式。优化技术是全面而非片面的。通常优化的方法有简化算术表达式、循环优化和废代码的清除等。
对嵌入式系统进行性能测试可以衡量系统的实时性,分析嵌入式软件的优劣,同时分析程序的执行时间,以帮助分析CPU功耗等特性。精确地测量程序的执行时间意义不大,可以通过以下三个概念来分析程序的执行时间。
①平均执行时间:多次测量程序的执行时间取平均值。
②最佳执行时间:大量输入序列的测试中记录嵌入式程序运行最短的那一个时间。
③最坏执行时间:程序的大量输入序列所产生的最长的程序执行时间。有些情况下,产生最坏执行时间的输入数值并不容易确定,需要对程序的代码进行分析产生特殊的测试用例。