嵌入式0x10

合集下载

嵌入式系统课后答案

嵌入式系统课后答案

嵌⼊式系统课后答案嵌⼊式系统2011作业(⾮标准答案,仅供参考)第1章嵌⼊式系统概述 1、什么是嵌⼊式系统?答:嵌⼊式系统指的是以应⽤为中⼼和以计算机技术为基础的,并且软硬件是可裁剪的,能满⾜应⽤系统对功能、可靠性、成本、体积、功耗等指标严格要求的专⽤计算机系统。

3、根据嵌⼊式系统的复杂程度,嵌⼊式系统可分为哪4类?答:1:单个微处理器;2:嵌⼊式处理器可扩展的系统; 3:复杂的嵌⼊式系统; 4:在制造或过程控制中使⽤的计算机系统。

5、从硬件系统来看,嵌⼊式系统由哪⼏部份组成?画出简图。

答:P11图1-42.2 回答下列关于ARM 编程模式的问题(1)在该模式下有多少通⽤寄存器(2)CPSR 的作⽤是什么(3)Z 位的作⽤是什么(4)程序计数器保存在何处答(1)31个通⽤寄存器(2)为状态寄存器,保存当前的状态,可以在任何模式下访问(3)Z=1 运算结果为0 Z=0 运算结果不为0 (4)R15(PC)2.3 下列的arm 条件码的含义是什么(1)EQ (2)NE (3)MI (4)VS (5)GE (6)LT 答(1)z 置位相等 (2)z 清零不相等 (3)n 置位负数 31个通⽤寄存pc ,6个状~R7不分组,R8~R14按模式分组,R15为程序计数器,CPSR 为状态寄存器,SPSR 为保存程序状态寄存器。

R13为堆栈指针寄存器,R14为链接寄存器。

CPSR 在各种模式下多可以访问,⽽在⽤户模式及系统模式下SPSR 不可以被访问。

2.6若寄存器R1=0x01020304,分别按照⼤端模式和⼩端模式存储在0x30000字单元中,试分别写出两种模式下内存存储内容,并标出内存地址答⼤端模式 0x30000 01 0x30001 02 0x30002 03 0x30003 04 ⼩端模式 0x30000 04 0x30001 030x30002 02 0x30003 012.7 ARM 存储器的存储周期有⼏种类型?对应于Cache 访问和存储器访问是何存储周期?答:ARM 存储器有4种存储周期:空闲周期,⾮顺序周期,顺序周期,协处理器寄存器传送周期。

嵌入式原理思考题及答案

嵌入式原理思考题及答案

第1章复习要点1.1.1节嵌入式系统的概念1.1.3节嵌入式系统的特点1.3节嵌入式处理器1.4节嵌入式系统的组成第2章复习要点2.1节计算机体系结构分类2.3.1节 ARM和Thumb状态2.3.2节 RISC技术2.3.3节流水线技术2.4.3节 ARM存储系统第3章复习要点3.1节ARM编程模式3.2节ARM指令格式及其寻址方式3.3节ARM指令集(课上所讲的指令)第4章复习要点4.1节汇编语言源程序格式4.2节汇编语言的上机过程第5章复习要点5.1节键盘接口5.2节 LED显示器接口5.5.1节 UART异步串行接口作业题答案:1.什么是嵌入式系统?∙第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。

∙第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

2.与通用型计算机相比,嵌入式系统有哪些特点?⏹通常是面向特定应用的;⏹空间和各种资源相对不足,必须高效率地设计,量体裁衣、去除冗余;⏹产品升级换代和具体产品同步,具有较长的生命周期;⏹软件一般都固化在存储器芯片或单片机本身;⏹不具备自举开发能力,必须有一套开发工具和环境才能进行开发3.举例介绍嵌入式微处理器有哪几类?一、嵌入式微处理器(Embedded Microprocessor Unit, EMPU)嵌入式处理器目前主要有Aml86/88、386EX、SC-400、PowerPC、68000、MIPS、ARM系列等。

二、嵌入式微控制器(Microcontroller Unit, MCU)嵌入式微控制器目前的品种和数量最多,比较有代表性的通用系列包括8051、P51XA、MCS-251、MCS-96/196/296、C166/167、MC68HC05/11/12/16、68300等。

嵌入式系统 实验报告

嵌入式系统 实验报告

使能 IRQ 中断。
4 装载并使能外中断;
5 选用 DebugInExram 生成目标,然后编译连接工程。
6 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7 全速运行程序,LED 闪烁;
8 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
四.测试数据及运行结果
1
五.总结
1.实验过程中遇到的问题及解决办法;
由于本次实验较简单,且我们之前学习的微机原理课程也进行了流水灯的设
计实验,所以对于本次实验,我完成地很顺利,在实验中没有遇到问题。
2.对设计及调试过程的心得体会。
本次实验是本学期该课程我们进行的第一次实验,总的来说,实验不是很难,
设计过程也相对简单,其主要目的是让我们熟悉一下实验环境,并且能在实验环
6
五.总结 1.实验过程中遇到的问题及解决办法;
实验第一次运行时,蜂鸣器一直处于鸣响状态,及时按了按键,蜂鸣器还是 一直鸣叫,不产生外中断。后来仔细检查了程序,发现原来是忘记使能 EINT0 中 断了,加上 VICIntEnable = 1<<0x0e 代码,程序就能正常运行了。 2. 对设计及调试过程的心得体会。
境下进行简单的实验操作,为之后的实验打下坚实的基础。
六.附录:源代码(电子版)
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制 LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;
//P0.16 连接 KEY1
三.方案设计
① 启动 ADS1.2IDE 集成开发环境,选择 ARM Executable Image for lpc2131

嵌入式系统原理与接口技术课后题答案

嵌入式系统原理与接口技术课后题答案

课 后



列等。
ww w.
� 单个微处理器 。 常用的嵌入式处理器如 Philips
kh da
3.根据嵌入式系统的复杂程度,嵌入式系统可分为哪
w.
co
m
一 、 嵌 入 式 微 处 理 器 (Embedded Microprocessor Unit, EMPU) 嵌入式处理器目前主要有 Aml86/88、386EX、 SC-400、Power PC、68000、MIPS、ARM 系列等。 二、 嵌 入 式 微 控 制 器 (Microcontroller Unit, MCU) 有代表性的通用系列包括 8051、P51XA、MCS-251、 68300 等。 Processor, EDSP) 嵌入式微控制器目前的品种和数量最多,比较 MCS-96/196/296、C166/167、MC68HC05/11/12/16、 三、嵌入式 DSP 处理器(Embedded Digital Signal 嵌 入 式 DSP 处 理 器 比 较 有 代 表 性 的 产 品 是 托罗拉的 DSP56000 系列。 四、嵌入式片上系统(System On Chip) 5.从硬件系统来看,嵌入式系统由哪几部分组成?画 出简图。
课 后


Texas Instruments 的 TMS320 系列和 Motorola 摩

ww w.
kh da
w.
co
m
外围电路 电源模块 FL A SH
微处理器 时 钟 M PU RAM
复 位
ROM
外 U SB LCD
设 Keyboard

EMCU——嵌入式微控制器、EDSP——嵌入式数字

嵌入式软件工程师笔试题华为面试宝典

嵌入式软件工程师笔试题华为面试宝典

1、将一个字符串逆序2、将一个链表逆序3、计算一个字节里(byte)里面有多少bit被置14、搜索给定的字节(byte)5、在一个字符串中找到可能的最长的子字符串6、字符串转换为整数7、整数转换为字符串/** 题目:将一个字符串逆序* 完成时间:2006.9.30深圳极讯网吧* 版权归刘志强所有* 描述:写本程序的目的是希望练一下手,希望下午去面试能成功,不希望国庆节之后再去找工作拉!*/#include <iostream>using namespace std;//#define NULL ((void *)0)char * mystrrev(char * const dest,const char * const src){if (dest==NULL && src==NULL) return NULL;char *addr = dest;int val_len = strlen(src);dest[val_len] = '\0';int i;for (i=0; i<val_len; i++){*(dest+i) = *(src+val_len-i-1); }return addr;}main(){char *str="asdfa";char *str1=NULL;str1 = (char *)malloc(20);if (str1 == NULL)cout<<"malloc failed";cout<<mystrrev(str1,str);free(str1);str1=NULL;//杜绝野指针}p=head;q=p->next;while(q!=NULL){temp=q->next;q->next=p;p=q;q=temp;}这样增加个辅助的指针就行乐。

ok 通过编译的代码:#include <stdio.h>#include <ctype.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;List *list_create(void){struct List *head,*tail,*p;int e;head=(List *)malloc(sizeof(List));tail=head;printf("\nList Create,input numbers(end of 0):"); scanf("%d",&e);while(e){p=(List *)malloc(sizeof(List));p->data=e;tail->next=p;tail=p;scanf("%d",&e);}tail->next=NULL;return head;}List *list_reverse(List *head) {List *p,*q,*r;p=head;q=p->next;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next=NULL;head=p;return head;}void main(void){struct List *head,*p;int d;head=list_create();printf("\n");for(p=head->next;p;p=p->next)printf("--%d--",p->data);head=list_reverse(head);printf("\n");for(p=head;p->next;p=p->next)printf("--%d--",p->data);}编写函数数N个BYTE的数据中有多少位是1。

嵌入式考试试题

嵌入式考试试题

嵌入式试题资料参考1、以下说法不正确的是(2 )。

A、任务可以有类型说明B、任务可以返回一个数值C、任务可以有形参变量D、任务是一个无限循环2下列描述不属于计算机的特点的是(3)。

A.流水线每周期前进一步。

B.更多通用寄存器。

C.指令长度不固定,执行需要多个周期。

D.独立的和指令完成数据在寄存器和外部存储器之间的传输。

3存储一个32位数0x2168465到2000H〜2003H四个字节单元中,若以大端模式存储,则2000H存储单元的内容为(4)。

A、0x21B、0x68C、0x65D、0x024u中对关键代码段由于希望在执行的过程中不被中断干扰,通常采用关中断的方式,以下X86汇编代码正确而且不会改变关中断之前的中断开关状态的是(4)A.先、执行关键代码、再B.先、执行关键代码、再C.先、、执行关键代码、再D.先、、执行关键代码、再。

5232串口通信中,表示逻辑1的电平是(4 )。

A、0vB、3.3vC、+5v〜+ 15vD、一5v〜一15v6汇编语句“ R0, R2, R3, 1”的作用是()。

A. R0 = R2 +(R3 << 1)B. R0=(R2<< 1) + R3C. R3= R0+ (R2 << 1)D. (R3 << 1)= R0+ R27中断的入口地址是()。

的入口地址为0x0000001CA、0x00000000B、000000008 、0x00000018 D 、0x000000148 S3C2420X 口常用的控制器是()。

(1)端口控制寄存器()。

(2)端口数据寄存器()。

(3)外部中断控制寄存器()。

(4)以上都是。

9实时操作系统中,两个任务并发执行,一个任务要等待其合作伙伴发来信息,或建立某个条件后再向前执行,这种制约性合作关系被成为()。

A.同步B.互斥C.调度D.执行10和系统机相比嵌入式系统不具备以下哪个特点()。

嵌入式系统数码管显示程序

嵌入式系统数码管显示程序
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //重置初值
timecount++;
if(timecount==30)
{
TR0=0;
timecount=0;
flag=1;
}
}
TR1=1;
}
for(i=0;i<3;i++)
{
switch (i)
{
case 0:
ds1=1;
ds2=1;
ds3=0;
dxuan=num_to_char[z];
delay_1ms(5);
ds3=1;
case 1:
ds2=0;
ds1=1;
ds3=1;
dxuan=num_to_char[y];
delay_1ms(5);
void delay_1ms(char x)
{
char j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}
void main()
{
uchar x,y,z,i;
TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1
TH0=0;
TL0=0;
TH1=(65536-50000)/256;
//uchar code num_to_char[]={0x01,0x9f,0x22,0x06,0x9c,0x44,0x40,0x1f,0x00,0x04}; //0-9段码我的段码
//uchar code num_to_char[]={0x80,0xe3,0x44,0x41,0x23,0x11,0x10,0xc3,0x00,0x01}; //ck段码

高通笔精彩试题--嵌入式C开发人员地最好地0x10道笔精彩试题(详细解析汇报)

高通笔精彩试题--嵌入式C开发人员地最好地0x10道笔精彩试题(详细解析汇报)

嵌入式C开发人员的最好的0x10道笔试题约定:(1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了(2)数据类型Char 一个字节 1 byteInt 两个字节 2 byte (16位系统,认为整型是2个字节)long int 四个字节 4 bytefloat 四个字节4 byetdouble 八个字节 8 bytelong double 十个字节 10 bytepointer 两个字节 2 byte(注意,16位系统,地址总线只有16位)第1题: 考查对volatile关键字的认识 --- 高通笔试题#include<setjmp.h>static jmp_buf buf;main(){volatile int b;b =3;if(setjmp(buf)!=0){printf("%d ", b);exit(0);}b=5;longjmp(buf , 1);}请问,这段程序的输出是(a) 3 (b) 5(c) 0 (d) 以上均不是第2题:考查类型转换--- 高通笔试题main(){struct node{int a;int b;int c;};struct node s= { 3, 5,6 };struct node *pt = &s;printf("%d" , *(int*)pt);这段程序的输出是:(a) 3 (b) 5 (c) 6 (d) 7第3题:考查递归调用int foo ( int x , int n){int val;val =1;if (n>0){if (n%2 == 1) val = val *x;val = val * foo(x*x , n/2);}return val;}这段代码对x和n完成什么样的功能(操作)?(a) x^n (x的n次幂) (b) x*n(x与n的乘积) (c) n^x(n的x次幂) (d)以上均不是第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人--- 高通笔试题main(){int a[5] = {1,2,3,4,5};int *ptr = (int*)(&a+1);printf("%d %d" , *(a+1), *(ptr-1) );}这段程序的输出是:(a) 2 2 (b) 2 1 (c) 2 5 (d) 以上均不是第5题:考查多维数组与指针void foo(int [][3] );main(){int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};foo(a);printf("%d" , a[2][1]);}void foo( int b[][3]){++ b;b[1][1] =9;这段程序的输出是:(a) 8 (b) 9 (c) 7 (d)以上均不对第6题目:考查逗号表达式--- 高通笔试题main(){int a, b,c, d;a=3;b=5;c=a,b;d=(a,b);printf("c=%d" ,c);printf("d=%d" ,d);}这段程序的输出是:(a) c=3 d=3 (b) c=5 d=3 (c) c=3 d=5 (d) c=5 d=5 第7题:考查指针数组--- 高通笔试题main(){int a[][3] = { 1,2,3 ,4,5,6};int (*ptr)[3] =a;printf("%d %d " ,(*ptr)[1], (*ptr)[2] );++ptr;printf("%d %d" ,(*ptr)[1], (*ptr)[2] );}这段程序的输出是:(a) 2 3 5 6(b) 2 3 4 5 (c) 4 5 0 0 (d) 以上均不对第8题:考查函数指针--- 高通笔试题int *f1(void){int x =10;return(&x);}int *f2(void){int*ptr;*ptr =10;return ptr;int *f3(void){int *ptr;ptr=(int*) malloc(sizeof(int));return ptr;}上面这3个函数哪一个最可能引起指针方面的问题(a) 只有 f3 (b) 只有f1 and f3 (c) 只有f1 and f2(d) f1 , f2 ,f3第9题:考查自加操作(++) --- 高通笔试题main(){int i=3;int j;j = sizeof(++i+ ++i);printf("i=%d j=%d", i ,j);}这段程序的输出是:(a) i=4 j=2 (b) i=3 j=2 (c) i=3 j=4 (d) i=3 j=6第10题:考查形式参数,实际参数,指针和数组void f1(int *, int);void f2(int *, int);void(*p[2]) ( int *, int);main(){int a;int b;p[0] = f1;p[1] = f2;a=3;b=5;p[0](&a , b);printf("%d\t %d\t" , a ,b);p[1](&a , b);printf("%d\t %d\t" , a ,b);}void f1( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;}void f2( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;}这段程序的输出是:(a) 5 5 5 5 (b) 3 5 3 5 (c) 5 3 5 3 (d) 3 3 3 3第11题:考查自减操作(--)void e(int );main(){int a;a=3;e(a);}void e(int n){if(n>0){e(--n);printf("%d" , n);e(--n);}}这段程序的输出是:(a) 0 1 2 0 (b) 0 1 2 1 (c) 1 2 0 1 (d) 0 2 1 1第12题:考查typedef类型定义,函数指针typedef int (*test) ( float * , float*)test tmp;tmp 的类型是:(a) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to function of having two arguments that is pointer to float(b) 整型(c) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int(d) 以上都不是第13题:数组与指针的区别与联系--- 高通笔试题main(){char p;char buf[10] ={ 1,2,3,4,5,6,9,8};p = (buf+1)[5];printf("%d" , p);}这段程序的输出是:(a) 5 (b) 6 (c) 9 (d) 以上都不对第14题: 考查指针数组的指针Void f(char**);main(){char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };f( argv );}void f( char **p ){char* t;t= (p+= sizeof(int))[-1];printf( "%s" , t);}这段程序的输出是:(a) ab (b) cd (c) ef (d) gh第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情有可原呵呵, --- 高通笔试题#include<stdarg.h>int ripple ( int , ...);main(){int num;num = ripple ( 3, 5,7);printf( " %d" , num);}int ripple (int n, ...){int i , j;int k;va_list p;k= 0;j = 1;va_start( p , n);for (; j<n; ++j){i = va_arg( p , int);for (; i; i &=i-1 )++k;}return k;}这段程序的输出是:(a) 7 (b) 6 (c) 5 (d) 3第16题:考查静态变量的知识--- 高通笔试题int counter (int i){static int count =0;count = count +i;return (count );}main(){int i , j;for (i=0; i <=5; i++)j = counter(i);}本程序执行到最后,j的值是:(a) 10 (b) 15 (c) 6 (d) 7详细参考答案第1题: (b)volatile字面意思是易于挥发的。

嵌入式系统课后习题部分答案1

嵌入式系统课后习题部分答案1

第一章1-1.简述嵌入式系统的定义。

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

1-2.简述嵌入式系统的组成。

从体系结构上看,嵌入式系统主要由嵌入式处理器、支撑硬件和嵌入式软件组成。

其中嵌入式处理器通常是单片机或微控制器,支撑硬件主要包括存储介质、通信部件和显示部件等,嵌入式软件则包括支撑硬件的驱动程序、操作系统、支撑软件及应用中间件等。

嵌入式系统的组成部分是嵌入式系统硬件平台、嵌入式操作系统和嵌入式系统应用。

嵌入式系统硬件平台为各种嵌入式器件、设备(如ARM 、PowerPC、Xscale、MIPS等);嵌入式操作系统是指在嵌入式Linux、uCLinux、WinCE等。

1-3.ARM7处理器使用的是(ARMv4)指令集。

ARM7内核采用冯·诺依曼体系结构,数据和指令使用同一条总线。

内核有一条3级流水线,执行ARMv4指令集。

1.4.Cortex-M3主要应用在哪些方向?主要用在平衡ARM的产品的性能和功耗,提高ARM的性能,降低其功耗1.5.简述StrongARM处理器和ARM处理器的关系StrongARM是第一个包含5级流水线的高性能ARM处理器,但它不支持Thumb指令集1-6.ARM9采用的是(5)级流水线设计。

存储器系统根据哈佛体系结构(程序和数据空间独立的体系结构)重新设计,区分数据总线和指令总线。

1.7.简述ARM9和ARM9E的不同点硬件处理器不一样指令集不一样1.8.ARM11采用的是什么架构的指令ARMv6嵌入式操作系统的特点(1)体积小(2)实时性(3)特殊的开发调试环境SecureCore处理器系列的特点(1)支持ARM指令集和Thumb指令集,以提高代码密度和系统性能(2)采用软内核技术一提供最大限度的灵活性,可以防止外部对其进行扫描探测(3)提供了安全特性,可以抵制攻击(4)提供面向智能卡和低成本的存储保护单元MPU(5)可以集成用户自己的安全特性和其它的协处理器第二章2-1.简述ARM可以工作在几种模式。

嵌入式处理器课程复习参考习题-3(含答案)

嵌入式处理器课程复习参考习题-3(含答案)

一、判断1. 嵌入式系统是看不见的计算机系统,其开发环境和运行环境一致。

()2. PC 机可包含在嵌入式系统中。

()3. 通常嵌入式系统是一个通用的计算平台,其软件是应用程序和操作系统两种软件的一体化程序。

()4. 嵌入式硬件系统的多样性不仅表现在嵌入式CPU 的多样性、而且具有相同微处理器的硬件系统可能会有多种不同的外围电路。

()5. 嵌入式硬件系统的核心是嵌入式微处理器,其主要体系架构有SPARC、Pentium、Itanium 等。

()6. AMBA 总线是片内总线,包括高速总线AHB 和低速总线APB。

()7. NandFlash 是一种Flash Memory 它既可以做主存也可做外存使用。

()8. NorFlash 是一种Flash Memory 它既可以做主存也可做外存使用。

()9. 在ARM CPU 模式中System 模式与User 模式的运行环境一样,但是它可以不受任何限制地访问任何资源。

()10. 在ARM CPU 模式中除User 模式外,其它模式都被称为特权模式,User 模式可直接改变CPU 的模式。

()11. ARM 处理器主要有两种工作状态:ARM 和Thumb,ARM 和Thumb 之间状态的切换将影响CPU 的模式或寄存器的内容。

()12. ARM 是32 位嵌入式处理器,并可以进入16 位运行模式, 可支持大、小端数据格式()13. X86 CPU 的异常向量与ARM CPU 的异常向量的区别是:在X86 平台上,当有异常发生时CPU 是到指定的向量地址读取要执行的程序的地址。

而ARM CPU 是到向量地址的地方读取指令,也就是ARM 的向量地址处存放的是一条指令(一般是一条跳转指令)。

()14. 存储器映射编址是指I/O 端口的地址与内存地址统一编址,即I/O 单元与内存单元在同一地址空间。

其优点是可采用丰富的内存操作指令访问I/O 单元、无需单独的I/O 地址译码电路、无需专用的I/O 指令。

嵌入式系统课程设计

嵌入式系统课程设计

《嵌入式系统》课程设计一、目的《嵌入式系统》课程设计为学生提供了一个理论与实践相结合的机会。

既锻炼了学生动手能力,又会加深理解学生在课堂所学习的理论知识。

通过课程设计可以将课本上的理论知识和实际应用有机的结合起来,培养学生又动脑,又动手,独立思考分析问题的能力,提高学生运用所学知识解决实际问题的综合素质。

《嵌入式系统》课程设计的主要目标是:(1)掌握构建嵌入式系统软硬件平台的基本技能;(2)具备基本嵌入式系统下C语言编程能力、嵌入式操作系统基本调试的能力;(3)了解应用嵌入式系统技术开发一套嵌入式系统设备的方法。

二、设计题目基于ARM的滚屏LED广告牌开发三、设计原理1、点阵LED屏硬件原理EMBEST实验平台设计了一个 16×16的点阵屏。

点阵屏由发光LED矩阵块组成。

16×16点阵屏即屏上有 16×16 个LED发光二极管,每个发光二极管可理解为一个像素点,它们被按着行与列的形式整齐地排列,通过控制每个LED(像素点)的亮灭,点阵屏可与计算机同步显示汉字、英文文本和图形。

本实验平台的点阵屏电路如下图:图1 点阵屏的行扫描信号图2 点阵屏的列扫描信号图3 点阵屏的行驱动信号图4 点阵屏的接口电路本实验平台使用的16×16点阵屏上,每一行16个LED,它们采用共阳极的接法;每一列16个LED,它们采用共阴极的接法。

如上图4中,QL1~QL16是点阵屏的行驱动信号,每一个信号控制一行;LR1~LR16是点阵屏的列驱动信号,每一个信号控制一列。

故通过利用相应行线输出高电平,相应列线输出低电平,就可以点亮点阵屏上相应的LED。

如果按着一定的控制或扫描方法,就可以实现汉字、图形的显示。

为了能够稳定地控制点阵屏的显示,本实验平台采用了CD4094作为行线和列线扫描信号的控制芯片。

CD4094芯片简单来说就是一串入并出的功能,将CPU的串行数据转化为并行数据输出。

如上图1与图2,行(列)扫描信号分别采用了两片CD4094级连的方式来构成,第一片的数据溢出信号LQS 连接到第二片的串行数据输入口。

嵌入式系统复习

嵌入式系统复习

第一章1.嵌入式系统的3个基本要素“嵌入性”、“专用性”、“电脑系统”。

2.嵌入式系统的实时分类非实时系统、软实时系统、硬实时系统。

3.嵌入式系统的硬件平台组成嵌入式系统的硬件平台是以嵌入式处理器为核心,由存储器、I/O单元电路、通信模块、外部设备等必要的辅助接口组成的。

4.嵌入式系统的3层和4层结构3层: 嵌入式系统硬件平台、嵌入式实时操作系统和嵌入式系统应用。

4层:嵌入式系统硬件平台、硬件抽象层、嵌入式实时操作系统和嵌入式系统应用。

5.什么是嵌入式系统?狭义上讲,嵌入式系统是指:“嵌入到对象体系中的、用于执行独立功能的专用电脑系统”。

定义为以应用为中心,以微电子技术、控制技术、电脑技术和通讯技术为基础,强调硬件软件的协同性与整合性,软件硬件可剪裁的,适应应用系统对功能、可靠性、成本、体积、功耗和应用环境有等严格要求的专用电脑系统。

广义上讲,但凡带有微处理器的专用硬件系统都可以称为嵌入式系统。

6.什么是硬件抽象层HAL,它有什么功能?硬件抽象层通过接口向操作系统以及应用程序提供对硬件进行抽象后的服务。

硬件抽象层一般应包含相关硬件的初始化、数据的输入输出操作、硬件设备的配置操作等功能。

7.硬件抽象层的定义和代码设计应该具有哪些特点?1.硬件抽象层具有与硬件的密切相关性;2.硬件抽象层具有与操作系统的无关性;3.接口定义的功能应包含硬件或系统所需硬件支持的所有功能;4.定义简单明了,太多接口函数会增加软件模拟的复杂性;5.可测性的接口设计有利于系统的软硬件测试和集成。

8.嵌入式系统的应用领域。

工业过程控制、网络通信设备、消费电子产品、航空航天设备、军事电子设备和现代武器.第二章1、ARM的三种含义,常见的ARM芯片。

一个公司的名称、一类微处理器的通称、一种技术的名称。

常见的ARM芯片有ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore、Cortex 3、4、ARM微处理器的应用选型主要考虑哪些方面?1. ARM微处理器内核的选择2. 系统的工作频率3. 芯片内存储器的容量4.片内外围电路的选择5、存储器的“大端”格式、“小端”格式大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中;小端格式:数据的低字节存储在低地址中,而数据的高字节则存放在高地址中。

计算机三级嵌入式系统操作题(到详细解答)

计算机三级嵌入式系统操作题(到详细解答)

操作题(一)1、地铁进出站闸机的控制器以S3C2410芯片为核心,并外加其他功能电路来进行设计,其基本功能描述如下:a、闸机能够识别本地铁票务系统出售的IC卡。

能识别的IC卡有2种,一种是可预付费的"市民卡",另一种是地铁站内出售的"当次卡"。

b、乘客凭"市民卡"或"当次卡"刷卡进站。

若IC卡合法,则闸机打开,乘客通过后,闸机立即关闭;若IC卡不合法,闸机不打开,并进行声光报警。

声光报警5次后自动停止。

c、进站刷卡时,还需识别IC卡的种类。

若是"市民卡",在闸机打开之前,需读取卡中余额并显示在闸机的LED 显示器上,且把地铁站ID、进站时间写入卡中相应区域。

若是"当次卡",判断合法后直接打开闸机。

d、出站时,乘客需要根据所用的IC卡种类,来进行不同的操作。

若乘客用的是"市民卡",则需在闸机的刷卡器上刷卡,若乘客用的是"当次卡"则需要把卡投入闸机的投卡口中。

e、若乘客出站时刷的是"市民卡",闸机系统需读取存储在卡上的"市民卡"类别ID(注:"市民卡"类别分为普通卡、学生卡、老人卡)、地铁站ID、进站时间、余额等信息,根据这些信息来扣除费用,并在闸机的LED显示器上显示余额及本次扣费额,若是学生卡或老人卡,还要用声音播报出"市民卡"类别,然后,打开闸机,乘客通过后立即关闭闸机。

f、若乘客出站时用的是"当次卡",判断合法后即把闸机打开,乘客出去后立即关闭。

根据上述功能要求的描述,请完善下面的叙述(程序)和回答有关的问题。

(注意:完善程序或回答问题所需的寄存器格式见题后的附录)(1)闸机控制器的硬件平台设计时,除了需要设计最小硬件系统(包括:微处理器、 ___【1】____电路、时钟电路、复位电路、存储器、JTAG接口电路)外,还必须设计IC卡读写电路、闸门电机驱动电路、声音提示及声光报警电路、LED显示接口电路等。

嵌入式系统实验——定时器代码

嵌入式系统实验——定时器代码
#include "register_variant.h"
#define LED_CS2(*((volatile unsigned short *)(0x10300000)))
#define LED_CS3(*((volatile unsigned short *)(0x10400000)))
#define LED_CS4(*((volatile unsigned short *)(0x10500000)))
{
LED_CS4=NUM;
a4=NUM/1000;
a3=(NUM%1000)/100;
a2=(NUM%100)/10;
a1=NUM%10;
LED_CS2 = a[a4]+(a[a3]<<8); //
LED_CS3 = a[a2]+(a[a1]<<8); //
if (NUM==9999)
{NUM=0;}
//Delay(10);
break;
case 0x02:
OIER = 0x02;//pause time
break;
case 0x04:
NUM= 0x00;//clear time
LED_CS2 =0x4040;
LED_CS3 = 0x4040;
break;
default : break;
}
}
}
#defineOSMR1(*(volatile unsigned long *)(0x40a00004))
#defineOSMR2(*(volatile unsigned long *)(0x40a00008))
#defineOSMR3(*(volatile unsigned long *)(0x40a0000c))

想成为嵌入式程序员应知道的0x10个基本问题

想成为嵌入式程序员应知道的0x10个基本问题

想成为嵌入式程序员应知道的0x10个基本问题想成为嵌入式程序员应知道的0x10个基本问题: 预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

3) 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

4) 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。

记住,第一印象很重要。

2 . 写一个\标准\宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) ? (A) : (B)) 这个测试是为下面的目的而设的:1) 标识#define在宏中应用的基本知识。

这是很重要的。

因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

2)三重条件操作符的知识。

这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

3) 懂得在宏中小心地把参数用括号括起来4) 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?least = MIN(*p++, b); 3. 预处理器标识#error的目的是什么?如果你不知道答案,请看参考文献1。

这问题对区分一个正常的伙计和一个书呆子是很有用的。

只有书呆子才会读C语言课本的附录去找出象这种问题的答案。

计算机三级嵌入式要点及试题总结

计算机三级嵌入式要点及试题总结

计算机三级嵌⼊式要点及试题总结要点嵌⼊式系统及三要素定义:以应⽤为中⼼、以计算机技术为基础、软件硬件可裁剪、适应应⽤系统对功能、可靠性、成本、体积、功耗严格要求的专⽤计算机系统。

简单定义:嵌⼊到对象体系中的专⽤计算机系统。

三要素:嵌⼊式系统的三个基本要素是嵌⼊性、专⽤性与计算机系统。

(1)嵌⼊性是把软件嵌⼊到Flash存储器中,(2)专⽤性是指针对某个具体应⽤领域和场合,量体裁⾐式的定制适⽤该场合的专⽤系统,(3)计算机系统是指必须具有计算机系统的组成,核⼼是计算机系统。

三个要素决定了嵌⼊式系统是嵌⼊到对象体系中的⼀种专⽤的计算机系统。

嵌⼊式系统設計与开发原则与步驟1.設計与开发原則既然嵌⼊式系统是嵌⼊到对象体系中的专⽤的计算机系统,因此嵌⼊式系统设计的基本原则:物尽其⽤。

这⼀原则表明,嵌⼊式系统的硬件和软件都必须⾼效率地设计,量体裁⾐、去除冗余,以最⼩成本实现更⾼的性能,同时尽可能采⽤⾼效率的设计算法,以提⾼系统的整体性能,换句话说同,“物尽其⽤”就是“够⽤就好”,以最⾼性价⽐来设计嵌⼊式应⽤系统。

2、设计与开发步骤嵌⼊式系统的设计步骤包括需求分析、体系结构设计、硬件设计,软件设计,执⾏机构设计、系统集成和系统测试。

各个阶段之间往往要求不断的修改,直⾄完成最终设计⽬标。

ARM存储模式关于存储模式:⼤端模式和⼩端模式,靠GPE8(ENDIAN)⾼低电平决定,⾼电平⼤端模式,低电平⼩端模式。

让GPE8⼯作于功能1模式控制。

掌握⼤⼩端模式存储结构。

已知⼀个32位的⼀个字0x87654321,存放在内存0x12000004~0x12000007中,指出对于⼤端模式和⼩端模式下,字节0x65存放的地址。

ARM指令流⽔线关于指令流⽔线:ARM采⽤指令流⽔线技术。

不同内核指令流⽔线的级数不同。

采⽤指令流⽔线的作⽤是提⾼指令执⾏效率。

有3、5、6、7、8级不等。

对于⼀个具有1条8级指令流⽔线的ARM处理器,假设每1级所需要的时间为1ns,求这种ARM处理器执⾏4000条指令最快所需要的时间。

嵌入式实验 中断实验报告

嵌入式实验 中断实验报告

嵌入式实验报告中断实验报告指导教师:高金山实验者:13410801 房皓13410802 张耀荣一、实验目的:1.理解中断向量表的结构2.理解中断处理的过程3.学习编写中断处理程序的方法二、实验要求:1.修改源程序,通过中断方式响应按键,当1-16键按下时,数码管显示0-F。

2.提高内容:以FIQ方式,替代IRQ方式,实现按下任何一个键,数码管显示按键号的功能。

三、实验内容:1.设计主程序,使8个LED以一定的时间间隔从右到左依次点亮,循环显示;(实验一的内容)2.当有键按下时,在七段数码管上,显示对应的16个键盘编码值 0-9 a-f(实验二、三的内容)四、程序编辑:;boot.sIMPORT postDelayIMPORT osStack;IMPORT post_initStackIMPORT init_StackIMPORT post_initGpioIMPORT post_initMemIMPORT post_initKeyIMPORT dummyOsIMPORT FIQ_HandlerIMPORT ICMRIMPORT init_ICMRIMPORT FIQIMPORT init_FIQ;IMPORT PSSRAREA boot ,CODE ,READONLYENTRYB Reset_HandlerB Undefined_HandlerB SWI_HandlerB Prefetch_HandlerB DataAbort_HandlerNOPB Reset_HandlerB FIQ_HandlerUndefined_HandlerB Undefined_HandlerSWI_HandlerB SWI_HandlerPrefetch_HandlerB Prefetch_HandlerDataAbort_HandlerB DataAbort_HandlerIRQ_HandlerB IRQ_Handler ;Defined by yourself Reset_Handler;*************************;Check if run in the SDRAM;*************************MOV R0,PCCMP R0,#0x0000003CBNE Stack;**************************;Init Memory;**************************mov r14,pc;ldr pc,=init_Memoryldr pc,=post_initMem;**************************;Init Stack;************************** Stackmov r14,pcldr pc,=init_Stack;ldr pc,=post_initStack;**************************;Init Gpio;**************************mov r14, pcldr pc, =post_initGpio;***************************;Enable & Set Interrupt;***************************mrs r1, CPSRbic r1, r1,#0x40msr CPSR_c, r1ldr r1, =ICMRldr r2, =init_ICMRstr r2,[r1]ldr r1, =FIQldr r2, =init_FIQstr r2, [r1];****************************;Init Keypad;****************************mov r14,pcldr pc,=post_initKey;***************************;Power Manager Sleep Status Register;***************************;ldr r1, =PSSR;mov r2, #0x30;str r2, [r1];***************************;Loop;***************************ldr r0,=postDelaypostLoopsub r0,r0,#0x1cmp r0,#0x0bne postLoopldr pc,=dummyOsEND;handler_IRQ.sIMPORT IRQ_Function;IMPORT ICMREXPORT FIQ_HandlerAREA FIQ_Handler,CODE,READONLY;****************************SUB LR, LR, #0x4STMFD SP!,{R0-R12,LR}BL IRQ_FunctionLDR R0,=0x41500000; by gaoLDR R1,[R0] ;by gaoLDMFD SP!,{R0-R12,PC}^;*******************************END;keypad.c#include <stdio.h>#include "register_variant.h"#define LED_CS2 (*((volatile unsigned short int *)(0x10300000))) //LED1 and LED2#define LED_CS3 (*((volatile unsigned short int *)(0x10400000))) //LED3 and LED4#define KPDK_VALUE (*((volatile unsigned char *)(0x41500008)))//Direct Keypad#define KPMK_VALUE (*((volatile unsigned char *)(0x41500020)))//Matrix Keypad#define LED_CS4 (*((volatile unsigned char *)(0x10500000)))#define LED_VALUE (0xff)void IRQ_Function(void){char i,j; //j by gaounsigned short int kbd_buff;i = KPDK_VALUE;switch (i){case 0x40: //key-press 1LED_CS2 = 0x8079;break;case 0x02: //key-press 2LED_CS2 =0x8024;break;case 0x04: //key-press 3LED_CS2 = 0x8030;break;case 0x20: //key-press 4LED_CS2 =0x8019;break;default: kbd_buff=0x8F8F; break;}i = KPMK_VALUE ;switch (i){case 0x00: //key-press 5LED_CS2 =0x8012;break;case 0x01: //key-press 6LED_CS2 = 0x8002;break;case 0x02: //key-press 7LED_CS2 =0x8078;break;case 0x05: //key-press 8LED_CS2 =0x8000;break;case 0x10: //key-press 9LED_CS2 =0x8010;break;case 0x11: //key-press 10LED_CS2 = 0x4079;break;case 0x12: //key-press 11LED_CS2 =0x7979;break;case 0x15: //key-press 12LED_CS2 =0x2479;break;case 0x20: //key-press 13LED_CS2 =0x3079;break;case 0x21: //key-press 14LED_CS2 = 0x1979;break;case 0x22: //key-press * 15 LED_CS2 =0x1279;break;case 0x25: //key-press # 16 LED_CS2 =0x0279;break;default: break;}}//int i;void Delay(unsigned int x){unsigned int i, j, k;for (i =0; i <=x; i++)for (j = 0; j <0xff; j++)for (k = 0; k <0xff; k++);}void button_statusFetch(void){char i = 0;unsigned short int kbd_buff;i = KPDK_VALUE ;switch (i){case 0x40: //key-press 1 LED_CS2 = 0x8079;break;case 0x02: //key-press 2 LED_CS2 =0x8024;break;case 0x04: //key-press 3 LED_CS2 = 0x8030;break;case 0x20: //key-press 4 LED_CS2 =0x8019;break;default: kbd_buff=0x8F8F; break;}}void button_statusFetch1(void){char i = 0;//unsigned short int kbd_buff;i = KPMK_VALUE ;switch (i){case 0x00: //key-press 5 LED_CS2 =0x8012;break;case 0x01: //key-press 6 LED_CS2 = 0x8002;break;case 0x02: //key-press 7 LED_CS2 =0x8078;break;case 0x05: //key-press 8 LED_CS2 =0x8000;break;case 0x10: //key-press 9LED_CS2 =0x8010;break;case 0x11: //key-press 10LED_CS2 = 0x4079;break;case 0x12: //key-press 11LED_CS2 =0x7979;break;case 0x15: //key-press 12LED_CS2 =0x2479;break;case 0x20: //key-press 13LED_CS2 =0x3079;break;case 0x21: //key-press 14LED_CS2 = 0x1979;break;case 0x22: //key-press * 15 LED_CS2 =0x1279;break;case 0x25: //key-press # 16 LED_CS2 =0x0279;break;default: break;}}void dummyOs(void){//int led_sharp;int temp=~0;int i;LED_CS2 = temp;LED_CS3 = temp;while(1){LED_CS4 = 0xff;for (i = 0; i < 8; i++){LED_CS4 = (LED_VALUE << i) -1;Delay(5);}//button_statusFetch();//Delay(10);// button_statusFetch1();// Delay(10);}}五、实验结果:程序运行时,实验箱上的八个LED灯在自左向右闪烁,当按下键盘上的按钮时,七段数码管吗会显示出对应的编码六、实验总结:通过本次实验,我锻炼了自己的操作能力,加深了对理论知识的理解,并对对中断工作方式有了初步的认识,理解了通过IRQ和FIQ两种不同的中断方式控制程序的运行的方法。

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

约定:1) 下面的测试题中,认为所有必须的头文件都已经正确的包含了2)数据类型char 一个字节1 byteint 两个字节2 byte (16位系统,认为整型是2个字节)long int 四个字节4 bytefloat 四个字节4 byetdouble 八个字节8 bytelong double 十个字节10 bytepointer 两个字节2 byte(注意,16位系统,地址总线只有16位) 第1题: 考查对volatile关键字的认识#include<setjmp.h>static jmp_buf buf;main(){volatile int b;b =3;if(setjmp(buf)!=0){printf("%d ", b);exit(0);}b=5;longjmp(buf , 1);}请问,这段程序的输出是(a) 3(b) 5(c) 0(d) 以上均不是第2题:考查类型转换main(){struct node{int a;int b;int c;};struct node s= { 3, 5,6 };struct node *pt = &s;printf("%d" , *(int*)pt);}这段程序的输出是:(a) 3(b) 5(c) 6(d) 7第3题:考查递归调用int foo ( int x , int n){int val;val =1;if (n>0){if (n%2 == 1) val = val *x;val = val * foo(x*x , n/2);}return val;}这段代码对x和n完成什么样的功能(操作)?(a) x^n (x的n次幂)(b) x*n(x与n的乘积)(c) n^x(n的x次幂)(d) 以上均不是第4题:考查指针,这道题只适合于那些特别细心且对指针和数组有深入理解的人main(){int a[5] = {1,2,3,4,5};int *ptr = (int*)(&a+1);printf("%d %d" , *(a+1), *(ptr-1) );}这段程序的输出是:(a) 2 2(b) 2 1(c) 2 5(d) 以上均不是第5题:考查多维数组与指针void foo(int [][3] );main(){int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}}; foo(a);printf("%d" , a[2][1]);}void foo( int b[][3]){++ b;b[1][1] =9;}这段程序的输出是:(a) 8(b) 9(c) 7(d)以上均不对第6题目:考查逗号表达式main(){int a, b,c, d;a=3;b=5;c=a,b;d=(a,b);printf("c=%d" ,c);printf("d=%d" ,d);}这段程序的输出是:(a) c=3 d=3(b) c=5 d=3(c) c=3 d=5(d) c=5 d=5第7题:考查指针数组main(){int a[][3] = { 1,2,3 ,4,5,6};int (*ptr)[3] =a;printf("%d %d " ,(*ptr)[1], (*ptr)[2] );++ptr;printf("%d %d" ,(*ptr)[1], (*ptr)[2] ); }这段程序的输出是:(a) 2 3 5 6(b) 2 3 4 5(c) 4 5 0 0(d) 以上均不对第8题:考查函数指针int *f1(void){int x =10;return(&x);}int *f2(void){int*ptr;*ptr =10;return ptr;}int *f3(void){int *ptr;ptr=(int*) malloc(sizeof(int));return ptr;}上面这3个函数哪一个最可能引起指针方面的问题(a) 只有f3(b) 只有f1 and f3(c) 只有f1 and f2(d) f1 , f2 ,f3第9题:考查自加操作(++)main(){int i=3;int j;j = sizeof(++i+ ++i);printf("i=%d j=%d", i ,j);}这段程序的输出是:(a) i=4 j=2(b) i=3 j=2(c) i=3 j=4(d) i=3 j=6第10题:考查形式参数,实际参数,指针和数组void f1(int *, int);void f2(int *, int);void(*p[2]) ( int *, int);main(){int a;int b;p[0] = f1;p[1] = f2;a=3;b=5;p[0](&a , b);printf("%d\t %d\t" , a ,b);p[1](&a , b);printf("%d\t %d\t" , a ,b); }void f1( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;}void f2( int* p , int q){int tmp;tmp =*p;*p = q;q= tmp;}这段程序的输出是:(a) 5 5 5 5(b) 3 5 3 5(c) 5 3 5 3(d) 3 3 3 3第11题:考查自减操作(--)void e(int );main(){int a;a=3;e(a);}void e(int n){if(n>0){e(--n);printf("%d" , n);e(--n);}}这段程序的输出是:(a) 0 1 2 0(b) 0 1 2 1(c) 1 2 0 1(d) 0 2 1 1第12题:考查typedef类型定义,函数指针typedef int (*test) ( float * , float*)test tmp;tmp 的类型是(a) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments)Pointer to function of having two arguments that is pointer to float(b) 整型(c) 函数的指针,该函数以两个指向浮点数(float)的指针(pointer)作为参数(arguments),并且函数的返回值类型是整型Pointer to function having two argument that is pointer to float and return int(d) 以上都不是第13题:数组与指针的区别与联系main(){char p;char buf[10] ={ 1,2,3,4,5,6,9,8};p = (buf+1)[5];printf("%d" , p);}这段程序的输出是:(a) 5(b) 6(c) 9(d) 以上都不对第14题: 考查指针数组的指针V oid f(char**);main(){char * argv[] = { "ab" ,"cd" , "ef" ,"gh", "ij" ,"kl" };f( argv );}void f( char **p ){char* t;t= (p+= sizeof(int))[-1];printf( "%s" , t);}这段程序的输出是:(a) ab(b) cd(c) ef(d) gh第15题:此题考查的是C的变长参数,就像标准函数库里printf()那样,这个话题一般国内大学课堂是不会讲到的,不会也情有可原呵呵,#include<stdarg.h>int ripple ( int , ...);main(){int num;num = ripple ( 3, 5,7); printf( " %d" , num);}int ripple (int n, ...){int i , j;int k;va_list p;k= 0;j = 1;va_start( p , n);for (; j<n; ++j){i = va_arg( p , int);for (; i; i &=i-1 )++k;}return k;}这段程序的输出是:(a) 7(b) 6(c) 5(d) 3第16题:考查静态变量的知识int counter (int i){static int count =0;count = count +i;return (count );main(){int i , j;for (i=0; i <=5; i++)j = counter(i);}本程序执行到最后,j的值是:(a) 10(b) 15(c) 6(d) 7详细参考答案第1题: (b)volatile字面意思是易于挥发的。

这个关键字来描述一个变量时,意味着给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它"容易挥发"的。

这是因为这个变量可能一个寄存器,直接与外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程改变了.volatile 不会被编译器优化影响,在longjump 后,它的值是后面假定的变量值,b 最后的值是5,所以5被打印出来.setjmp : 设置非局部跳转/* setjmp.h*/Stores context information such as register values so that the lomgjmp function can return control to the statement following the one calling setjmp.Returns 0 when it is initially called.Lonjjmp: 执行一个非局部跳转/* setjmp.h*/Transfers control to the statement where the call to setjmp (which initializedbuf) was made. Execution continues at this point as if longjmp cannot return the value 0.A nonvolatile automatic variable might be changed by a call to longjmp.When you use setjmp and longjmp, the only automatic variables guaranteed to remain valid are those declared volatile.Note: Test program without volatile qualifier (result may very)更详细介绍,请参阅C语言的setjmp和longjmp第2题: (a)结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的。

相关文档
最新文档