选择题
解答题丶
1、用预处理指令#define声明一个常数,用以表明一年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
补充(意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要)
2、写一个标准宏MIN,这个宏输入两个数并返回最小的一个?
#define MIN( x, y) ( (x<y? x:y))
3、中断是嵌入式系统中设计的难点,请评论下面这段用关键字_interrupt定义的中断服务子程序。
1).ISR 不能返回一个值,
2).ISR不能传递参数。
3).在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额外的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算时不明智的。
4).与第三点一脉相承,printf()经常有重入和性能上的问题。
4、下面的结构是合法的吗?请分析?
- 合法,定义了三个整型变量并给a,b赋值,2)c=a+++b 意思为a+b的值赋值给c(c=5+7=12),然后a++(a做完运算后自加1,5+1=6),b=7。
5、对于整型变量A=0x12345678,请画出在little endian 及big endian 的方式下在内存中是如何存储的?
小端 高地址—>0x12 大端 低地址—> 0x12
0x34 0x34
0x56 0x56
低地址—> 0x78 高地址 0x78
6、不改变变量的作用域而又要延长变量的行命周期,你会怎么定义这个变量?
用static来修饰这个变量。
7、用变量a给出下面的定义
7、
- int a;
- int *a;
- int **a;
- int a[10];
- int *a[10];
- int a[10],*p=a;
- int(*a)(int)
- int(*a[10])(int)
8假设在32位cpu上的情况下,填空
struct BBB
{
long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
P=0x1000000;
P+0x200=_0x01003000;
(unsigned long)p+0x200=0x01000200;
(char *)p+0x200=0x01000200;
9、下面这个程序执行后会有什么错误或者效果:
#define MAX 255
Int main()
{
Unsigned char I;
Ubsigned char A[MAX],I;
for(i=0;i<MAX;i++)
A[i]=I;
}
解答:死循环加数组越界访问(C/C++不进行数组越界检查)
MAX=255,数组A的下标范围为:0..MAX-1,这是其一
其二、当i循环到255时,循环内执行:
A[255]=255;
这句本身没有问题,但是返回for (i=0;i<=MAX;i++)语句时,
由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.
10、下面这个程序有问题吗?如果有请修下
#include<stdio.h>
Int main(void)
{
Int **p;
Int arr[100];
P=&arr;
return 0;
}
Int **p是个二级指针指向的应该是一个指针
arr 定义为整型数组,其地址就是arr或者arr[0],不需要取址符号&
??????????????????
11、
- busybox
- /linuxrc
- 系统初始化要执行的第一个脚本程序
- /etc/fstab
- Isof –i:808
- .ko --kernel object 内核模块,可以在linux内核起来之后动态的加载和卸载。
.so --shared object 用户层的动态库(于.a对应)使用同一个.so的程序在运行时只需要该.so的同一份拷贝
- 以文件方式访问设备
- 字符设备,块设备,网络设备
- 1管道 2信号 3报文(Message)队列(消息队列) 4共享内存 5信号量
6 套接口
12、网络编程中设计并发服务器,使用多进程与多线程,请问两者有什么区别?
根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:
1。速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。
13、简述Tcp三次握手的过程?
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND 状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发 送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成 三次握手.
14、在TCP/IP中,网络层和传输层之间的区别是最为关键的:
——————层提供点到点的服务,而——————层提供端到端的服务。
网络层 传输层
15、简述TCP/IP网络层,并且列出你所熟悉的协议,列在所属层下面。
主机-网络层是TCP/IP参考模型的最底层,它负责发送和接收IP分组。TCP/IP协议对主机-网络层并没有规定具体的协议,它采取开放的策略,允许使用广域网、
局域网与城域网的各种协议。任何一种流行的底层传输协议都可以与TCP/IP互联网络层接口。这正体现了TCP/IP体系的开放性、兼容性的特点,也是TCP/IP成功应用的基础。
16、分别介绍一下网络协议:RTP,RTCP,RTSP,STP,并且详解ICMP的作用?
RTP数据协议: RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。
RTCP控制协议:RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。
RTSP实时流协议:RTSP实时流协议 作为一个应用层协议,RTSP提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。
STP生成树协议:是一个二层管理协议,标准为IEEE802.1D。IEEE 802.1d是最早关于STP的标准,它提供了网络的动态冗余切换机制。
ICMP:ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是 一个非常重要的协议,它对于网络安全具有极其重要的意义。
它是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之 间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无 法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP消息。ICMP报 文在IP帧结构的首部协议类型字段(Protocol 8bit)的值 =1。
17、下面是一款芯片的功能模块图,谈谈你可以从下图中获取到那些重要的消息,如芯片架构,外设支持等,如果由你方案,觉得该芯片可以用于那些领域的功能?
ARM架构