嵌入式工程师笔试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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