串口数据一段时间接收不到_串口长时间运行突然收不到数据

串口数据一段时间接收不到_串口长时间运行突然收不到数据史上最全嵌入式开发面试题合集(一)嵌入式面试基础题合集1.嵌入式系统中经常要用到无限循环,如何用C编写死循环while(1){}或者for(;;)2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。

史上最全嵌入式开发面试题合集(一)
  嵌入式面试基础题合集

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

  while(1){}或者for(;;)

  2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里

  程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区。

  3.关键字const有什么含义?

  1) 只读

  2)使用关键字const也许能产生更紧凑的代码

  3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

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

  1、总是使用不经常改动的大型代码体。

  2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

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

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

  能,局部会屏蔽全局。

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

  对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

  6.引用与指针有什么区别?

  1) 引用必须被初始化,指针不必。

  2) 引用初始化以后不能被改变,指针可以改变所指的对象。

  3) 不存在指向空值的引用,但是存在指向空值的指针。

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

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

  8.请问以下代码有什么问题:

  int main() {undefined

  char a;

  char *str=&a;

  strcpy(str,"hello");

  printf(str);

  return 0;

  }

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

  9.请在C语言中,关键字static有三个明显的作用:

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

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

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

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

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

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

  a) 一个整型数

  b) 一个指向整型数的指针

  c) 一个指向指针的的指针,它指向的指针是指向一个整型数

  d) 一个有10个整型数的数组

  e) 一个有10个指针的数组,该指针是指向一个整型数的

  a) int a;

  b) int *a;

  c) int **a;

  d) int a[10];

  e) int *a[10];

  12. 使用C语言中的#define来定义一个常量来表示一年有多少秒?

  #define SECONDS_PER_YEAR (606024*365)UL

  一定要加括号,宏定义只是替换,不加括号会出错

  13. 请问进程和线程有什么区别?

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

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

  进程有自己的地址空间,当一个进程建立,系统就会为它分配地址空间,而线程是共享进程的数据,使用相同的地址空间。

  一个进程中可包含多个线程,一个进程死掉不糊影响其他进程,一个线程死掉,整个进程都死了。

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

  14. 请判断以下代码是否存在问题。

  char * s1="hello";

  char * s2="world";

  char * s3=strcat(s1,s2);

  有问题,s1与s2都为常量指针,其内容不可修改,运行就会产生段错误。

  15. 请问下面的代码有什么问题?

  void test1()

  {

  char string[10];

  char* str1 = "0123456789";

  strcpy( string, str1 );

  }

  字符串strl的末尾是以’ \0 ’结尾的,所以他的长度是11,而string的长度不够

  5. 请问预处理器标识#error的目的是什么?

  编译程序时,只要遇到 #error就会跳出一个编译错误当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:

  #ifdef XXX

  #error "XXX has been defined"

  #else

  …

  #endif

  这样,如果编译时出现错误,输出了XXX has been defined,表明宏XXX已经被定义了。

  16. 请解释以下三个变量声明的含义。

  ① int const *p;

  ② int * const p;

  ③ int const *p const;

  int const*p=const int *p; const修饰的是指针 p,表示指针p的值不能改变,而p(即地址)是可以改变的;

  int * const p; const修饰的是p(即地址)是常量,不可改变,但是*p的值可以改变。

  int const *p const ; 上面两种情况兼得,表示只读,其地址以及地址中的值都不可改变

  7. 请简述OSI七层模型和TCP/IP模型的组成?

  OSI模型 TCP/IP模型

  应用层 应用层

  表示层

  会话层

  传输层 传输层

  网络层 网络层

  数据链路层

  物理层 链路层

  17. 请简述TCP/IP镞包含哪些分段,每一层有哪些常用协议?

  应用层:http dns telnet ftp TFTP 。。。。

  传输层:tcp udp

  网络层:ip ICMP ARP rarp

  数据链路层:ethnet ethnet2 802.3 ppp fr x.25 hdlc

  物理层:比特流

  18.请问TCP与UDP协议有什么区别?

  1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

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

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

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

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

  19.请写一下strcpy函数的代码?

  char * strcpy(char *dst,const char *src)

  {

  if((dst==NULL)||(src==NULL))

  return NULL;

  int *p = dst;

  while((*dst++ = *str++) != /0)

  return p;

  }

  20.从在浏览器地址栏中输入http://www.baidu.com到看到百度首页,这个过程中间经历了什么?

  按照时间顺序:

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

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

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

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

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

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

  7.释放TCP连接。

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

  21.从在浏览器地址栏中输入http://www.baidu.com到看到百度首页,都涉及到哪些网络协议?

  TCP/IP五层模型中网络层及以上用到的协议:

  1.应用层:HTTP、DNS、HTTPS

  2.传输层:TCP、UDP

  3.网络层:IP、ARP

  22.请问同步与异步有什么区别?

  同步(Sync):所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(比如系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。

  这种情况下,用户不能关闭界面,如果关闭,那么迁移程序也会中断,用户体验不好。

  异步(Async):将用户请求放入消息队列,并反馈给用户,比如系统迁移程序已经启动,提示你可以关闭浏览器了。然后程序再慢慢地写入数据库。但是用户没有卡死的感觉,用户体验较好。

  23.请问进程和线程有什么区别?

  (1)进程是资源分配的最小单位。

  (2)线程是程序执行的最小单位,也是处理器调度的基本单位,但进程不是,两者均可并发执行。

  (3)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据,使用相同的地址空间,因此,CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销也比进程小很多。

  (4)线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也跟着死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

  (5)进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

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

  24.请问进程和线程都有什么优缺点?

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

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

  何时使用多进程,何时使用多线程?

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

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

  25.线程是否具有相同的堆栈?

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

  每个线程有自己的堆栈。

  26.C语言编译时动态链接和静态链接得区别是什么?

  动态库:

  1、链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。

  2、程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。

  3、. 加载速度比静态库慢

  4、发布程序需要提供依赖的动态库

  静态库:

  1、静态库被打包到程序中加载速度快

  2 、发布程序无需提供静态库,应为已经在app中,移植方便

  3 、 链接时完整的拷贝至可执行文件中,被多次使用就会有多次冗余拷贝

  4、 更新,部署,发布麻烦

  27.堆和栈的区别?

  ①申请方式不同:栈由系统自动分配,堆是由人为自行开辟(malloc,new)

  ② 申请的大小不同:栈是从高地址像低地址分配的,分配空间较小,堆是由地址向高地分配的,空间较大

  ③申请效率不同:栈由系统分配,分配速度较快,堆一般较慢

  ④栈是连续的地址空间,堆不是连续的地址空间,很容易产生内存碎片,浪费内存。

  28.进程间通信的方式有哪些?

  1.无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

  2.有名管道 (named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

  3.消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  4.信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

  5.信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

  6.共享内存( shared memory ) : 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

  7.套接字( socket ) :套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

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

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

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

  30. 请简述嵌入式系统的组成?

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

  31. 如何引用一个已经定义过的全局变量?

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

  32. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

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

  33. 请问堆栈溢出一般是由什么原因导致的?

  没有回收垃圾资源

  34. 请问队列和栈有什么区别?

  35. 请问Internet采用哪种网络协议?该协议的主要层次结构?

  tcp/ip 应用层/传输层/网络层/数据链路层/物理层

  36. 请问Internet物理地址和IP地址转换采用什么协议?

  ARP (Address Resolution Protocol)(地址解析协议)

  37. 请问IP地址的编码分为哪俩部分?

  IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。

  38. 从在浏览器地址栏中输入http://www.baidu.com到看到百度首页,这个过程中间经历了什么?

  按照时间顺序:

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

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

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

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

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

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

  7.释放TCP连接。

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

  39. 从在浏览器地址栏中输入http://www.baidu.com到看到百度首页,都涉及到哪些网络协议?

  TCP/IP五层模型中网络层及以上用到的协议:

  1.应用层:HTTP、DNS、HTTPS

  2.传输层:TCP、UDP

  3.网络层:IP、ARP

  40. 请写出下列代码的输出内容

  #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

  41. 请问下面的代码有什么问题?

  #include <stdio.h>

  #include <stdlib.h>

  void getmemory(char *p)

  {

  p=(char *) malloc(100);

  strcpy(p,"hello world");

  }

  int main( )

  {

  char *str=NULL;

  getmemory(str);

  printf("%s/n",str);

  free(str);

  return 0;

  }

  程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险

  42.请找出下面代码中的所以错误

  说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

  #include"string.h"

  main()

  {

  char*src="hello,world";

  char* dest=NULL;

  int len=strlen(src);

  dest=(char*)malloc(len);

  char* d=dest;

  char* s=src[len];

  while(len–!=0)

  d++=s–;

  printf("%s",dest);

  return 0;

  }

  int main()

  {

  char* src = "hello,world";

  int len = strlen(src);

  char* dest = (char*)malloc(len+1);//要为\0分配一个空间

  char* d = dest;

  char* s = &src[len-1];//指向最后一个字符

  while( len– != 0 )

  *d++=*s–;

  *d = 0;//尾部要加\0

  printf("%s\n",dest);

  free(dest);// 使用完,应当释放空间,以免造成内存汇泄露

  return 0;

  }

  43.请用宏定义写出swap(x,y)函数。

  #define swap(x, y)\

  x = x + y;\

  y = x – y;\

  x = x – y;

  44.请简述嵌入式系统硬件层的组成?

  硬件层:嵌入式微处理器、存储器、通用设备接口和I/O接口。

  嵌入式核心模块=微处理器+电源电路+时钟电路+存储器

  Cache:位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。它的主要目标是减小存储器给微处理器内核造成的存储器访问瓶颈,使处理速度更快。

  45.请问何谓单片机?单片机与一般微型计算机相比,具有哪些特点?

  答:单片机是在一块集成电路上把CPU、存储器、定时器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机。它与通用微型计算机相比,具有如下特点:

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

  (2) 采用面向控制的指令系统,控制功能强;

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

  (4) 产品系列齐全,功能扩展性强;

  (5) 功能是通用的,像一般微处理机那样可广泛地应用在各个方面。

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

  时钟周期:也称为震荡周期,定义为时钟频率的倒数(时钟周期是单片机外接晶振的倒数,如12Mhz的晶振,它的时钟周期就是1/12us),它是单片机中最基本的、最小的时间单位。

  状态周期:它是时钟周期的两倍

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

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

  47.请简述你对单片机空闲与掉电模式的了解?

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

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

  48.请问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)内部时钟发生器。

  49.请简述51单片机串行口的结构?

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

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

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

  XTAL1、XTAL2——外接时钟引脚。XTAL1为片内震荡电路的输入端,XTAL2为片内震荡电路的输出端。8051的时钟有两种方式,一种是片内时钟震荡方式,需要在这两个脚外接石英晶体和震荡电容,震荡电容的值一般取10p~30p;另一种是外部时钟方式,将XTAL1接地,外部时钟信号从XTAL2脚输入。

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

  RST(复位):单片机复位引脚。

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

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

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

  52.请简述你对STC89C51单片机I/O引脚:P0、P1、P2、P3的认识?

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

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

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

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

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

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

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

  (2) 中断系统:IP、IE;

  (3) 定时器/计数器:TMOD、TCOM、TL0、TH0、TL1、TH1;

  (4) 并行I/O口:P0、P1、P2、P3;

  (5) 串行口:SCON、SBUF、PCON。

  54.请问51单片机如何模拟I2C总线通信?

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

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

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

  1

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/91919.html

(0)
上一篇 2024年 5月 31日
下一篇 2024年 5月 31日

相关推荐

关注微信