高分求教外企笔试题目答案

时间:2022-03-14 03:58:15
1 在32位机器上,假设一个32位的整数0X1234abcd保存在从地址0x00000000开始的内存中,那么在little endian和big endian的机器上, 按字节该整数在内存在的存放顺序是怎样的?

2 ISO的七层模型是什么? tcp/udp属于哪一层?

3 下面是一个中断服务程序的代码,请指出哪些问题?

_interrupt double compute_area(double radius)
{
  double area=PI*radius*radius;
  return area;
}

4  在多任务系统中, 常见的任务通讯机制有哪些?

5 请实现内存复制函数 void memcpy(void *dst, const void *src, int size)


DSP 软件开发
1 请说明DSP中定点 浮点概念
2 什么是cache? 有哪些操作?
3 关键字volatile的作用? 举例说明
4 a 写一个c语言表达式, 实现:y=X*0.75, 其中x 和 y都是整数
  b 假设一个硬件寄存器R的地址为0X80000000, 宽度32位, 其中最高的8为(Bit:24-31)为字段F
 请写出对寄存器R进行读/写的宏定义;
 请写出字段F的所有位分别进行置1, 清0, 取反的宏定义
5 请描述你最熟悉一种DSP, 并对在这个DSP上做的开发工作进行简要说明


LInux
1 列出目前linux系统能支持的文件系统, 列出常用的4个以上
2 Linux系统支持驱动模块动态加载的, 请列出驱动模块的入口和出口
3 Linux的基本命令, 列出root根目录下的内容, 要求以详细信息列出, 并以时间倒序排序
4 linux下图形用户接口(GUI)编程技术最常用到的库有哪些?(三个以上)
5 用户进程是通过设备文件同硬件打交道的,列出常用的用户进程操作设备文件的一些系统调用, 要求3个以上!

15 个解决方案

#1




FPGA:
1 有些信号特别是时钟信号, 一般在输出端串一电阻, 目的是什么呢?
2 根据逻辑功能不同, 数字逻辑电路分为哪几类?各类的功能特点是什么?
3 FPGA代表什么意思? FPGA与CPLD结构主要差别是什么?
4 在一个高速CPU(例如ARM)的系统中, 包括CPU SDRAM FLASH和其他外设,CPU程序应该放在SDRAM还是Flash中运行? 为什么?
5 CPU最小系统应该包括哪些部分?

#2


...大家加油啊!

#3


...没人啊!

#4


1 在32位机器上,假设一个32位的整数0X1234abcd保存在从地址0x00000000开始的内存中,那么在little endian和big endian的机器上, 按字节该整数在内存在的存放顺序是怎样的?

little endian: 0x1234abcd
big endian: 0xcdab3412

3 _interrupt double compute_area(double radius)
{
  double area=PI*radius*radius;
  return area;
}

(1)一般不带参数
(2)不能进行浮点操作
(3)不带返回值

#5


学习,学习........

#6


以下是我的回答,不保证正确:
1.little endian:0x1234abcd;  bigendian:0xcdab3412
2.7层(从上往下):应用层 表示层 会话层 传输层 网络层 数据链路层 物理层  
  tcp/udp属于传输层
3.关于编写中断服务程序的一些基本原则:
    a. 避免在中断服务程序中做浮点运算
         好的中断服务程序应该遵循短而有效这一原则,但在中断服务程序中做浮点运算却大大地违背这一原则,同时有些处理器/编译器就不允许在中断服务城中做浮点运算。
    b.中断服务程序不能有返回值
        所有的中断服务程序都应该将返回类型定义为void。
    c.中断服务程序不能传递参数
       所有的中断服务程序的参数列表为void。

4.管道通信  信号通信 共享内存 消息队列 信号量(也叫信号灯) 
5. void memcpy(void * dest,void * src,int size)
  { char *pd =(char *)dest;
   char *ps =(char *)src;
   long len =(long)sizeof(size_t)*n;
   while(len)
   {
    while((*pd++=*ps++)!='/0')
    len--;
    }
  }

#7


引用 6 楼 sdustliyang 的回复:
以下是我的回答,不保证正确:
1.little endian:0x1234abcd;  bigendian:0xcdab3412
2.7层(从上往下):应用层 表示层 会话层 传输层 网络层 数据链路层 物理层  
  tcp/udp属于传输层
3.关于编写中断服务程序的一些基本原则:
    a. 避免在中断服务程序中做浮点运算
         好的中断服务程序应该遵循短而有效这……

学习了

#8


LInux
1 列出目前linux系统能支持的文件系统, 列出常用的4个以上
      yaffs   yaffs2  cramfs  jffs  ramdisk   ext2 nfs
2 Linux系统支持驱动模块动态加载的, 请列出驱动模块的入口和出口
       module_init和module_exit
3 Linux的基本命令, 列出root根目录下的内容, 要求以详细信息列出, 并以时间倒序排序
4 linux下图形用户接口(GUI)编程技术最常用到的库有哪些?(三个以上)
        OPENGUI  GTK  QT  
5 用户进程是通过设备文件同硬件打交道的,列出常用的用户进程操作设备文件的一些系统调用, 要求3个以上!

#9


DSP 软件开发
1 请说明DSP中定点 浮点概念

1、定点数: 
定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。 
(1)定义:数据中小数点位置固定不变的数 
(2)种类:定点整数 
(3)小数点在符号位与有效位之间。 
注:定点数受字长的限制,超出范围会有溢出。 
2、浮点数: 
浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置。 
(1)形式:N=M×2E 
(2)M:尾数 
(3)E:阶码 
(4)在计算机中M和E表示形式为 
阶码 尾数符号 尾数 
将其与数学中的科学记数法进行比较。 
注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。 
3、定点数与浮点数区别 
定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。浮点表示法运算时可以不考虑溢出,但浮点运算,编程较难。要掌握定、浮点数的转换方法及浮点数规格化方法。

2什么是cache? 有哪些操作?
高速缓冲存储器 cache清除 清理 锁定
直写 回写 行替换 失效时分配策略 不知道这些算不算

3关键字volatile的作用? 举例说明
  volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
volatile int i = 1;
if (i > 0) ...
if的条件不会当作无条件真。

4 a y = 3*x/4
b #define WrR(dat) (0X80000000 = (dat))
#define RdR() (0X80000000)
#define SetRF() (0X80000000 |= 0xff000000)//置1
#define ClearRF() (0X80000000 &= 0x00ffffff)//清0
#define RevRF() (0X80000000 ^= 0xff000000)//取反

#10


4 a y = 3*x/4
#define rR    (*(volatile unsigned *)0X80000000)
b #define WrR(dat) (rR = (dat))
#define RdR() (rR)
#define SetRF() (rR |= 0xff000000)//置1
#define ClearRF() (rR &= 0x00ffffff)//清0
#define RevRF() (rR ^= 0xff000000)//取反

#11


.....大家继续!

#12


LInux
1 列出目前linux系统能支持的文件系统, 列出常用的4个以上
  yaffs yaffs2 cramfs jffs ramdisk ext2 nfs
2 Linux系统支持驱动模块动态加载的, 请列出驱动模块的入口和出口
  module_init和module_exit
3 Linux的基本命令, 列出root根目录下的内容, 要求以详细信息列出, 并以时间倒序排序
  ls -lt /root

4 linux下图形用户接口(GUI)编程技术最常用到的库有哪些?(三个以上)
  OPENGUI GTK QT
5 用户进程是通过设备文件同硬件打交道的,列出常用的用户进程操作设备文件的一些系统调用, 要求3个以上!
  open close ioctl map 

#13


另外6楼写的 memcpy考虑不周全

要考虑src 和dest地址的前后关系

#14


Linux的基本命令,   列出root根目录下的内容,   要求以详细信息列出,   并以时间倒序排序 
    ls   -ltr   /root  ------>>>> r是表示将排序结果反转的

 假设一个硬件寄存器R的地址为0X80000000, 宽度32位, 其中最高的8为(Bit:24-31)为字段F
 请写出对寄存器R进行读/写的宏定义;
   #define READ(R) (*((volatile __32*)(R)))
   #define WRITE(R, val)  (*(volatile __32 *)(R) = (val))

 请写出字段F的所有位分别进行置1, 清0, 取反的宏定义
   置1 : __32 val = READ(R);
         val |= 0xff << 24;
         WRITE(R, val);

   置0: __32 val = READ(R);
         val &= ~(0xff << 24);
         WRITE(R, val);

在一个高速CPU(例如ARM)的系统中, 包括CPU SDRAM FLASH和其他外设,CPU程序应该放在SDRAM还是Flash中运行? 为什么?
我认为你说的CPU程序应该是固化在芯片中的代码吧。那么这些代码应该是放在NORFLASH中的,因为board初始化的时候也是要程序来驱动的,而初始化SDRAM的代码是由CPU来执行的,所以应该是放在FLASH中的

#15


little endian时,12存放在0x00000000,34存放在0x00000001,ab存放在0x00000002,cd存放在0x00000003。big endian时,cd存放在0x00000000,ab存放在0x00000001,34存放在0x00000002,12存放在0x00000003.

OSI模型:物理层,数据链路层,网路层,传输层,会话层,表示层,应用层。属于传输层。

终端服务程序不能有返回值。

#1




FPGA:
1 有些信号特别是时钟信号, 一般在输出端串一电阻, 目的是什么呢?
2 根据逻辑功能不同, 数字逻辑电路分为哪几类?各类的功能特点是什么?
3 FPGA代表什么意思? FPGA与CPLD结构主要差别是什么?
4 在一个高速CPU(例如ARM)的系统中, 包括CPU SDRAM FLASH和其他外设,CPU程序应该放在SDRAM还是Flash中运行? 为什么?
5 CPU最小系统应该包括哪些部分?

#2


...大家加油啊!

#3


...没人啊!

#4


1 在32位机器上,假设一个32位的整数0X1234abcd保存在从地址0x00000000开始的内存中,那么在little endian和big endian的机器上, 按字节该整数在内存在的存放顺序是怎样的?

little endian: 0x1234abcd
big endian: 0xcdab3412

3 _interrupt double compute_area(double radius)
{
  double area=PI*radius*radius;
  return area;
}

(1)一般不带参数
(2)不能进行浮点操作
(3)不带返回值

#5


学习,学习........

#6


以下是我的回答,不保证正确:
1.little endian:0x1234abcd;  bigendian:0xcdab3412
2.7层(从上往下):应用层 表示层 会话层 传输层 网络层 数据链路层 物理层  
  tcp/udp属于传输层
3.关于编写中断服务程序的一些基本原则:
    a. 避免在中断服务程序中做浮点运算
         好的中断服务程序应该遵循短而有效这一原则,但在中断服务程序中做浮点运算却大大地违背这一原则,同时有些处理器/编译器就不允许在中断服务城中做浮点运算。
    b.中断服务程序不能有返回值
        所有的中断服务程序都应该将返回类型定义为void。
    c.中断服务程序不能传递参数
       所有的中断服务程序的参数列表为void。

4.管道通信  信号通信 共享内存 消息队列 信号量(也叫信号灯) 
5. void memcpy(void * dest,void * src,int size)
  { char *pd =(char *)dest;
   char *ps =(char *)src;
   long len =(long)sizeof(size_t)*n;
   while(len)
   {
    while((*pd++=*ps++)!='/0')
    len--;
    }
  }

#7


引用 6 楼 sdustliyang 的回复:
以下是我的回答,不保证正确:
1.little endian:0x1234abcd;  bigendian:0xcdab3412
2.7层(从上往下):应用层 表示层 会话层 传输层 网络层 数据链路层 物理层  
  tcp/udp属于传输层
3.关于编写中断服务程序的一些基本原则:
    a. 避免在中断服务程序中做浮点运算
         好的中断服务程序应该遵循短而有效这……

学习了

#8


LInux
1 列出目前linux系统能支持的文件系统, 列出常用的4个以上
      yaffs   yaffs2  cramfs  jffs  ramdisk   ext2 nfs
2 Linux系统支持驱动模块动态加载的, 请列出驱动模块的入口和出口
       module_init和module_exit
3 Linux的基本命令, 列出root根目录下的内容, 要求以详细信息列出, 并以时间倒序排序
4 linux下图形用户接口(GUI)编程技术最常用到的库有哪些?(三个以上)
        OPENGUI  GTK  QT  
5 用户进程是通过设备文件同硬件打交道的,列出常用的用户进程操作设备文件的一些系统调用, 要求3个以上!

#9


DSP 软件开发
1 请说明DSP中定点 浮点概念

1、定点数: 
定点数指小数点在数中的位置是固定不变的,通常有定点整数和定点小数。在对小数点位置作出选择之后,运算中的所有数均应统一为定点整数或定点小数,在运算中不再考虑小数问题。 
(1)定义:数据中小数点位置固定不变的数 
(2)种类:定点整数 
(3)小数点在符号位与有效位之间。 
注:定点数受字长的限制,超出范围会有溢出。 
2、浮点数: 
浮点数中小数点的位置是不固定的,用阶码和尾数来表示。通常尾数为纯小数,阶码为整数,尾数和阶码均为带符号数。尾数的符号表示数的正负;阶码的符号则表明小数点的实际位置。 
(1)形式:N=M×2E 
(2)M:尾数 
(3)E:阶码 
(4)在计算机中M和E表示形式为 
阶码 尾数符号 尾数 
将其与数学中的科学记数法进行比较。 
注:其浮点数的精度由尾数决定,数的表示范围由阶码决定。 
3、定点数与浮点数区别 
定点表示法运算直观,但数的表示范围较小,不同的数运算时要考虑比例因子的选取,以防止溢出。浮点表示法运算时可以不考虑溢出,但浮点运算,编程较难。要掌握定、浮点数的转换方法及浮点数规格化方法。

2什么是cache? 有哪些操作?
高速缓冲存储器 cache清除 清理 锁定
直写 回写 行替换 失效时分配策略 不知道这些算不算

3关键字volatile的作用? 举例说明
  volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。
volatile int i = 1;
if (i > 0) ...
if的条件不会当作无条件真。

4 a y = 3*x/4
b #define WrR(dat) (0X80000000 = (dat))
#define RdR() (0X80000000)
#define SetRF() (0X80000000 |= 0xff000000)//置1
#define ClearRF() (0X80000000 &= 0x00ffffff)//清0
#define RevRF() (0X80000000 ^= 0xff000000)//取反

#10


4 a y = 3*x/4
#define rR    (*(volatile unsigned *)0X80000000)
b #define WrR(dat) (rR = (dat))
#define RdR() (rR)
#define SetRF() (rR |= 0xff000000)//置1
#define ClearRF() (rR &= 0x00ffffff)//清0
#define RevRF() (rR ^= 0xff000000)//取反

#11


.....大家继续!

#12


LInux
1 列出目前linux系统能支持的文件系统, 列出常用的4个以上
  yaffs yaffs2 cramfs jffs ramdisk ext2 nfs
2 Linux系统支持驱动模块动态加载的, 请列出驱动模块的入口和出口
  module_init和module_exit
3 Linux的基本命令, 列出root根目录下的内容, 要求以详细信息列出, 并以时间倒序排序
  ls -lt /root

4 linux下图形用户接口(GUI)编程技术最常用到的库有哪些?(三个以上)
  OPENGUI GTK QT
5 用户进程是通过设备文件同硬件打交道的,列出常用的用户进程操作设备文件的一些系统调用, 要求3个以上!
  open close ioctl map 

#13


另外6楼写的 memcpy考虑不周全

要考虑src 和dest地址的前后关系

#14


Linux的基本命令,   列出root根目录下的内容,   要求以详细信息列出,   并以时间倒序排序 
    ls   -ltr   /root  ------>>>> r是表示将排序结果反转的

 假设一个硬件寄存器R的地址为0X80000000, 宽度32位, 其中最高的8为(Bit:24-31)为字段F
 请写出对寄存器R进行读/写的宏定义;
   #define READ(R) (*((volatile __32*)(R)))
   #define WRITE(R, val)  (*(volatile __32 *)(R) = (val))

 请写出字段F的所有位分别进行置1, 清0, 取反的宏定义
   置1 : __32 val = READ(R);
         val |= 0xff << 24;
         WRITE(R, val);

   置0: __32 val = READ(R);
         val &= ~(0xff << 24);
         WRITE(R, val);

在一个高速CPU(例如ARM)的系统中, 包括CPU SDRAM FLASH和其他外设,CPU程序应该放在SDRAM还是Flash中运行? 为什么?
我认为你说的CPU程序应该是固化在芯片中的代码吧。那么这些代码应该是放在NORFLASH中的,因为board初始化的时候也是要程序来驱动的,而初始化SDRAM的代码是由CPU来执行的,所以应该是放在FLASH中的

#15


little endian时,12存放在0x00000000,34存放在0x00000001,ab存放在0x00000002,cd存放在0x00000003。big endian时,cd存放在0x00000000,ab存放在0x00000001,34存放在0x00000002,12存放在0x00000003.

OSI模型:物理层,数据链路层,网路层,传输层,会话层,表示层,应用层。属于传输层。

终端服务程序不能有返回值。