嵌入式笔试题4

1.下面关于关键字的描述及使用中,错误的是:(B)

A、volatile可用于定义多线程应用中的共享变量。

B、const可用于定义全局变量。

C、一个变量既可以是const,同时也是volatile。

D、register static int i = 0

解析:int b = i;volatile使i可能随时发生变化,每次使用前必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。volatile会保证对特殊地址的稳定访问。

  register变量是直接放在寄存器中的,这样就大大提高了变量存取的速度,但是静态变量不能定义为register。

2、假设有10个记录,他的初始关键字序列为{55,2,6,4,32,12,9,73,26,37},用插入排序对此排序,则第五次排序结果为:2,4,6,12,32,55,9,73,26,37。

插入排序相关概念:有一个已经有序的数据序列,要求在已经排好的数据序列中插入一个数,但要求此数据插入后依然有序,此时用插入排序法。

相关代码:

#include <stdio.h>

void insert(int *arr,int len)
{
	int i,j,temp;
	
	printf("排序前:\n");
	for(int i  = 0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	printf("\n");
	
	
	for(i=1;i<len;i++)
	{
		temp = arr[i];
		j=i-1;
		while(j>-1&&temp<arr[j])
		{
			arr[j+1]=arr[j];
			j--;
		}
		arr[j+1] = temp;
	}
	
	printf("排序后:\n");
	for(int i  = 0;i<len;i++)
	{
		printf("%d  ",arr[i]);
	}
	printf("\n");
}

int main()
{
	int arr[] = {3,25,432,321,243,212,34,4,45,65,5};
	int len = sizeof(arr)/sizeof(arr[0]);
	insert(arr,len);
	return 0;
}

3.中断响应时间是指从发出中断请求到进入中断处理。

4.ftp协议使用的默认端口号是21;http协议使用的默认端口号是8080。

5.SQL语言具有①数据定义 ②数据操控 ③数据控制 ④数据查询 功能。

6.下面代码完成两个值互换,①处填写的代码正确的是:*b=*a^*b;            *a = *a^*b;

void swap (int *a,int *b)
{
    *a = *a^*b;
    ①
}

7.统一进程内的所有线程除了共享全局变量外共享程序计数器。

堆栈是保证线程独立运行所必需的。线程函数可以调用函数,而被调用函数中又是可以层层嵌套的,所以线程必须拥有自己的函数堆栈,使得函数调用可以正常进行,不受其他线程的影响。

由于一个进程中有多个线程在同时运行,可能某个线程进行系统调用,后设置了error值,而在该线程还没有处理这个错误,另外一个线程就在此时被调度器投入运行,这样错误值就有可能被删改。

8. 

9.在ANSIC标准中,signal函数的声明如下void(*signal(int sig,void(*fun)(int)))(int),对此函数进行分析:

signal是一个函数,其返回值是一个函数指针,该指针指向一个带一个int参数、无返回值得函数。

void(*func)(int):    返回值类型(*指针变量名){[形参列表]}

int func(int x);       返回int型 函数名称(形参列表)

int (*f) (int x);         返回int型 函数指针名称(形参列表)

f= func;                 将func函数的首地址赋值给函数指针,或者使用(f=&func);

例:

        ①void hello (void){printf("你好");}

        ②void bye (void) {printf("再见");}

        ③void ok(void) {printf("好的!");}

构造一个通用函数:typedef void (*funcptr)(void);

使用时如下:

void speak(int id)
{
    funcptr words[3] = {&hello,&bye,&ok};
    funcptr fun = word[id];
    (*fun)();
}

此结果显示为:speak(0):你好;speak(1):再见;speak(2):好的

10.下面代码求n值,空白处应填写的代码是?

void fact(int n)
{
    if(n==1)
    {
        return 1;
    }
    else
    {
        return fact(n-1)*n;   //空白处
    }
}

11.在TCP通信中,其建立连接需要经过3次握手,终止连接需要经过4次挥手。

TCP是一个面向连接的服务,面向连接的服务是电话系统服务模式的抽象,每一次完整的数据传输都必须经过建立连接,数据传输和终止连接三个部分。

    TCP建立连接的过程称为三次握手,其具体流程为:①主机A通过主句B,发送一个含有同步序列号的标志位的数据段给主机B,向主机B请求建立连接,通过这个数据段主机A告诉主机B,向主机B请求建立连接,通过这个数据段,主机A告诉主句B两件事,我想要和你通信你可以用那个序列号作为起始数据段来回应我。②主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段相应主机A,也告诉主机A两件事:我已经收到了你的请求,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我。③主机A收到这个数据段后,再发送一个确认应答,确认已经收到主机B的数据段:我已经收到回复,我现在要开始传输实际数据了。

    TCP断开连接的过程称为四次挥手,其流程为:①当主机A完成数据传输后,将控制位(FIN)位置1,提出停止TCP连接的请求。②主机B收到FIN后对其做出响应,确认这一方向上的TCP连接将关闭,将ACK置1.③由B端再提出反方向的关闭请求,将FIN置1.④主机A对主机B的请求进行确认,将ACK置1,双向的关闭结束。

   由三次握手和四次挥手可以看出,TCP通信提高了数据传输的可靠性,为数据正式传输打下了坚实的基础。

12.函数foo的原型为:

unsigned int foo(unsigned int _in)
{
    unsigned char ret = 0,uc = -1;
    return _in >> 24^uc; 
}

则foo(0xAABB4455)的返回结果是:0X55;

解析:在计算机中,数据一律用补码来表示和存储。所以UC其实是-1的补码,即11111111,而_in>>24^uc先后移24位再和uc进行异或。

13.UDP通信是面向报文的通信,TCP是面向字节流的通信。UDP可靠性必须由上层应用实现,一般都会采用消息重传方式来实现,消息重传有两种方式方式,一是发送者发起,二是接受者发起。

14.事务是DBMS的基本单位,它是用户定义的。

15.函数foo原型如下,则foo(0x32)打印结果为:error

void foo(char _case)
{
    switch (_case)
    {
        case '1':printf("1");break;
        case '2':printf("2");
        case '3':printf("3");break;
        case '4':printf("4");
        default:printf("error");break;
    }
}

16.在32 位系统中,以下代码输出结果为:

#include <stdio.h>

void foo(void)
{
#pragma pack(2)
	typedef struct 
	{
		unsigned long index;
		char name[9];
		char *attr[4];
	}tSA,*ptSA;
	
#pragma pack()
	tSA sa[5];
	ptSA psa1 = sa,psa2 = &sa[4];
	unsigned long i = (unsigned long )psa1,j= (unsigned long)psa2;
	printf("%ld,%ld",psa2 - psa1,j-1);
}
int main()
{
	foo();
	return 0;
}

17.白盒测试方法一般适用于单元测试。

18.进程是系统执行的最小单位,线程是系统分配资源的最小,进程可以包含多个线程。

19.heap和stack的差别是stack空间由操作系统自动分配/释放,heap空间用户手动分配/释放。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CVTE是一家具有领先技术的嵌入解决方案提供商。在CVTE的嵌入试题中,通常会涉及一些基础的嵌入知识和技能。 首先,嵌入系统是指集成了微处理器芯片和专用硬件的系统,这些芯片和硬件用于执行特定的功能。嵌入系统通常用于控制和监测其他设备或系统。 在CVTE的嵌入试题中,可能会涉及以下问题: 1. 嵌入系统的特点:需要了解嵌入系统的特点,例如实时性、稳定性、功耗低、尺寸小等。 2. 嵌入开发工具和环境:了解嵌入开发工具和环境,例如编译器、调试器、仿真器等。 3. 嵌入操作系统:熟悉一些常用的嵌入操作系统,例如Linux、RTOS(Real-Time Operating System)等。 4. 单片机和微处理器的区别:了解单片机和微处理器的区别,例如单片机通常集成了内存、IO口、定时器等外围设备。 5. 嵌入软件开发:了解嵌入软件开发的流程和方法,例如需求分析、软件设计、调试等。 6. 嵌入硬件设计:了解一些基本的嵌入硬件设计知识,例如电路设计、PCB设计、信号处理等。 7. 嵌入通信协议:了解一些常用的嵌入通信协议,例如UART、SPI、I2C、CAN等。 总之,CVTE的嵌入试题目旨在考察应聘者对嵌入系统的基本理解和掌握程度。准备笔试时,需要针对上述问题对相关知识进行学习和复习,以便能够准确回答和解决嵌入开发相关的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值