DJI 2019 8.6 面试笔试题

**

单选题

**
运行下面代码,printf打印输出的是()
Int main(void)
{
Int a[10]={1,2,3,4,5,6,7,8,9,10};
Int *p=&a[3];
Int b=p[3];
Printf(“%d”,b);
Return 0;
}
A. 8 B.6 C.7 D.4

运行下面代码段,printf打印输出是()
Static int func1(void)
{
Static int a=8;
Return(a<10?a++:a–);
}
Int main(void)
{
Int b=3;
Int I;
For(i=0;i<5;i++)
{
b=func1();
}

Printf(“%d”,b);
Return 0;
}
A .16 B.12 C.13 D.11

以下叙述正确的是()
Int sum(int b)
{
Static int a;
a+=b;
return a;
}
A. a与b的作用域不同,生存周期不同
B. a与b的作用域不同,生存周期相同
C. a与b的作用域相同,生存周期不同
D. a与b的作用域相同,生存周期相同

下面说法正确的是()
A.c语言的static关键字经过编译后悔生成相应指令
B.c语言中的volatile关键字经过编译后会生成相应的指令
C.c语言中的return关键字经过编译后会生成相应指令
D.c语言中的inline关键字可以保证函数内部编译

在32位系统中有如下定义,则sizeof(data_t)的值是()
Typedef struct_data{
Char m:3;
Char n:5;
Short s;
Union{
Int a;
Char b;
};
Int h;
}attribute((packed))data_t;
A.15
B.19
C.11
D.8

在32位系统中,运行以下代码段,printf的打印输出为()
Void func1(void)
{
Char ch[]={“ac\0djie”};
Short *p=ch;

Printf(“%c\n”,*((char*)*p[2])+4);

Return ;
}
A. 随机字符 B.n C.a D.不可显示

片上系统中,常用来在片内做数据传输的总线是()
A. UART B .I2C C.AXI D SPI

以下关于linux内核线程和普通线程的描述正确的是
A.内核线程可以访问用户态的地址控制
B.普通线程没有办法主动陷入内核
C.内核线程调度的优先级比普通线程高
D.普通线程在调用内核功能时页表不会改变

有一个顺序栈,入栈序列是:A,C,E,B,D,F 出栈序列是E,D,B,F,C,A,则此栈的深度不小于()
A. 3 B. 6 C. 5 D.4

多选题

关于以下代码,说法错误的是()
Char p1=”DJIGO”;
Void main(void)
{
Static char p2[]={“Phantom”};
Char
p3=(char*)malloc(3);
……………
}
A.可以通过类似“*(p1+1)=‘a’;”,的方式修改字符串的值
B.p2指向的内存区域存储在栈上
C.sizeof(p1)的结果为6
D.p3指向的内存区域存储在堆上

以下说法正确的是()
A.
B…数组 链表均是线性数据结构
C.栈和队列只允许在端点处插入和删除数据
D.满二叉树不适合顺序结构存储

以下关于常用通信总线说法错误的是()
A.uart can 均为全双工总线
B.usb总线传输方式包括控制传输,批量传输,这段传输,轮间传输
C.i2c总线的ACK信号均由从机发出
D.spi总线可以支持一主多从模式

以下关于32位ARM架构的说法错误的是()
A.支持16位Thumb指令,Thumb指令操作的地址均为16位
B.DMA控制器和cpu均可访问内存,不需要考虑cache一致性问题
C.apcs标准规定r0-r3寄存器可用于传参,r0-r1寄存器可用于传递返回值,r13寄存器用于存放堆和指针
D.MMU具有地址转换,内存保护等功能,同时可以加快访存速度。

填空题

程序按32位编译,如果char *hello=“hello!” 那么sizeof(hello)=,sizeof(*hello)=___

程序按64位编译,运行以下代码段,printf打印输出是________
#define MY_CALC(x,y) (x*y)
Int main(void)
{
Int i=3;
Int calc;
Char **a[5][6];

Calc= MY_CALC(i++,sizeof(a)+5);
Printf(“i=%d,calc=%d”,I,calc);
Return 0;

}

运行以下代码段,函数func1的返回值是________
Int func1(void)
{
Unsigned int a=6;
Int b=-20;
Return((a+b)>6?1:0);
}

ARM架构处理器运行某个程序,如果该程序向某段在MMU配置位只读的内存区域写入数据,则ARM处理器会发生________异常

**

问答题

**

请简述linux或RTOS中,栈空间最大使用率和栈溢出检测方法。

抢占式内核中,任务调度实际有哪些。

一个程序中含有以下代码块,请说明其中各个变量的生命周期,左右域和存储位置(提示:存储位置可以选泽 ‘text’ ‘data’ ‘bss’ ‘heap’ ‘stack’)
Int a0=1;
Static int a1;
Const static a2=0;
Extern int a3;
Void fun(void)
{
Int a4;
Volatile int a5;
Return;
}

问答题
请用c语言直接编写以下四个宏
ALGN_DOWN(x,a)将数值x按照a的整数倍向下取整,例如ALGN_DOWN(65,3)—>63
ALGN_UP(x,a) 将数值x按照a的整数倍向上取整,例如ALGN_UP(65,3)—>66
ALGN_2N_DOWN(x,a) 将数值x按照a的整数倍向下取整,a是2的n次幂,例如ALGN_2N_DOWN(65,4)—>64.
ALGN_2N__UP(x,a) 将数值x按照a的整数倍向上取整,a是2的n次幂,例如ALGN_2N_UP(65,4)—>68.
备注:数值位unsigned int;对2的n次幂的情况只要利用这个特性用更高效的方法实现。

已知某外设有两个32—bit的寄存器
数据寄存器,内存映射地址为0x80000000
状态寄存器,内存映射地址0x80000004
状态寄存器的bit31为A功能的标志位
请补充完成以下结构体描述两个寄存器,
Typedef struct{
………
}A_regs_t;
请用c语言实现如下函数;
/**
*read A data if A status is 1,and then clear the A status bit.
*@param[in] a_regs;pointer to registers of A function
*@param[out] result;data read from register
@retval 0:successs;<0:error code
/
Int32_t_get_A_result(A_regs_t
a_regs,uint32 _t
result);
并写出调用这个函数的代码。

你可能感兴趣的:(笔试)