2016年嵌入式软件助理工程师认证考试试题题库
{
if(Edit1->text() == "example")
{
QMessageBox::warning(this, "warning", "Pass!", QMessageBox::Yes);
}
else
{
QMessageBox::warning(this, "warning", "Error!", QMessageBox::Yes);
}
}
#include
#include "window.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
CWinDlg dlg;
return dlg.exec();
}
答案要点:
1)什么是Qt中的信号插槽机制?与回调函数机制有何不同?(3分)
答案要点:回调函数机制是事先将一个回调函数指针传递给一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理程序的目的。不同与回调函数机制,Qt提供了信号和插槽机制,信号是一个特定的标识;一个槽就是一个函数,与一般函数不同,槽函数既能和信号关联,当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,执行相应代码。
2)应用程序中用到了哪些控件,列举2个并说明该控件的特点?(4分)
答案要点:应用程序中用到的控件有(1)文本框控件Edit,文本框控件主要用来显示或接收用户的输入信息。(2)按钮控件Button,按钮控件主要响应用户单击功能。
3)根据注释完成程序中相应的语句?(4分)
(1)setLayout(Layout1);
(2)connect(Button1, SIGNAL(clicked()), this, SLOT(function()));
9、 在Linux操作系统下,完成下列任务:
1、 编程实现以下功能
² 主程序hello.c(打印Hello World!)
² 主程序通过头文件hello.h调用message函数
² 头文件hello.h(声明message函数)
² message函数由message.c定义(打印This is a message!)
1、答:
hello.c:
# include
# include
# include
# include "head.h"
int main (int argc,char *argv[])
{
printf("Hello World!\n");
message();
return 0;
}
head.h:
void message(void);
message.c:
# include
void message (void){
printf("This is a message!\n");
}
10. 用C语言编写一个源程序main.c,(1)用以在打开当前目录下的文件“test.txt”,如果没有创建该文件,并使其具有读写属性,(2)编写一个makefile实现自动编译,生成可执行文件main。注:头文件可忽略。
1、
(1)(5分)
Void main(void)
{
int fid;
fid = open(“./test.txt”,O_RDWR|O_CREAT);
if(fid==-1)
{
Printf(“open or create error \n”);
exit(0);
}
Close(fid);
}
(2)(5分)
objects = main.o
exec = main
all:$(objects)
gcc –o $(exec) $(objects)
main.o:main.c
gcc –c main.c
clean:
rm –r $(exec) $(objects)
11、假如你需要设计并编写一个音频采集程序。该程序每50ms采集一次数据,大小为1480个字节。为了进一步压缩处理的需要,你需要建立一个能够至少保存5次所采集数据的缓存,该缓存的大小会根据系统的负载情况动态调整。请利用你所学的C语言内存管理及相关数据结构的知识,设计一个缓存结构,包括其内存分配的形式(如堆、栈等)及其组织结构(如数组、链表等)。
参考答案:
堆适合大块连续内存的分配,需要自行管理(2分)
栈适合小块局部使用内容的分配,程序自动管理(2分)
数组查找快,但大小固定,而链表正好相反。(2分)
题目需要大容量存储,且需要动态改变大小,因此可设计为采用动态(堆)分配的链表型缓存结构。每个链表节点为1480B。(4分)
12、 假定你在目录/home/arm下有一个C程序,他由几个单独的文件组成,而这几个文件又分为包含了其他文件,如下图所示:
文件 |
包含文件 |
main.c |
stdio.h, table.h |
list.c |
list.h |
symbol.c |
symbol.h |
table.c |
table.h |
table.h |
symbol.h, list.h |
完成下列任务:
1. 编写makefile文件,最终的目标文件为hello(交叉编译器为arm-linux-gcc)
2. 在目标机上通过网络文件系统挂载/mnt 到宿主机上的/home/arm目录
1、答:
hello: main.o list.o symbol.o table.o
gcc -o prog main.o list.o symbol.o table.o
main.o: main.c table.h symbol.h list.h
gcc -c -o main.o main.c
list.o: list.c list.h
gcc -c -o list.o list.c
symbol.o: symbol.c symbol.h
gcc -c -o symbol.o symbol.c
table.o: table.c table.h symbol.h list.h
gcc -c -o table.o table.c
clean:
rm hello *.o
2、Mount –t nfs –o noclock 192.168.0.10:/home/armtest/hello /mnt
13、假如你需要设计一个BootLoader,在具体开发之前,你需要确定哪几个主要问题?
参考答案:
需要考虑的问题:(1)与主机连接的方式(2)硬件CPU类型,如何初始化(3)内存空间大小以及如何使用 (4)内核运行前需要准备哪些条件(5)BootLoader需要支持几种模式。(每点各2分)
14、Linux系统中线程的同步方式有互斥量、信号量和条件变量等。假设现在需要设计一个多线程的应用程序,试分析一下以上几种同步方式分别可在什么场合下使用。
参考答案:
Mutex互斥量,用于操作某个临界资源时对该资源上锁,以实现互斥地对独占资源的使用(3分)
Semophore信号灯,信号灯内有一计数器,可以用于对多个同类资源的分配。当资源用完时,申请资源的线程会在信号量上睡眠,有线程释放资源时,再将该线程唤醒继续运行。(3分)
Condition条件变量,条件变量用于等待信号。当一个线程需要等待某个信号时,就可到条件变量上等待,当信号具备时,系统会唤醒该线程继续运行。(4分)
15、进程间通信的方式有多种,假设需要在Linux系统上设计本地运行的两个进程,一个负责采集视频,另一个负责播放。试为两者设计一种数据的通信方式。进一步考虑当两个进程处于不同机器上时,需要采用的通信方式。说明你的设计理由。
参考答案:
本地:共享内存+信号量, 适合于大量数据传输。Linux支持系统V和POSIX的共享内存和信号量。(5分)
远程:Socket+应用协议。适合于跨网络的(大量)数据传输。Linux支持BSD的socket。应用层协议需要自行设计。(5分)
【2016年嵌入式软件助理工程师认证考试试题题库】相关文章: