当前位置:   article > 正文

嵌入式软件工程师总结(1)

嵌入式软件工程师总结(1)

1、说说进程和线程的区别
答:
简单的来说,一个程序至少有一个进程,一个进程至少有一个线程。
第一点、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
进程则不会影响另外一个进程,它有自己的独立地址空间。
第二点、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。

2、进程间通信都有些什么?
答:
1、无名管道通信
2、有名管道通信
3、消息队列通信
4、信号量通信
5、信号
6、共享内存通信
7、套接字通信

3、进程有几种状态

一般来说,进程有三个状态,即就绪状态,运行状态,阻塞状态
总结:fork一个进程之后,进程加入队列,处在就绪态,等待被调用,此时如果得到运行就进入运行态,这时如果遇到阻塞状态就进入等待态等待再条件满足后再次进入就绪态,如果运气不好,在运行态时直接被结束了,就进入了僵尸态,如果被信号给终止了,就进入停止态。

4、对内核各种锁的了解

内核锁
1、原子操作(atomic):
2、自旋锁(spinlock/spinlock_irqsave):
3、读写自旋锁(rwlock):
4、顺序自旋锁(seqlock):
5、RCU(读-拷贝-更新):
6、信号量(semaphore):
7、读写信号量;

5、TCP、UDP建立连接一般步骤

TCP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();(可选)
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、开启监听,用函数listen();
5、等待客户端连接上来,用函数accept();
6、收发数据,用函数send()和recv(),者read()和write();
7、关闭网络连接;
8、关闭监听;

TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();可选
3、绑定IP地址、端口等信息到socket上,用函数bind();可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;

与之对应的UDP编程步骤要简单许多,分别如下:
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();可选
3、绑定IP地址、端口等信息到socket上,用函数bind();可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;

6、网络分层

OSI七层网络模型 TCP/IP四层概念模型 对应网络协议
应用层(Application) 应用层 HTTP、TFTP, FTP, NFS, WAIS、 SMTP
表示层(Presentation) 应用层 Telnet, Rlogin, SNMP, Gopher
会话层( Session) 应用层 SMTP, DNS
传输层(Transport) 传输层 TCP, UDP
网络层( Network) 网络层 IP、ICMP、ARP、RARP、AKP、UUCP
数据链路层(Data Link) 数据链路层 FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理层(Physical) 数据链路层 IEEE 802.1A IEEE 802.2到IEEE802.11

7、typedef和#define的用法与区别

一、typedef的用法

在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:

typedef int INT;
typedef int ARRAY[10];
typedef (int*) pINT;
1
2
3
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。

二、#define的用法

#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编

译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:

#define INT int
#define TRUE 1
#define Add(a,b) ((a)+(b));
#define Loop_10 for (int i=0; i<10; i++)
1
2
3
4
在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。

三、typedef与#define的区别

从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#define INT int这样的语句,用typedef一样可以完成,用哪个好呢?我主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的

编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗

长的类型的别名。

宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。请看上面第一大点代码的第三行:

typedef (int*) pINT;
1
以及下面这行:

#define pINT2 int*
1
效果相同?实则不同!实践中见差别:pINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而pINT2 a,b;的效果同int *a, b; 表示定义了一个整型指针变量a和整型变量b。
转自:[https://blog.csdn.net/mbs520/article/details/111604248]
(https://blog.csdn.net/mbs520/article/details/111604248)

8、Xshell用途

xshell用来在windows界面下访问远端不同系统下的服务器,从而实现较好地远程控制终端的目的。xshell是一个强大的安全终端模拟软件,它支持SSH1、SSH2、TELNET等多种协议。

9、对Android Auto的支持已经成为在新车上的最重要的功能之一。智能手机集成系统(如Google的Android Auto和Apple CarPlay)允许您通过汽车的信息娱乐系统访问手机的基本功能。您可以将手机安全地放在口袋或钱包中,通过信息娱乐系统拨打和接听电话,接收和发送短信,传送音乐,并引导到您的目的地。

10、关键字valotile有什么含义?

解:一个硬件寄存器;中断中的一个非自动化变量;线程任务共享的变量

11、嵌入式系统中,动态分配内存可能发生的问题是什么?

解:内存碎片,回收碎片,变量执行时间

12、异步IO和同步IO区别

解:同步IO执行一个IO操作时,应用程序需要等待;异步IO执行一个IO操作时,应用程序可以同步进行

13.C的关键字

解:数据类型关键字;

控制语句关键字

存储类关键字

其他关键字

8、宏定义在什么阶段进行处理

解:宏定义在程序预编译阶段进行处理

9、Norflash与Nandflash的区别?

解:Norflash只读存储器,Nandflash为随机存储器,Nandflash容量大,没有挂接在地址总线上,地址线与数据线共用

10、反码,补码,原码的概念

解:反码:原数除符号位以外逐位取反

补码:负数的补码是原码取反+1

正数的反码、补码、原码一致

11、线程,互斥锁,信号对应的函数

解:pidcreate(),pidjoin()等

mutexinit(),mutexlock(),mutexunlock()等

init(),wait(),post()等

12、内存管理MMU的作用

解:内存分配及释放,内存扩充,地址映射,内存保护

13、SRAM,DRAM,SDRAM的区别

解:SRAM为静态随机存储器,掉电,数据不会丢失

DRAM为动态随机存储器

SDRAM为同步动态随机存储器,与同步时针保持一致

14、编译和链接有什么不同?(如外部符号的处理)

解:编译产生目标文件.o,链接产生可执行文件。

15、已知strcpy函数的函数原型是:
char *strcpy(char *strDest, const char *strSrc)。其中,strDest是目的字符串,strSrc是源字符串。
不调用C++/C的字符串库函数,请编写函数strcpy

解:char *strcpy(char strDest,const charstrSrc)

{undefined

int i = 0;

if(!(strDest&&strSrc))

return;

while(strDest[i++]=*strSrc++);

return strDest
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

}

16、strcpy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?

解:为了实现链式表达式

17、关键字static的作用是什么?

1、修饰局部变量,生命域全局,作用域局部

2、修饰全局变量,生命域全局,作用域模块内

3、修饰函数,生命域和作用域均在模块内

18请列举常用的串行通信方式(两种以上),并简述串行通信和并行通信不同之处、优缺点。

解:异步通信和同步通信;并行接口通信快,串行通信口线间干扰小。

19、OSI协议分为哪几层?

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

20、路由协议

解:网关-网关协议,内部网关协议,外部网关协议

21、位颠倒程序。

解:

unsigned char bit_reverse(unsigned char c)

unsigned char buf = 0;

int bit = 8;

while(bit)

{undefined

bit--;

buf|=((c&1)<<bit);

c>>1;
  • 1
  • 2
  • 3
  • 4
  • 5

}

return buf;
  • 1

}

22、字符串倒序。

解:

inverted_order(char *p)

{undefined

char *s1,*s2,tem;

s1 = p;

s2 = s1+strlen(p)-1;

while(s1<s2)

{undefined

    tem = *s1;

    *s1 = *s2;

    *s2=tem;

    s1++;

    s2--;

} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

}

23、引用和指针的区别?

解:指针是一个实体,引用时一个别名

指针可以用const修饰,引用不可以

指针可变,引用不可变

指针需要解引用,引用不需要解引用

24、这4层包括:应用层,传输层,网络层,链路层。

TCP/IP协议包括:TCP,IP,DNS,TELNET,UDP等

TCP建立和结束的过程:三次握手和四次挥手;端口的作用:发送和接收数据

25、死锁的四个条件和处理方法。

解:互斥条件,请求保持条件,不剥夺条件,循环等待条件

处理方法:预防,避免,检测和恢复

26、进程调度策略

解:先进先出法,优先调度法,轮转法,多级队列法

27、时间换空间的例子:冒泡排序法,空间换时间的例子:快速排序法,堆排序法。

28、MAC层协议有哪些?

解:ISO2110;IEEE802;IEEE802.2;

29、进程间通信方式

解:管道,命名管道,消息队列,共享内存,信号,信号量,套接字。

30、宏和函数的优缺点

解:函数需要分配内存,宏不需要;函数需要计算表达式,然后代入形参,宏只是简单的字符替换

31、由C/C++编译的程序占用的内存分为以下几个部分

解:堆区,栈区,全局区,文字常量区,程序代码区

32、线程同步的方法:信号量,条件变量,互斥锁

33、物理地址,线性地址,逻辑地址和总线地址的区别

解:逻辑地址:段相关的偏移地址部分

线性地址:逻辑地址到物理地址变换之间的中间层

物理地址:地址变换的最终结果地址

总线地址:I/O地址

34、编写内核程序中申请内存和编写应用程序时申请内存有什么区别?

解:编写内核程序中用malloc()申请内存的同时,会设置一个维护值brk。

35、tcp/udp是属于哪一层?tcp/udp有何优缺点?

解:tcp/udp属于运输层,tcp提供稳定的运输服务,包头大,冗余大,udp提供不稳定的运输服务,包头小,开销小。

36、中断活动的全过程?

解:中断请求,中断屏蔽,中断响应,保护现场,中断源调查,中断处理,清除标志,保护现场,中断返回

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/200441
推荐阅读
相关标签
  

闽ICP备14008679号