嵌入式笔试常见的题

1. 写一个“标准”宏 MIN,这个宏输入两个参数并返回较小的一个。(5 分)

答:

#define MIN(a,b) (((a) >= (b)) ? (b) : (a))


2. 对于 32 位无符号变量 A=0x12345678, 8 位无符号指针 p=&A,请分别指出
在小端(little endian) 和大端(big endian) 处理器下, p[0], p[1], p[2],
p[3]的值。(5 分)

答:

小端: p[0] = 0x78, p[1] = 0x56, p[2] = 0x34, p[3] = 0x12;
大端: p[0] = 0x12, p[1] = 0x34, p[2] = 0x56, p[3] = 0x78;


3. 关键字 static 的作用是什么? (10 分)

答:

1. 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能        被模块外其它函数访问。它是一个本地的全局变量。
3. 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。


4. 下面的代码使用了__interrupt 关键字去定义了一个中断服务子程序(ISR),
请评论一下这段代码。 (10 分)
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
答:
1.ISR不能有返回值,必须用void;
2.ISR不能传递参数,必须用void;
3.ISR中不应该有重入和性能上的问题,因此使用printf(" Area = %f", area);是不好的.

5. 32 位处理器,有如下定义:
typedef union {
long i;
int k[5];
char c;
} DATE;
struct data {
int cat;
DATE cow;
double dog;
} test;
请指出 long、 int、 char、 double 分别占几个字节, sizeof(struct date)
等于几? (10 分)

答:
    long:4
    int:20
    char:1
    double:8
    sizeof(struct date):32


6. 请写出执行下列代码后,最后 a, b, c, d 的值各位多少? (10 分)
int a,b,c,d;
a=8;
b=a++;
c=++a;
d=10*a++;


答:


a=11 b=8 c=10 d=100


7. 通过什么方法来检查或判断嵌入式程序的堆栈是否溢出?( 10 分)

答:

1.软件预设检测法 
2.堆栈限制寄存器
3.MPU替代法


8. 请解释一下在嵌入式系统中 TEXT 段, DATA 段, BSS 段分别代表什么?
常量,局部变量,全局变量经过编译器编译后分别会放到哪个段或者其它地
方?(10 分)


答:


TEXT:TEXT段是程序代码段
DATA:DATA包含静态初始化的数据,所以有初值的全局变量和static变量在data区。
BSS:通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。BSS段属于静态内存分配。
常量:DATA
局部变量:DATA
全局变量:有初始化的放DATA,没初始化的放BSS


9. 请解释一下 CACHE 和 DMA 在嵌入式 CPU 中如何加速系统的运行性能?
(10 分)


答:
CACHE:
读机制:CPU需要读取时,先访问Cache,如果Cache中有,称为Hit命中,读走即可;
若CPU需要读取的内容在Cache中没有,CPU还是要去读取RAM,读走后,Cache也将该片的内容缓存起来;
写机制当CPU需要写内存时,先写在Cache里,并且修改一个叫DietyBit的标志位,但暂时不更新在RAM中
只有当Cache需要缓存新内容时,而Cache空间又满了,需要覆盖这一块区域,才会去检查DietyBit标志位,如果查到有写记录,则把这些修改更新到RAM中再去写入新缓存
DMA:纯硬件操作,不占CPU资源。


10. 写一个函数来返回 unsigned int 类型的参数中 bit 1 出现的次数(10 分)
答:
#include "stdio.h"
int CalBitNum(unsigned int a)
{
    int count = 0;
    while(a)
    {
         count++;
         a = a & (a - 1);
    }
    return count;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值