嵌入式软件工程师笔试题(含答案)
- 格式:doc
- 大小:38.00 KB
- 文档页数:4
嵌入式笔试题及答案一、单选题(每题2分,共20分)1. 嵌入式系统通常指的是:A. 通用计算机系统B. 专用计算机系统C. 便携式计算机系统D. 网络计算机系统答案:B2. 下列哪个不是嵌入式系统的特点:A. 实时性B. 资源受限C. 可扩展性D. 专用性答案:C3. 在嵌入式系统中,通常使用哪种类型的处理器:A. 通用处理器B. 微处理器C. 数字信号处理器D. 图形处理器答案:B4. 嵌入式系统的开发流程不包括以下哪一项:A. 需求分析B. 系统设计C. 硬件选择D. 软件编程答案:C5. 以下哪个不是嵌入式操作系统的功能:A. 任务调度B. 内存管理C. 文件系统D. 网络通信答案:D6. 在嵌入式系统中,中断服务程序的作用是:A. 执行系统初始化B. 处理系统异常C. 响应外部事件D. 执行系统监控答案:C7. 以下哪个不是嵌入式系统的硬件组成部分:A. 微处理器B. 存储器C. 输入/输出设备D. 操作系统答案:D8. 嵌入式系统中的外设驱动程序的主要功能是:A. 控制外设的电源B. 实现系统与外设的通信C. 管理外设的内存D. 处理外设的错误答案:B9. 在嵌入式系统中,以下哪个不是常用的编程语言:A. C语言B. C++C. JavaD. Assembly答案:C10. 以下哪个不是嵌入式系统的开发工具:A. 编译器B. 调试器C. 仿真器D. 网络浏览器答案:D二、多选题(每题3分,共15分)11. 嵌入式系统的开发需要考虑以下哪些因素:A. 系统性能B. 成本控制C. 功耗管理D. 软件兼容性答案:A, B, C12. 嵌入式系统的软件包括以下哪些部分:A. 引导程序B. 操作系统C. 应用程序D. 驱动程序答案:A, B, C, D13. 嵌入式系统的硬件设计包括以下哪些内容:A. 微处理器选择B. 存储器设计C. 外设接口D. 电源管理答案:A, B, C, D14. 嵌入式系统的调试方法包括:A. 单元测试B. 集成测试C. 系统测试D. 性能测试答案:A, B, C, D15. 嵌入式系统的实时性要求包括:A. 确定性B. 可预测性C. 可重复性D. 可扩展性答案:A, B三、判断题(每题1分,共10分)16. 嵌入式系统总是需要操作系统的支持。
嵌入式工程师笔试试卷及答案在嵌入式系统领域,嵌入式工程师是一种非常重要的职业。
他们需要掌握硬件和软件技能,以及在资源受限的环境下进行开发的技能。
本试卷旨在测试嵌入式工程师的专业知识和技能。
第一部分:选择题这一部分包括5个选择题,每个问题有4个选项,只有一个选项是正确的。
这部分的目的是测试对嵌入式系统的基础知识的掌握。
下列哪个不是嵌入式系统的特点?A. 硬件资源受限B. 实时性要求高C. 软件开发成本低D. 系统可靠性要求高答案:C下列哪个不是嵌入式系统中常用的总线标准?A. USBB. I2CC. RS232D. HDMI答案:D下列哪个不是C语言的关键字?A. switchB. caseC. classD. break答案:C下列哪个不是常用的编译器?A. GCCB. KeilC. IARD. Visual Studio答案:D下列哪个不是常用的调试工具?A. JTAGB. GDBC. SVND. Trace32答案:C第二部分:简答题这一部分包括2个简答题,每个问题需要回答2-3个句子。
这部分的目的是测试对嵌入式系统的基本原理和通信协议的理解。
什么是中断?中断的作用是什么?答:中断是指在CPU运行程序的过程中,由于某些事件的发生,需要立即暂停当前程序的执行,转而去执行另一段代码的一种机制。
中断的作用是提高CPU 的利用率,增强系统的实时性和可靠性,实现CPU与外设的异步通信。
请简述I2C总线的工作原理。
答:I2C总线是一种串行通信协议,通过两根线SCL和SDA实现设备间的通信。
SCL线是时钟线,由主设备控制;SDA线是数据线,用于主设备和从设备之间的数据传输。
在传输数据时,主设备先发送起始信号,然后发送从设备地址和读/写标志,接着发送数据或者请求数据,最后发送停止信号。
从设备在接收到起始信号后,会根据地址来判断是否需要响应主设备的请求。
第三部分:编程题这一部分包括2个编程题,需要在规定的环境下编写代码。
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。
记住,第一印象很重要。
2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A) <= (B) (A) : (B))这个测试是为下面的目的而设的:1). 标识#define在宏中应用的基本知识。
这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。
2). 三重条件操作符的知识。
这个操作符存在C语言中的原因是它使得编译器能产生比if- then-else更优化的代码,了解这个用法是很重要的。
3). 懂得在宏中小心地把参数用括号括起来4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b);3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。
这问题对区分一个正常的伙计和一个书呆子是很有用的。
只有书呆子才会读C语言课本的附录去找出象这种问题的答案。
当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。
1.在嵌入式系统中,常用于存储启动代码和关键数据的存储器类型是?
A.SRAM
B.DRAM
C.Flash存储器(答案)
D.SDRAM
2.下列哪项不是嵌入式操作系统的特点?
A.实时性强
B.可裁剪
C.资源丰富,占用空间大(答案)
D.可靠性高
3.在嵌入式系统开发中,用于描述硬件设备的结构和功能的语言是?
A.C语言
B.HDL(硬件描述语言)(答案)
C.Java
D.Python
4.下列哪种通信接口在嵌入式系统中常用于低速、短距离的数据传输?
B
B.SPI(答案)
C.Ethernet
D.HDMI
5.嵌入式系统开发中,常用于调试和程序下载的接口是?
A.GPIO
B.UART(答案)
C.I2C
D.PWM
6.下列哪项不是嵌入式系统设计中需要考虑的实时性因素?
A.响应时间
B.吞吐量
C.延迟时间
D.代码美观性(答案)
7.在嵌入式Linux系统中,用于管理系统资源和提供程序运行环境的层是?
A.Bootloader
B.Kernel(答案)
C.Filesystem
D.Shell
8.下列哪种工具不是嵌入式系统开发中常用的交叉编译工具?
A.arm-linux-gcc
B.gcc(答案)
C.arm-none-eabi-gcc
D.x86_64-linux-gnu-gcc。
2025年招聘嵌入式软件开发岗位笔试题及解答(某大型国企)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、在嵌入式软件开发中,以下哪个不是常见的硬件接口?A. SPI接口B. USB接口C. UART接口D. I2C接口2、嵌入式系统中,下列哪种编程语言最适合用于开发实时操作系统?A. JavaB. PythonC. C++D. JavaScript3、嵌入式系统中,以下关于ARM架构描述错误的是:A. ARM架构低功耗、高性能B. ARM架构主要用于移动计算和嵌入式领域C. ARM架构不支持多媒体和DSP功能D. ARM架构具有灵活的技术授权模式4、在嵌入式软件开发中,关于实时操作系统的描述错误的是:A. 实时操作系统具有高度的响应性和确定性B. 实时操作系统主要应用于实时性要求不高的场景C. 实时操作系统可以确保任务的及时完成和响应需求D. 实时操作系统常用于工业控制、医疗设备等领域5、在嵌入式软件开发中,以下哪种编程语言因其高性能和对低级硬件的控制能力而被广泛使用?A. PythonB. JavaC. CD. JavaScript6、嵌入式系统的核心特点是:A. 计算机视觉B. 无线通信C. 实时响应D. 数据存储7、在嵌入式软件开发中,以下哪个选项是实时操作系统的特点?A. 具有固定的时间表B. 可以根据需要动态调整任务优先级C. 仅适用于单处理器系统D. 不支持多任务处理8、在嵌入式系统中,通常使用哪种类型的存储器?A. 硬盘驱动器C. 光盘D. 闪存9、嵌入式软件开发中,关于内存管理的说法错误的是:A. 动态内存分配是指在程序运行时动态地分配或释放内存。
B. 静态内存分配在程序开始运行时进行,并在程序结束时释放。
C. 内存泄漏是指分配给程序的内存没有得到及时回收,导致内存占用持续增长。
D. 为了避免内存溢出,应该尽可能多地分配内存空间。
10、关于嵌入式系统的说法,错误的是:A. 嵌入式系统通常运行在特定硬件平台上,并对硬件环境有较强依赖性。
嵌入式软件工程师笔试题1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串1、c51单片机的串口异步通信和同步通信的区别,说说他们的优缺点。
2、C51单片机的数据总线和地址总线是如何复用的,说明原理。
3、C51单片机的绝对寻址范围是多少k?4、说明下面的寻址方式(1)MOV A , #30H (2)MOV A,@R0(3)ADD A , R4 (4)MOV A+@DPTR 5、写出下面分别是什么指针?(1)int *a[10]; (2)int (*a)[10];(3)int (*P)(int) ; (4)int (*a[10])(int);6、void swap(int a,int b){int temp;temp = a;a=b;b=temp;}main(void){int x="3",y=4;swap(x,y);}问上面程序执行完后x= ?,y=?7、typedef struct test{int i;short s;char c;union{int a;short b;}}example ;int y ;y = sizeof(example);请问在TC环境下,y=?8、编程实现数组的逆置,例如,“hello,world!”逆置后为“!dlrow,olleh”。
9、你认为嵌入式操作系统包括哪些部分?说说实时操作系统有哪些特点。
10、冯诺依曼结构的计算机由哪几部分组成?11、说说程序,进程,线程的区别。
12、说说你怎样理解程序= 数据+ 结构+ 算法13、根据函数原型编程实现一个数组,按从大到小的冒泡排序。
void tibbule(int a[],int n);//a[]为数组,n为数组长度14、OSI有哪几层?tcp/ip包括哪几层?15、编程实现一个双链表的节点插入和删除。
嵌入式工程师笔试题带答案1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/*题目:将一个字符串逆序*/#includeusing namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src) { if (dest==NULL && src==NULL)return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<="" p="">{*(dest+i) = *(src+val_len-i-1);}return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);< bdsfid="96" p=""></mystrrev(str1,str);<>free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。
一、选择题(10×3=30分)1.STM32F103单片机的每个通用I/O端口有个32位的配置寄存器,个32位的数据寄存器,个32位的置位/复位寄存器,个16位的复位寄存器,个32位的锁定寄存器。
答案是()。
(A)2,1,2,1,1 (B)2,2,1,1,1 (C)2,2,2,1,1 (D)2,2,1,2,12. STM32F103单片机的所有GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为()时可以是激活的或者非激活的。
(A)输入(B)输出(C)推挽(D)开漏3.关于中断嵌套说法正确的是()。
(A)只要响应优先级不一样就有可能发生中断嵌套(B)只要抢占式优先级不一样就有可能发生中断嵌套(C)只有抢占式优先级和响应优先级都不一才有可能发生中断嵌套(D)以上说法都不对4.定时/计数器的定时是指(),定时/计数器的计数是指()。
(A)对时间计数(B)外部事件定时(C)内部时钟计数(D)外部事件计数5.在进行串行通信时,若两机的发送与接收可以同时进行,则称为()。
(A)半双工传送(B)单工传送(C)双工传送(D)全双工传送6.有以下程序#includeint f(int n);main(){ int a=3,s;s=f(a);s=s+f(a);printf(“%d\n”,s);}int f(int n){ static int a=1;n+=a++;return n;}程序运行以后的输出结果是()。
(A)7 (B)8 (C)9 (D)107.在使用STM32固件库函数编程中以下()定义表示通用推挽输出。
(A)GPIO_Mode_Out_OD(B)GPIO_Mode_AF_PP(C)GPIO_Mode_Out_PP(D)GPIO_Mode_AF_OD8.以下能对一维数组a进行初始化的语句是:()。
(A)int a[5]=(0,1,2,3,4,)(B)inta(5)={}(C)int a[3]={0,1,2}(D)int a{5}={10*1}9.STM32嵌套向量中断控制器(NVIC) 具有个可编程的优先等级,在STM32F103 系列上面,又只有个可屏蔽中断。
软件工程师+嵌入式C/C++笔试题一、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用?答:MVC设计模式(应用观察者模式的框架模式)M: Model(Business process layer),模型,操作数据的业务处理层,并独立于表现层(Independent of presentation)。
V: View(Presentation layer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。
C: Controller(Control layer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图MVC框架的一种实现模型模型二(Servlet-centric):JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC 的实现模式。
StrutsMVC框架(Web application frameworks)Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。
Struts提供了一些组件使用MVC开发应用程序:Model:Struts没有提供model类。
这个商业逻辑必须由Web应用程序的开发者以JavaBean 或EJB的形式提供View:Struts提供了action form创建form bean, 用于在controller和view间传输数据。
此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。
Controller:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在struts-config.xml的特定配置文件中进行配置,接收JSP输入字段形成Action form,然后调用一个Action控制器。
选择题
1:设float a=2, b=4, c=3;,以下C语言表达式与代数式 (a+b)+c计算结果不一致的是
A.(a+b)*c/2
B.(1/2)*(a+b)*c
C.(a+b)*c*1/2
D.c/2*(a+b) 参考答案:B,因为a,b,c三个变量都是浮点数,所以在B答案中其结果是0,因为在计算1/2是就是0,如果改成1/2.0就正确了。
2:为了向二进制文件尾部增加数据,打开文件的方式应采用
A.″ab″
B.″rb+″
C.″wb″
D.″wb+″
参考答案:D
3:下述程序执行后的输出结果是
#include
main()
{
int x='f';
printf("%c\n",'a'+(x-'a'+1));
}
A.g
B.h
C.i
D.j
参考答案:A
4:C语言中,下列运算符优先级最高的是
A.!
B.%
C.>>
D.==
参考答案:A
5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。
A.*a
B.a [ 0 ]
C.a
D.a++
参考答案:D
6:执行语句“ k=7>>1; ”后,变量 k 的当前值是
A.15
B.31
C.3
D.1
参考答案:C
7:定义函数时,缺省函数的类型声明,则函数类型取缺省类型
A.void
B.char
C.float
D.int
参考答案:D
8:若main()函数带参数,参数个数最多是
A.0
B.1
C.2
D.3
参考答案:C 只知道有定义形式main(int argc,char* argv[]))
9:若有宏定义:#define MOD(x,y) x%y
则执行以下语句后的输出结果是
int a=13,b=94;
printf(″%d\n″,MOD(b,a+4));
A.5
B.7
C.9
D.11
参考答案:B
10:下列各个错误中,哪一个不属于编译错误
A.改变 x 原值 3 为 5 ,写作“ x==5 ;”
B.花括号不配对
C.复合语句中的最后一条语句后未加分号
D.变量有引用、无定义
11:下列程序段运行后, x 的值是( )
a=1;b=2;x=0;
if(!( -- a))x -- ;
if(!b)x=7;else ++x;
A.0
B.3
C.6
D.7
参考答案:A
12:设
#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B Y(5+1) 传递过去的应该是6,而不是简单的把5+1给替换掉
13:若定义了char ch[]={″abc\0def″},*p=ch;则执行printf(″%c″,*p+4);语句的输出结果是
A.def
B.d
C.e
D.0
参考答案:C
14:下列转义字符中错误的是
A.′\000′
B.′\14′
C.′\x111′
D.′\2′
参考答案:C error C2022: '273' : too big for character
15:算术运算符,赋值运算符和关系运算符的运算优先级按从高到低依次为
A.算术运算、赋值运算、关系运算
B.算术运算、关系运算、赋值运算
C.关系运算、赋值运算、算术运算
D.关系运算、算术运算、赋值运算
参考答案:B
16:设#define N 3
#define Y(n) ((N+1)*n)
则表达式2*(N+Y(5+1))的值是
A.42
B.48
C.54
D.出错
参考答案:B
17:表达式 strcmp( “ 3.14 ”,“ 3.278 ” ) 的值是一个
A.非零整数
B.浮点数
C.0
D.字符
参考答案: A
18:设struct
{ short a;
char b;
float c;
}cs;
则sizeof(cs)的值是
A.4
B.5
C.6
D.7
参考答案: D 字节对齐的话应该是8
19:若变量已正确定义,表达式( j=3 , j++ )的值是
A.3
B.4
C.5
D.0
20:C 语言中运算对象必须是整型的运算符是
A.%
B./
C.!
D.**
参考答案:A
简答题
21:打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ),要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,...
例子:当N =5,打印出下面的图形:
X X X X X
X Y Y Y X
X Y 0 Y X
X Y Y Y X
X X X X X
22:谈谈COM的线程模型。
然后讨论进程内/外组件的差别。
23:多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?
参考答案:
虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实现多态的关键.
24:#include
void main()
{
int c;
ile ((c=getchar())!= ′\ n ′ )
switch(c - ′ 2 ′ )
{
case 0:
case 1:putchar(c+4);break;
case 2:putchar(c+4);break;
case 3:putchar(c+3);break;
default:putchar(c+2);break;
}
printf( ″\ n ″ );
}
运行时输入: 2473 ,输出结果:
参考答案:6897 VC++6.0测试过
25:用两个栈实现一个队列的功能?
参考答案:
设2个栈为A,B, 一开始均为空.入队:
将新元素push入栈A;出队:
(1)判断栈B是否为空;
(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),
26:写一语句实现x是否为2的若干次幂的判断。
参考答案:!(X)&(X-1)
27:解二次方程:a*x*x+b*x+c
int Quadratic( double a,double b,double c,double& x1,double& x2);
返回值:解的个数
28:如何判别一个数是unsigned。
参考答案;
#define issignal(x) ((x>=0 && ~x>=0) ? 1:0) //为1是无符号为0有符号29:执行下述程序的输出结果是 ABCDEFCDEFEF 。
#include
char b[]="ABCDEF";
main()
{
char *bp;
for (bp=b;*bp;bp+=2)
printf("%s",bp);
printf("\n");
}
30:已知一个数组table,用一个宏定义,求出数据的元素个数。
参考答案:#define NTBL
#define NTBL (sizeof(table)/sizeof(table[0]))
第12题,传的是5+1,不是6,结果是48,选B,我试了。