1.嵌入式系统中经常用到无限循环,如何用C编写死循环

 while(true){}for(;;)

2.程序中局部变量、全局变量、动态申请的数据分别存储在哪里

 局部变量:栈区全局变量:静态区动态申请数据:堆区

3.关键字const含义

  • 只读

  • 使代码更紧凑

  • 编译器自然保护不希望改变的参数,防止无意修改代码

4.什么是预编译,什么时候需要预编译

总是使用不长改动的大型代码体;程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

预编译指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

5.局部变量和全局变量是否能重名

能,局部会屏蔽全局。

在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

6.引用和指针有什么区别

  • 引用必须要被初始化,指针不必

  • 引用被初始化后不会被改变,指针可以改变所指向的对象

  • 不存在指向空值的引用,但是存在指向空值的指针

7.一个32位的机器,该机器的指针是多少位

指针是多少位只要看地址总线的位数就行。80386以后的机子都是32位的数据总线,所以指针的位数就是4个字节。

8.下面的代码有什么问题:

 int main(){char a;char *str=&a;strcp(str,"hello");printf(str);return 0;}

没有为str分配内存空间,将会发生异常,问题出现在将一个字符串复制进一个字符串变量指针所在所指地址。虽然可以输出正确的结果,但因为越界进行内在读写而导致程序崩溃。

9.在c中,关键static有哪三个明显作用

  • 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

  • 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问,它是一个本地全局变量。

  • 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

10.请写一个“标准”的宏MIN,这个宏输入两个参数并返回较小的一个

#define MIN(A,B)((A)<=(B)?(A):(B))

11.用变量a给出下面的定义

  1. 一个整型数

  2. 一个指向整型数的指针

  • int a;

  • int *a;

12.用变量b给出下面的定义

一个指向指针的指针,他指向的指针是一个整型数

int **b;

13.用变量c给出下面的定义

  1. 一个有10个整型数的数组

  2. 一个有10个指针的数组,该指针是指向一个整型数的数组

  • int a[10];

  • int *a[10];

14.使用c中的#define 来定义一个常量来表示一年有多少秒

#define SECONDS_PER_YEAR (606024*365)UL

15.进程和线程有什么区别

进程:资源分配的最小单位

线程:程序运行的最小单位

  • 进程有自己的地址空间,当一个进程建立,系统就会为他分配地址空间,而线程是共享进程的数据,使用相同的地址空间。CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销也比进程小很多。

  • 一个线程可以包含多个线程,一个进程死掉不会影响其它进程,一个线程死掉,整个进程都死了。

  • 线程之间通信更加方便,同一进程下的线程共享全局变量,静态变量等,而进程通信需要以IPC方式进行。

  • 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好过于进程。

  • 执行过程:每个独立的进程都有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

优缺点:

  1. 线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上执行

  2. 进程执行开销大,但是能够很好的进行资源管理和保护,可以跨机器迁移。

使用情况:

  1. 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。

  2. 要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

16.下面的代码有什么问题

 char *s1="hello";char *s2="world";char *s3=strcat(s1,s2);

s1和s2都是常量指针,其内容不可修改,运行就会产生段错误。

17.预处理器表示#error的目的是什么

编译程序时,只要遇到#error就会跳出一个编译错误。如果程序太大,可尝试用if、else提示错误

18.解释以下三个变量声明的含义:

  1. int const *p;

  2. int *const p;

  3. int const *p const;

  • int const *p中,const修饰的是指针p,表示指针p的值不可以改变,但是p(地址)可以改变的

  • int *const p中,const修饰的是常量p,p值不可以改变,当时 指针p的值可以改变

  • int const *p const,上两种情况兼得,表示只读,地址及地址中的值都不能改变

19.简述OSI七层模型和TCP/IP模型的组成

 OSI模型           TCP/IP模型应用层             应用层表示层会话层传输层             传输层网络层             网络层数据链路层物理层             链路层

20.TCP和UDP有什么区别

  • TCP面向连接,UDP无连接

  • TCP提供可靠服务,他会通过校验,丢包时的重传控制,序号标识,滑动窗口、确认应答,次序乱掉的分包进行顺序控制实现可靠传输。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;而UDP尽最大努力交付,不保证可靠交付;

  • UDP具有较好的实时性,工作效率比TCP高,适用于高速传输和实时性有较高要求的通信或广播通信场景;

  • 每一条TCP连接只能是点到点的,UDP支持一对一,一对多,多对一,多对多的交互通信方式;

  • TCP对系统资源要求较多,UDP对系统资源要求较少。

21.下面的代码有什么问题

 void test1(){char string[10];char *str1="0123456789";strcpy(string,str1);}字符串str1的末尾是以'\0'结尾的,所以他的长度是11,而string的长度不够

22.简述嵌入式系统的定义和发展的4个阶段

定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

嵌入式系统发展的4个阶段:无操作系统阶段,简单操作系统阶段,实时操作系统阶段,面向Internet阶段

23.简述嵌入式系统的组成

硬件层、中间层、系统软件层和应用软件层

24.如何引用一个已经定义过得全局变量

可以用引用头文件的方式,也可以用extern关键字。

25.全局变量可不可以定义在可被多个.C文件包含的头文件中

可以,在不同的C文件中以static形成来声明同名全局变量。

26.堆栈溢出一般由什么原因导致

没有回收垃圾资源

27.队列和栈有什么区别

队列:先进先出,栈先进后出

28.Internet采用哪种网络协议,该协议的主要层次结构

tcp/ip协议

应用层,传输层,网络层,链路层,物理层

29.Internet物理地址和IP地址转换采用什么协议

APR(地址解析协议)

30.IP地址的编码分为哪两部分

网络号和主机号

不过要和“子网掩码”按位与上才知道哪个是网络位哪个是主机位。

31.在浏览器地址栏中输入百度网址看到百度首页,在这个过程中间经历了什么

按照时间顺序:

  1. 客户端浏览器获取用户在地址栏输入的域名

  2. 客户端浏览器将域名发送给DNS域名系统,请求解析

  3. DNS解析域名得到相应的IP,返回给客户端浏览器

  4. 客户端浏览器根据IP向服务器发起TCP三次握手,建立TCP连接

  5. 客户端浏览器向服务器发送HTTP请求,请求百度首页

  6. 服务器通过HTTP响应向客户端浏览器返回百度文件

  7. 释放TCP连接

  8. 客户端浏览器解析HXML文件,根据文件内容获取CSS,JS等资源文件,将页面渲染展示给用户

32.在浏览器地址栏中输入 www.baidu.com到看到百度首页都涉及到哪些网络协议

  1. 应用层:HTTP、DNS、HTTPS

  2. 传输层:TCP、UDP

  3. 网络层:IP、ARP

33.写出下列代码的输出内容

 #include<stdio.h>main(){int a,b,c,d;a=10;b=a++;c=++a;d=10*a++;printf("b,c,d:%d,%d,%d",b,c,d);return 0;}b,c,d:10,12,120

34.下面的代码有什么问题

 void getmemory(char *p){p=(char *)malloc(100);strcpy(p,"hello world");}int main(){char *str=NULL;getmemory(str);free(str);return 0;}程序崩溃,getmemory中的malloc不能返回动态内存,free()对str操作很危险

35.何谓单片机,单片机和一般微型计算机相比,具有哪些特点

单片机是在一块集成电路上把CPU、存储器、定时器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机

特点:

  1. 单片机的程序存储器和数据存储器是分工的,前者为ROM后者为RAM;

  2. 采用面向控制的指令系统,控制能力强;

  3. 多样化的I/O接口,多功能的I/O引脚;

  4. 产品系列齐全,功能扩展性强。

36.请解释名词:时钟周期、状态周期、机器周期、指令周期

  • 时钟周期:也称震荡周期,定义为时钟频率的倒数,是单片机中最基本的、最小的时间单位。

  • 状态周期:他是时钟周期的2倍

  • 机器周期:单片机的基本操作周期,在一个操作周期内,单片机完成一项基本操作,如取指令、存储器读写等。它由12个时钟周期组成

  • 指令周期:它是指CPU执行一条指令所需要的时间。一般一个指令周期含1-4个机器周期

37.简述单片机空闲与掉电模式:

空闲模式:除CPU处于休眠状态之外,其他硬件全部处于活动状态

掉电模式:也称休眠模式,外部晶振停振,CPU,定时器,串行口全部停止工作,只有外部中断继续工作

38.8051单片机内部包含哪些主要逻辑功能部件

8051单片机是完整的单片微型计算机。内部包括下列硬件资源:

  1. 8位CPU

  2. 4KB的片内程序存储器ROM。可寻址64KB程序存储器和64KB外部

  3. 128B内部RAM

  4. 21个SFR

  5. 4个8位并行I/O口(共32位I/O线)

  6. 一个全双工的异步串行口

  7. 两个16位定时器/计数器

  8. 5个中断源,两个中断优先级

  9. 内部时钟发生器

39.简述51单片机串行口的结构

51单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收。串行口主要由2个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器以及若干控制门电路组成。

40.STC89C51单片机的时钟引脚是哪两个?时钟方式有哪些

时钟引脚:XTAL1(19脚)、XTAL2(18脚)

XTAL1为片内震荡电路的输入端,XTAL2位片内震荡电路的输出端。

8051的时钟有两种方式:

  1. 片内时钟震荡方式,需要在这两个脚外接石英晶体和震荡电容,震荡电容的值一般取10p~30p

  2. 外部时钟方式,将XTAL1接地,外部时钟信号从XTAL2输入

41.请问STC89C51单片机的编程控制引脚有哪些

  1. RST(复位):单片机复位引脚

  2. PSEN(29脚):程序存储器允许输出控制端(低电平有效)

  3. ALE/PROG(30脚):在单片机扩展外部RAM时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现地址和数据的隔离

  4. EA/Vpp(31脚):EA接高电平时,单片机读取内部程序存储器;EA接低电平时,单片机直接读取外部ROM

42.简述STC89C51单片机I/O引脚:P0、P1、P2、P3的认识

  1. P0口(39-32脚):双向8位I/O口,每个口可独立控制,没有上拉电阻,为高阻态,所以不能正常的输出高低电平,因此该组IO口在使用时必要接上拉电阻,一般选10千欧。

  2. P1口(1-8脚):准双向8位IO口,每个口可独立控制,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向IO口。

  3. P2口(21-28脚):准双向8位IO口,每个口可独立控制,内带上拉电阻,与P1口相似。

  4. P3口(10-17脚):准双向8位IO口,每个口可独立控制,内带上拉电阻。作为第一功能可以当做普通IO口,与P1口相似。

43.单片机有哪几个特殊功能寄存器,各在单片机的哪些功能部件中

8051单片机内部有21个特殊功能寄存器,在物理上是分散在片内各功能部件中,在数学上把它们组织在内部数据存储器地址空间80H~FFH中,以便能使用统一的直接寻址方式来访问。

44.单片机有哪几个特殊功能寄存器?各在单片机的哪些功能部件中

  1. CPU:ACC、B、PAW、SP、DPRT(由DPL和DPH两个8位寄存器组成);

  2. 中断系统:IP、IE

  3. 定时器/计数器:TMOD、TCOM、TL0、TH0、TL1、TH1

  4. 并行I/O口:P0、P1、P2、P3

  5. 串行口:SCON、SBUF、PCON

45.51单片机如何模拟I2C总线通信

单片机模拟I2C总线通信,因为许多单片机没有I2C总线接口,如51单片机,但可以在单片机应用系统中通过软件模拟I2C总线的工作时序,在使用时,只需要正确调用各个函数就能方便地扩展I2C总线接口器件。

单片机在模拟I2C通信时,需要写出如下关键的程序:

总线的初始化、启动信号、应答信号、停止信号、写一个字节、读一个字节

46.简述数码管的显示原理

电路方面有共阴极和共阳极之分,让数码管显示不同的数字就是先定义一个保存16进制数的数组,然后在程序中把这个16进制数赋值给相应的引脚。

47.什么是看门狗

在单片机构成的系统中,由于单片机的工作有可能受到外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,所以出于对单片机运行状态的实时监控的考虑,便产生了一种专门用于检测单片机程序运行状态的芯片,俗称看门狗。

48.简述WatchDog(看门狗)的工作原理

看门狗有两个重要的信号:时钟输入和复位输出

电路工作时,CPU送出时钟信号给看门狗,即喂狗

如果系统出现了故障,CPU无法送出持续的时钟信号,看门狗即输出复位信号给CPU,复位系统

辉光君 GLow Ы i

49.请简述 A / D 电路组成和工作原理

A / D 电路由采样、保持、量化和编码四部分组成。 由于模拟信号在时间上是连续信号,而数字信号在时间上是离散信号, A / D 转换首先要按照奈奎斯特采样定律对模拟信号进行采样;由于数字信号在数值上是不连续的,数字信号的取值只有有限个数值,因此需要对采样后的数据进行量化,使其量化到有效电平上,编码就是对量化后的数值进行多进制到二进制的转换。

50.DAC 和 ADC 的实现各有哪些方法

实现 DAC 转换的方法:权电阻网络 D / A 转换,倒梯形网络 D / A 转换, 权电流网络 D / A 转换、权电容网络 D / A 转换以及开关树形 D / A 转换等。 实现 ADC 转换的方法:并联比较型 A / D 转换,反馈比较型 A / D 转换,双积分型 A / D 转换和 V - F 变换型 A / D 转换。

51.什么是寻址方式

寻找指令中,操作数或操作数所在地址的方式。也就是如何找到存放操作数的地址,把操作数提取出来的方法。

52.什么是堆栈

堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以“后进先出”的结构方式处理的。实质上,堆栈就是一个按照“后进先出”原则组织的一段内存区域。

53.简述以下移位操作代码的含义及其等效写法

P1=P1<<2

P1=P1>>2

  1. P1=P1<<2表示P1左移2位,左移一位相当于乘以2,等效写法:P1<<=2

  2. P1=P2>>3表示P1右移3位,右移一位相当于除以2,等效写法:P1>>=3

54.简述键盘的工作方式

  1. 编程扫描方式

  2. 定时扫描方式

  3. 中断方式

55.线程是否都有相同的堆栈

真正的程序执行都是线程来完成的,程序启动时操作系统就已经创建了一个主线程。

每个线程都有自己的堆栈。

56.单片机使用外部中断时应该注意什么

把某个引脚设置为外部中断功能后,该引脚为输入模式,由于没有内部上拉电阻,所以必须外接一个上拉电阻,确保引脚不被悬空;除了引脚连接模块的设置,还需要设置 VIC 模块,オ能产生外部中断,否则外部中断只能反映在 EXTINT 寄存器中;要使器件进入掉电模式并通过外部中断唤醒,软件应该正确设置引脚的外部中断功能,再进 入掉电模式。

【嵌入式软件开发】之面试常识(一)相关推荐

  1. 嵌入式软件开发工程师面试指南_总结

    嵌入式软件开发工程师面指南 一.C语言 1.1.局部变量能否和全局变量重名 1.2.如何用C编写死循环 1.2.new和malloc 1.3.static的用法(定义和用途)(必考) 1.4.cons ...

  2. 2018年应届毕业宇视科技嵌入式软件开发工程师面试笔试总结

    一共三面 1.第一次线上笔试:简单,考C语言和一点点算法 2.第二次5面:4个技术面+1个HR面.时间比较长,我从下午2点面试到晚上7点多,强度比较大,建议吃饱饭养足精神在去 3.第三次BOSS面. ...

  3. 【嵌入式软件开发岗位 ---- 面试总结01】

    1.你在比赛项目中做过哪些事情. 最近的话,做过一个基于PID模糊算法实现的水温控制系统,用STM32F103C8T6作为控制器,通过DS18B20返回水温,再通过模糊PID算法运算出PWM输出脉冲给 ...

  4. 嵌入式软件开发笔试面试知识点总结-Linux部分

    文章目录 Linux inode和文件描述符 gcc -O是什么 bin文件和elf文件区别 介绍下file_operations结构体 copy_from_user open read write等 ...

  5. 联发科技嵌入式_【MTK联发科技嵌入式软件开发工程师面试题目|面试经验】-看准网...

    MTK联发科技股份有限公司(MediaTek.Inc)是全球著名IC设计厂商,专注于无线通讯及数字多媒体等技术领域.其提供的芯片整合系统解决方案,包含无线通讯.高清数字电视.光储存.DVD及蓝光等相关 ...

  6. 蔚来资深Linux嵌入式软件开发工程师面试

    目录 一.字节对齐 二.字节序 三.线程 四.进程 五.Coding 六.epoll 七.http 总结 一.字节对齐 字节对齐的概念 字节对齐后字段的偏移大小 字节对齐的原因 二.字节序 大小端 网 ...

  7. 嵌入式软件开发经典面试题

    Ⅰ.写在前面 在嵌入式软件开发的面试中,遇到笔试的机率非常大.一般来说,笔试的题目不会太难,但牵涉的知识面比较广. 若你年底有找工作的计划,有必要找一些笔试题看看,这样能让你从题目中掌握并学到很多知识 ...

  8. 旷视科技 face++ 嵌入式软件开发-面试---深度好文

    今天2019-5-15号,去参加了旷视科技-嵌入式软件开发-岗位的面试,觉得公司还不错,在这里总结一下,方便以后去面试的同学和自己的总结回顾. 岗位描述: 旷视嵌入式开发主要分两个方向:偏应用岗位 和 ...

  9. 从事嵌入式开发需要掌握哪些知识?从事嵌入式软件开发的前景如何?

    什么是嵌入式? 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一.嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器.存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很 ...

  10. 嵌入式软件开发工程师谈软件架构的设计

    嵌入式软件开发工程师谈软件架构的设计 注:此处嵌入式特指基于linux平台,单片机和其他rtos不在讨论范围 笔者从事嵌入式软件开发有6,7个年头,bsp,驱动,应用软件,android hall,f ...

最新文章

  1. Windbg内核调试之四: Dump文件分析
  2. linux和用户账户相关的系统文件
  3. SAP UI5 ABAP repository的handler class
  4. WINHEX的比较、同步功能加上NTFS对稀疏文件的支持
  5. 比较两张大小相同的照片的差异,返回数值
  6. 主成分分析(PCA)原理详解_转载
  7. 大数据_Flink_Java版_数据处理_流处理API_Transform(5)_connect合流---Flink工作笔记0033
  8. 创建目录_Word创建自动目录,你会了吗?
  9. 【语音识别】基于matlab MFCC+IPC特征+SVM中英语种识别【含Matlab源码 612期】
  10. 父与子python版本,父与子的编程之旅 与小卡特一起学Python(第3版)
  11. linux recv函数 参数,linux send recv函数详解
  12. 数字电路基础01(含半加器、全加器、逻辑化简、卡诺图化简)
  13. 分式化简结果要求_中考分式化简求值题题型归纳
  14. 服务器网卡芯片b,英特尔Intel 82599ES芯片万兆网卡E10G42BTDA 通过高可靠数据中心网络改造赢得信...
  15. 2017下半年软件测评师上午考试试题
  16. 前端实现HTML转PDF下载的两种方式
  17. 数学符号的意义总结(未完待续)
  18. 前端:时间( ISO)标准时间转换为时间戳
  19. 马丁福勒 关于微服务特点的描述
  20. 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法

热门文章

  1. 假装写在了开头qwq
  2. CString的拆分词函数Tokenize
  3. C/C++牛客网刷题练习之翻转链表篇
  4. 嵌入式开发-STM32硬件I2C驱动OLED屏
  5. How To Verify the Word Size (32bit vs 64bit) of the Oracle Binary on MS Windows systems (文档 ID 46506
  6. fop生成pdf的中文乱码问题
  7. 【语音识别】基于MFCC的GMM实现语音识别matlab源码
  8. 三条中线分的六个三角形_三角形三条中线的交点叫什么
  9. 高等数学笔记:定积分换元谬误
  10. 数组的趣味应用-文曲星猜数游戏