网关软件工程师基础知识试题docWord格式.docx

上传人:b****2 文档编号:14828089 上传时间:2022-10-25 格式:DOCX 页数:35 大小:160.17KB
下载 相关 举报
网关软件工程师基础知识试题docWord格式.docx_第1页
第1页 / 共35页
网关软件工程师基础知识试题docWord格式.docx_第2页
第2页 / 共35页
网关软件工程师基础知识试题docWord格式.docx_第3页
第3页 / 共35页
网关软件工程师基础知识试题docWord格式.docx_第4页
第4页 / 共35页
网关软件工程师基础知识试题docWord格式.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

网关软件工程师基础知识试题docWord格式.docx

《网关软件工程师基础知识试题docWord格式.docx》由会员分享,可在线阅读,更多相关《网关软件工程师基础知识试题docWord格式.docx(35页珍藏版)》请在冰豆网上搜索。

网关软件工程师基础知识试题docWord格式.docx

(5)内核需要支持中断,抢占和多核,盂要时刻注意同步和并发;

(6)使用浮点数很容易出现异常,应尽最少用或者不用;

(7)程序在不同的地址空间执行。

此题为开放题,其它答案合理亦可。

3.简述屮断级联与屮断共享有何异同?

并画出硬件连接示意图。

相同点:

都是在同一个中断控制器的引脚上接多个设备。

不同点:

中断级联是在中断控制器的引脚上再接一个中断控制器,设备具有不同的中断号;

中断共享则是中断控制器的引脚上直接并联多个设备,设备具有相同的中断号。

0:

设备

4.写一个宏SWAP(x,y),实现交换所有基本数据类型的值;

写一个宏计算数组元素的个数。

(1)#defineSWAP(x,y)do{\

—typeof(x)t=x;

x=y;

y=x;

\

}while(0)

或者

#defineSWAP(x,y)do{\

xA=y;

yA=x;

\}while(0)

(2)#defineARRAY_SIZE(a)(sizeof(a)/sizeof(a[0]))

5.volatile关键字的作用。

(1)修饰语句块时,防止指令顺序被改变;

(2)修饰变屋吋,防止读写指令被优化。

6.全局变量:

staticconstinta;

staticintb;

staticconstintc=5;

(1)

intmain()

{

printff^b=%d\n"

b);

rctum0;

}

执行结果是什么,为什么?

(2)voidfund(void)

intp=(int*)&

a:

*p=8;

b=1;

printf(ua=%db=%d\n"

a,b);

voidfunc2(void)

staticconstintd;

int*p=(int*)&

d;

funcl(),func2()执行的结果是什么?

(1)b=0。

b被分配到bss段。

(2)fund()编译出错;

func2():

d=6

7.用C语言实现将地址为()xB8100()01的32位寄存器置为0x12345678。

答案:

32位寄存器的地址都以4字节对齐,不会出现地址0xB8100001o

&

写一个讦语旬判断一个32位整数能否表示为2的某次方(不能用循环)。

inta=8;

if(a&

(—I)==())

yes;

else

no;

9.在32位系统中,

structA

chara;

intb;

shortc;

chard;

void*e;

};

#pragmapack(l)

structB

#pragmapack()

#pragmapack(4)

structC

}:

#pnigmapack()

请sizeof(structA),sizeof(structB),sizeof(structC)的值。

sizeof(structA)=16

sizeof(structB)=12

sizeof(structC)=16

10.SPI总线有CLK,MOST,MISO,CS四根线。

在SLAVE已经片选上的情况下,假设读SLAVEID需要向SLAVE发送一个字节的命令,SLAVEID为四个字节。

请问读SLAVEIDMOSI,MISO分别传输了多少字节的数据。

都是5

11.请简述u-boot从NandFlash,NorFlash和SPIFlash启动的流程。

Nand:

上电,CPU通过SoC上固化的程序,将u-boot前4K或者8K加载到SRAM中,并跳转到SRAM中执行。

初始化内存,Nand等设备Z后,将整个u-boot加载到内存后,并跳转到u-boot加载地址处执行。

NorFlash:

CPU将NorFlash映射到地址空间上,CPU跳到NorElash映射到的某一地址处执行,初始化内存等设备之示,将整个u-boot加载到内存示,并跳转到u-boot加载地址处执行。

SPI:

CPU通过SoC上固化的程序,将一小段特定大小的程序加载到SRAM'

p,并跳转到SRAM中执行。

初始化内存,SPT等设备Z后,将整个u-boot加载到内存后,并跳转到u-boot加载地址处执行。

12.MIPS架构上,memory分为四块,各是什么?

有何区别?

kuseg:

0x0000000-0x7FFFFFFF(低端2G):

这些地址是用户态可用的地址。

在有MMU的机器里,这些地址将一概被MMU作转换。

除非MMI;

的设置被建立好,这2G地址是不可用的。

对于没有MMU的机器,存取这2G地址的操作与具体机器相关。

CPU具体厂商提供的手册将会提供关于这方面的信息。

kscgO:

0x80000000-0x9FFFFFFF(512M):

这些地址映射到物理地址简单的通过把最高位清零,然后把它们映射到物理地址低段512M(0x00000000-OxlFFFFFFF)。

儿乎全部的对这段地址的存取都会通过快速缓存(cache)o因此在cache设置好之前,不能随便使用这段地址。

ksegl:

0xA0000000-OxBFFFFFFF(512M):

这些地址通过把最高3位清零的方法來映射到相应的物理地址上,与kscgO映射的物理地址一样。

但ksegl是非cache存取的。

ksegl是唯一的在系统重启吋能正常工作的地址空间。

kseg2:

0xC0000000-OxFFFFFFFF(1G):

这段地址空间只能在核心态下使用并且要经过MMU的转换。

在MMI•设进好之前,不能存取这段区域。

13.MIPS架构上,如果从NotFlash启动,默认的启动物理地址是多少?

可否设置其它地址作为启动地址?

如果能请简要设置方法,如果不能请说明原因。

OxBFCOOOOO,可否设置启动地址需要看具体芯片是否提供修改启动地址的功能。

如果芯片有修改启动地址的功能,在启动前,通过修改硬件,改变上电后跳线的电压來改变启动地址。

14.在linuxkernel中,—init/_exit,—devinit/_devexit的作用是什么?

两组有何区别?

编译时,把他们修饰的函数放到各口的口定义段中。

_init/_exit的函数被执行过Z后会被释放。

而_devinit/_devexit函数被执行过之后不会被释放。

15.请完成函数get_key,根据NODE成员list的地址,返回NODE成员key的值。

比如下面的例了运行后会打卬“100”。

(提示:

请注意构成链表的方式)

structlist_head

structlist_head*next,*prev;

typedefstruct{

intkey;

structlist_headlist;

}NODE;

#definecontainer(ptrztype,member)\

(type*)((char*)ptr-(char*)(&

((type*)0)->

member))

intget_key(structlist_head*plist)

NODE*node;

node=container_of(plist,NODE,list);

returnnode->

key;

intmain()

NODEnode={.key=100z.list={&

node•丄ist,&

node•丄ist}};

printf(吒d\n"

get_key(&

node.list));

return0;

16.用C语言实现set_reg_bits(・・j和set_reg_bit(•••),参数自定。

setregbits功能:

将地址为addr的register的bitm到bitn(m<

=n)设置为value(0<

=value<

2n"

+1);

set_reg_bit功能:

将地址为addr的register的bitm设置为value(value:

0,1)。

staticvoidinlinesetregbits(u32reg,intfrom,intto,ul6bit_val)

ul6val;

val=readw((void*)reg);

val&

=~(((1«

(to一from+1))-1)«

from);

val|=bitval<

<

from;

writew(val,(void*)reg);

#defineset_reg_bit(reg,bit,val)set_reg_bits(reg,bit,bit,val)

17.GCC编译器在编译时都有哪几个过程。

预编译,编译,汇编,链接。

18.描述LINUX小字符设备驱动的基本编成框架。

并编写一个编译它的Makefile,说明其小的参数。

要点、:

module_init,module_exit,字符设备注册,file_operation,open(),read(),write(),ioctl(),release()^o

Makefile:

KERNELPATH=/xxx/xxx

PWD=$(shellpwd)

all:

make-C$(KERNEL_PATH)-M$(PWD)modules

clean:

make-C$(KERNEL_PATH)-M$(PWD)clean

19.在bootloader中,冇时需要跳到指定的地址上执行。

请用C语言实现跳到地址0x80000000处执行。

((void(*)(void))0x800()0()00)();

typedefvoid(*func_t)(void);

fun

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1