嵌入式工程师笔试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

U1

80C51

ALE/PROG:(Address Latch Enable/ Programming):地址锁存允许信号端,CPU访问外部存储器时,ALE作为锁存低8位地址的控制信号。

EA/Vpp(Enable Address/Voltage Pulse Of Programming):外部程序存储器地址允许输入端/固

化编程电压输入端.当EA接高电平时,CPU访问片内ROM,并执行内部程序存储器中的指令,但当PC(程序计数器)的值超过4K时,将自动转去执行片外存储器内的程序。当EA脚接低电平时,CPU只访问片外ROM并执行外部程序存储器中的指令,而不管是否有片内程序存储器。

PSEN:(Program Store Enable)在访问片外存储器时,此端定时输出负脉冲作为片外存储器的选通信号。

P0和P2通常用于对外部存储器的访问。在这种方式下,把P0口作为地址/数据总线使用,分时输出外部存储器的地址和传送8位数据。当扩充外部存储器的地址为16位时,P2口作为地址总线的高8位地址使用。

(1)什么是预编译,何时需要预编译?

1、总是使用不经常改动的大型代码体。

2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

1.volatile作用?应用场合举3例

volatile修饰的变量表示这个变量可能会被意想不到的改变,对该变量的操作将不作优化,用到该变量时都从这个

变量的原始地址读取,而不是用保存在寄存器里的备份。

Volatile常用在:

1).硬件寄存器(如:状态寄存器)。2).中断程序中会访问到的非自动变量(Non-automatic variables)。3).多线程应用中几个任务共享的变量。

2.一个参数既可以是const还可以是volatile吗?解释为什么。

是的。比如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

3.一个指针可以是volatile吗?解释为什么。

是的。比如一个中断服务子程序修改一个指向一个buffer的指针时。

6.写一段用来判断内存存储方式是大端还是小段的代码。

联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性就可以轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。代码如下:

Int checkCPUendian()

{

union{

unsigned int a;

unsigned char b;

}c;

c.a=1;

return (c.b==1);

}

/*return 1:little-endian,

return 0:big-endian*/

18.Typedef和#define的区别

#define在预编译的时候处理作机械的字符替换。Typedef在编译的时候处理,并不是作简单的字符替换。而是如同定义变量一样声明一个类型。然后用它去定义这种类型的变量。比如下面的例子:

#define dPS struct s*

dPS p1,p2;

tPS p3,p4;

第一句扩展为struct s *p1,p2;

这条代码定义p1为指向结构的指针,p2为一个实际的结构体。第二句定义p3和p4为指向结构体s的指针。

1.在字符串中找出所有与给定字符相同字符的位置。

#include

chars[6]="hello";

void search(char given)

{

inti=0,j=0;

while(s[i]!='\0')

{

if(s[i]==given)

{

printf("location=%d\n",i);

j++;

}

i++;

}

if(j==0)

printf("No%c found\n",given);

}

Int main(void)

{

search('o');

return 0;

}

2.将一个字符串自身逆序。

#include

#define LEN 12

Int main(void)

{

Int m,i;

Char temp;

Char s[LEN]="hello tiger";

m=(LEN-1)/2;

printf("%s\n",s);

for(i=0;i

{

temp=s[i];

s[i]=s[LEN-2-i];

s[LEN-2-i]=temp;

}

printf("%s\n",s);

return 0;

}

链表

Typedef struct list{

Int a;

Struct node *next;

} LIST;

LIST head = NULL;

LIST Creat_List()

{

Head = (LIST *)malloc(sizeof(LIST));

Head.next = NULL;

}

3.链表的基本操作及链表自身逆序。

/*----chain operate from Data Structure---*/ #include

#include

#include

相关文档
最新文档