答:嵌入式系统EOS(Embedded OperatingSystem)的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。主要特点:实时性,裁剪性,可靠性。
区别:EOS是相对于一般 操作系统而言的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件功能等外,还有以下特点:
(1)可装卸性。开放性、可伸缩性的体系结构。
(2)强实时性。EOS实时性一般较强,可用于各种设备控制当中。
(3)统一的接口。提供各种设备驱动接日.
(4)操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用.
(5)提供强大的网络功能,支持TCP门P协议及其它协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口.
(6)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS臭有较强的稳定性。嵌入式操作系统的用户接日一般不提供操作命令,它通过系统调用命令向用户程序提供服务。
(7)固化代码。在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统.
(8)更好的硬件适应性,也就是良好的移植性.
嵌入式操作系统:Linux,ucosii,uclinux,vxworks,wince,qnx
8、请列出自己有研究过或有使用过的第三方组件库名称,或列出自己有研究过或使用过的网络上源码名称。
答:QT,Ncurnes
9、请列举出OSI的七层网络结构图中的至少四层?tcp/udp是属于哪一层?tcp/udp有何优缺点?
答:应用程、表示层、会话层、传输层、网络层、数据链路层、物理层。Tcp属于传输层
10、交换两个变量的值,不使用第三个变量。即a=3,b=5交换之后b=3,a=5;
答:a ^= b; b = a ^ b; a = a ^ b;
1.算术运算:
int a = 3, int b = 5;
a = a +b;
b = a –b;
a = a – b;
2.指针地址操作
int *a,*b; //假设
*a=new int(10);
*b=new int(20); //&a=0x00001000h,&b=0x00001200h
a=(int*)(b-a); //&a=0x00000200h,&b=0x00001200h
b=(int*)(b-a); //&a=0x00000200h,&b=0x00001000h
a=(int*)(b+int(a)); //&a=0x00001200h,&b=0x00001000h
if(a < b)
{
a = (int*)(b-a);
b = (int*)(b-(int(a)&0x0000ffff));
a = (int*)(b+(int(a)&0x0000ffff));
}
else
{
b = (int*)(a-b);
a = (int*)(a-(int(b)&0x0000ffff));
b = (int*)(a+(int(b)&0x0000ffff));
}
3.位运算
int a=10,b=12; //a=1010^b=1100;
a=a^b; //a=0110^b=1100;
b=a^b; //a=0110^b=1010;
a=a^b; //a=1100=12;b=1010;
11、下面这个程序执行后会有什么结果;
#define MAX 255
Int main()
{
unsignedchar A[MAX];
for (i = 0; i <= MAX; i++)
A[i]= i;
}
答:数组越界。
12、以下为Windows NT下的32位C++程序,请计算sizeof的值
Void Func(char str[100])
{
charstr1[] = “Hello”;
char *p =str1;
int n =10;
void *p1 =malloc (100);
sizeof(str)= 4;指针4个字节
sizeof(str1)= 6;//包括\0字符
sizeof(p)= 4;//指针4个字节
sizeof(n)= 4;//整型4个字节
sizeof(p1)= 4;//指针4个字节
}
13、请写出下列代码的输出内容:
#include
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;
}
答:10,12,130。
14、以下这段代码对x和n完成什么样的功能(操作)?
Int foo (int x, int n)
{
int val;
Val = 1;
If (n >0)
{
If(n % 2 == 1)
Val= val * x;
Val= val * foo(x*x, n/2);
}
return val;
}
答:n是判断奇数次和偶数次的,如果为奇数则执行递归。x应该是实现一个幂指数的功能吧。
15、编写strcpy函数,已知strcpy函数的原型是 char *strcpy(char * strDest, constchar* strSrc); 其中strDest是目的字符串,strSrc是源字符串。
(1)、不调用C++/C的字符串库函数,请编写函数strcpy
(2)、Strcpy能把strSrc的内容赋值到strDest,为什么要char*类型的。
答:1、
#include
char *strcpy1(char * strDest ,constchar *strSrc)
{
char *strDestCopy = strDest;
assert((strDest != NULL) && (strSrc !=NULL)); //错误的判断异常处理
while((*strDest++=*strSrc++) != '\0');
return strDestCopy;
}
2.返回strDest的原始值使函数能够支持链式表达,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。链式表达式的形式如:intiLength=strlen(strcpy(strA,strB));
16、编程实现一个链表逆序。
#include
#include
#include
struct Link_T //定义通用链表结构体
{
void*Data;
structLink_T *pNext;
};
typedef struct Link_T pNode; //结构体重命名
/********************************************************************/
* 函数名称:pNode *List_inverted(pNode *head)
* 功能描述:
* 实现链表的逆序排列(注意头结点不存数据)
* 参数说明:
* pNode*head 链表的头结点
* 返回值:
* 转换后的链表头指针
*******************************************************************/
pNode *List_inverted(pNode *head)
{
pNode*p_front = NULL; //前指针
pNode*p_next = NULL; //下一个指针
pNode*p_temp = NULL; //中间变量指针n
assert(head!= NULL); //空链表异常处理
p_temp =head->pNext;
while(p_temp!= NULL)
{
p_next= p_temp->pNext; //保存下一节点指针
p_temp->pNext= p_front; //当前节点的下一节点
p_front= p_temp;
p_temp= p_next;
}
head->pNext= p_front;
returnhead; //返回转换后的链表头指针
}