1 选择题:
1.1 答题说明
本题提供10个单项选择题和5个多项选择题,请考生把选择的答案编号填写到试题提供的工程源文件EXAM_Questions.c(请参见第2题编程题的2.2 试题使用说明)的如下全局数组中(主要目的是为了能自动化阅卷),该文件的全局数组定义如下:
/* 如下全局数组初值记录单项选择题答案,
请考生把选择的答案替换下面的初值0 */
int gaSingleSelected[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
/* 如下全局数组初值记录多项选择题答案,
请考生把选择的答案替换下面的初值0 */
int gaMultiSelected[5] = {0, 0, 0, 0, 0};
【单项选择题答卷示例】
如果考生答题时10个单项选择题分别选择①、②、③、④、①、②、③、④、①、②,则请把EXAM_Questions.c文件中的gaSingleSelected[10]数组初值改为如下(注意顺序一定不能错,否则会导致自动化判阅判分与您的实际不符合,实际判分以考生填写内容为准):
/* 如下全局数组初值记录单项选择题答案,
请考生把选择的答案替换下面的初值0 */
int gaSingleSelected[10] = {1, 2, 3, 4, 1, 2, 3, 4, 1, 2};
【多项选择题答卷示例】
如果考生答题时5个多项选择题分别选择“①②③”、“②③”、“③④”、“③”、“①④”,则请把EXAM_Questions.c文件中的gaMultiSelected[5]数组初值改为如下(注意顺序一定不能错,否则会导致自动化判阅判分与您的实际不符合,实际判分以考生填写内容为准):
/* 如下全局数组初值记录多项选择题答案,
请考生把选择的答案替换下面的初值0 */
int gaMultiSelected[5] = {123, 23, 34, 3, 14};
1.2 单项选择题(共10题,每题2分)
1.2.1 25根地址线可寻址范围是()
①:4MB
②:8MB
③:16MB
④:32MB
1.2.2 下面的变量中,保存在BSS段的是()
①:有初值的全局变量。
②:无初值的全局变量。
③:有初值的动态局部变量。
④:无初值的动态局部变量。
1.2.3 下面堆(Heap)与栈(stack)的叙述不正确的是()
①:Stack的空间由操作系统自动分配/释放,Heap上的空间由手动分配/释放。
②:C中的malloc函数分配的内存空间即在堆上。
③:局部非静态变量和函数的入参都在栈中分配。
④:程序中定义变量尽可能从堆中分配,因为堆的效率比栈高。
1.2.4 以下哪个地址可能是PPC处理器上的cache line的起始地址?
①:0x111198
②:0x111190
③:0x1111a0
④:0x1111b0
1.2.5 下面有关malloc和calloc区别描述正确的是()
①:malloc不能初始化所分配的内存空间,而calloc能;
②:calloc不能初始化所分配的内存空间,而malloc能;
③:malloc申请的是Cache-Safe的内存,而calloc申请的不是;
④:calloc申请的是Cache-Safe的内存,而malloc申请的不是;
1.2.6 以下哪个不是对嵌入式实时操作系统(RTOS)时间性能的评价指标?
①:上下文切换时间
②:最大中断延迟时间
③:任务调度时间
④:任务执行时间
1.2.7 对于同步机制,下列说法不正确的是()
①:不要长时间的锁住一份资源
②:系统设计之初就考虑同步策略,而不能等出了问题再考虑加锁
③:同步的唯一目的是对于临界资源进行保护
④:对于一些需要访问临界资源资源的函数,可以设计成线程安全的函数
1.2.8 要想函数有着较好的性能,则以下说法中不正确的是()
①:函数处理中将可能导致处理中止的判断放在前面
②:频繁调用函数的内部处理最小化
③:所有的小函数都使用内联函数
④:对多次重复的运算,应将结果缓存为变量使用
1.2.9 0x12345678 在采用BigEndian中内存的排列顺序是()
①:12 34 56 78
②:34 12 78 56
③:78 56 34 12
④:56 78 12 34
1.2.10 如下结构,在4字节对齐环境中,sizeof(struct date)的值为()
typedef union
{
short int i;
char k[4];
char c;
}DATE;
struct date
{
char cat;
DATE cow;
};
①:6
②:8
③:12
④:14
1.3 多项选择题(共5题,每题2分,多选错选0分,少选得1分)
1.3.1 如下变量可以用于可重入函数的有()
①:任务变量
②:受保护的全局变量
③:全局变量
④:局部变量
⑤:静态局部变量
1.3.2 以下哪些方法可以保证cache一致性()
①:CPU写内存后软件执行cacheFlush, CPU读内存前软件执行cacheInvalidate
②:CPU读内存后软件执行cacheFlush, CPU写内存前软件执行cacheInvalidate
③:设置cache属性为COPYBACK
④:打开硬件cache snoop功能
1.3.3 下列有关MMU(memory management unit)的主要功能描述正确的是
①:完成逻辑地址到物理地址的映射转换
②:提供不同级别的地址访问保护功能
③:CACHE空间大小设置
④:CACHE属性设置
1.3.4 下列描述正确的选项有()
①:当编译选项“-fpack-struct”和“-mstrict-align”其中之一存在时,编译后会将32位操作的语句转换成8位操作的语句。
②:加上-funaligned-pointers的编译开关时,可以使系统自动对非对齐访问方式进行处理,保证非对齐方式访问的正确性。
③:加上-mstrict-align选项,可以解决当使用压缩结构时,可能会出现结构不能直接赋值的问题。
④:-O2优先的目的:编译器试图进行代码优化,减少代码长度,加快执行效率。
1.3.5在VxWorks中,当函数A调用函数B时,将一定的信息压栈,然后进入被调用函数B中。这些信息包括():
①:压栈的信息最前面四个字节是指向原来栈顶的指针,也就是上一级栈顶指针;
②:函数A的入口参数,
③:函数B的入口参数,
④:函数A的局部变量;
⑤:函数B的局部变量;
2 编程题:提供链表基本操作及排序的功能
2.1 考核目的
考核目的:本试题主要考核链表的基本操作及排序的编码技能(本试题已经设计完成代码基本框架,考生只要理解该框架并进行编码实现即可)。
2.2 试题使用说明
使用说明:本次技能鉴定考试提供两份试题(A卷和B卷)供考生选择其中的一份答题,本试题是两份试题中的B卷。
试题中已经明确说明了每个特性的验收标准,考生需要根据验收标准自行考虑测试思路,需要考虑各种出错的可能情况,试题中不提供测试代码。
本试题支持通过Tornado调测环境和Visual C++ 6.0调测环境进行调试,并提供了已经建好的工程,具体使用方法参见“1.5试题提供的可直接使用的VC工程和Tornado工程”。
答卷提交:请使用试题包您所选择工程中的ListProc.c和ListProc.h编写调试源代码(所有新增源代码均应在这两个文件中,不能增加或者删减源文件),完成后把ListProc.c和ListProc.h、EXAM_Questions.c(选择题答卷文件)三个文件用WinRar打包成一个文件后提交,命名格式为“考试级别数字+调测环境代号+8位工号”的格式,如:
张三的工号为00187658,考1级,使用Tornado调测环境(代号为BT,B表示是试题B卷,T表示是Tornado环境),则打包文件的名称为:1BT00187658.rar
李四的工号为00198765,考1级,使用VC调测环境(代号为BV,B表示是试题B卷,V表示是VC环境),则打包文件的名称为:1BV00198765.rar
2.3 试题简介
要求代码从字符数组aData[]中读取数据并存放在串链表中,并根据如下数据处理规则进行排序(排序算法考生自定),排序后将结果重新存入字符链表中,最后将结果输出到字符数组aResult[]中
数据处理规则:从字符串中间一分为二,左边按照ASCII码值升序排列,右边按照降序排列,如果字符串长度是奇数,中间的字符位置保持不动(即不参与排序,后续有示例说明)。
本题请考生完成数据的读取、排序处理及数据的保存功能,具体包括:
(1) 提供数据读取函数接口。要求从字符数组aData[]中读取数据,并将数据存在链表中;
(2) 提供链表内容排序函数接口:要求根据题目提供的数据处理规则对字符串数据进行排序处理,并将处理后的结果重新保存在原字符串链表中;
(3) 提供数据保存函数接口:将最终结果输出到字符数组aResult[];
2.4 试题详细要求:
请考生实现下面的函数接口和功能(考生可根据设计和编码需求增加内部函数代码,阅卷时只测试下面的函数接口和功能):
2.4.1 提供数据读取函数接口
------------------------------------------------------------------
函数功能: 完成从字符数组aData[]中读取数据并保存在链表中的功能
函数原型: U32 DataRead (void)
输入参数: 无
返回值: 读取数据成功返回0,失败返回非零(考生自行定义)
特别说明:要求从字符数组aData[]中读取所有数据,并将数据保存在链表中。
------------------------------------------------------------------
【验收标准】
a) 读取字符数组aData[]中的所有数据;
b) 将读取的所有数据保存在链表中;
c) 读取数据并保存在链表中完成后返回成功;
2.4.2 提供链表内容排序函数接口
------------------------------------------------------------------
函数功能: 根据数据处理规则完成对字符串数据进行排序处理,并将处理后的结果重新保存在原字符串链表中
函数原型: U32 DataSort(Node* pList)
输入参数: pList 存放待处理数据的链表
返回值: 排序成功返回0,失败返回非零(考生自行定义)
------------------------------------------------------------------
【验收标准】
b) 按照题目的处理要求进行排序;
c) 将处理后的数据仍保存在原链表中;
数据处理规则(同上):从字符串中间一分为二,左边按照ASCII码值升序排列,右边按照降序排列,如果是奇数,中间的字符位置保持不动即不参与排序
例如:
原始数据奇数个字符:edcbazfghij
处理后的数据为: abcdezjihgf
原始数据为偶数个字符: edcafghij
处理后的数据为: abcdejihgf
2.4.3 提供数据保存函数接口
------------------------------------------------------------------
函数功能: 完成最终结果输出到字符数组aResult[]中
函数原型: U32 DataSave(void)
输入参数: 无
返回值: 保存成功返回0,失败返回非零(自行定义)
------------------------------------------------------------------
【验收标准】
b) 要求在保存函数中将链表删除;
2.5 试题提供的可直接使用的VC工程和Tornado工程
2.5.1 Tornado试题工程及其使用方法
双击“\Tornado_Project \ ListProc.wpj”程序可以直接打开工程环境,源代码框架(“Tornado_Project\source”)已经提前加到工程中了。
2.5.2 VC试题工程及其使用方法
双击“\Vc_Workspace \ ListProc.dsw”程序可以直接打开工程环境,源代码框架(“Vc_Workspace\source”)已经提前加到工程中了。