注:以下答案仅供参考,有些可能是错的,对此造成的考试挂科后果概不负责。
若发现有问题或错误去群里讨论。还有部分简答题没做完,有谁知道的也去群里共享下。
ARM开发基础期中试卷
一、选择题(蓝色标注为不确定) A C B C A D A A A D C D B A B
二、简答题
1.答:哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,冯诺依曼结构是一种将程序指令存储和数据存储合并在一起的存储结构。CortexM3系列采用哈佛结构。
2.答:小端格式中,一个字中最低地址的字节为该字的最低有效字节,最高地址的字节为最高有效字节。大端格式中,一个字中最低地址的字节为该字的最高有效字节,而最高地址的字节为最低有效字节。(参考PPT课件第三章)
3.答:谁参考下上次做的ARM实验二IAP给出答案。
4.答:内置外设都有若干个输入输出引脚,一般这些引脚的输出脚位都是固定不变的,为了让设计工程师可以更好地安排引脚的走向和功能,在 STM32中引入了外设引脚重映射的概念,即一个外设的引脚除了具有默认的脚位外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的脚位。
三、分析题 1.解:
USARTDIV = fPCLK/(16*波特率) = 234.375
转换成16位二进制是0000 1110 1010 0110(好像有问题,不知道正确不)
2.解:
startup_stm32f10x_hd.s
大容量芯片启动所用的汇编源文件,该文件已配置好初始状态,以及中断向量表。
main.c
例程的主函数
stm32f10x_gpio.c
ST公司的标准库,包含了关于对通用IO口设置的函数
stm32f10x_rcc.c
ST公司的标准库,包含了对复位、时钟的控制函数
core_cm3.c
是关于整个CortexM3平台的系统函数及定义,由ARM公司给出
system_stm32f10x.c 包含对系统时钟的设置
四、设计题 1.解:(其中的空间大小不知道是存储空间大小还是地址空间大小,我给出的是地址空间大小,不知道算对了没)
PERIPHERALS:0x4000 0000 ~ 0x43FF FFFF 地址空间大小64M
功能:外设的存储器映射,对该区进行操作即对响应的外设进行操作。
SRAM:0x2000 0000 ~ 0x23FF FFFF 地址空间大小64M 功能:运行时临时存放代码的地方
Flash:0x0800 0000 ~ 0x0801 FFFF 地址空间大小128K 功能:存放代码的地方
SYSTEM MEMORY:0x1FFF F000 ~ 0x1FFF F7FF 地址空间大小2K 功能:STM32出厂时自带的ISP用的自举程序,不能写或擦除。
OPTION BYTES:0x1FFF F800 ~ 0x1FFF F9FF 地址空间大小0.5K 功能:存储芯片的配置信息及对主存储块的保护信息。
2.解:
不会做。。。
嵌入式Linux期中试卷
一、填空题
1.sudo apt-get -d install xchat(或许可以直接写成sudo apt-get -d install xchat,-d参数说是只下载不安装,另有人说是sudo apt-get source xchat)
2.sudo shutdown -r +30 3./home/linux,当前用户主目录 4.754
5.info man
6.ln -s file.c fs 7.输入 命令
8.应用 计算机技术 9.编译 链接 10.解释器
二、名词解释
1.交叉编译:在一中平台环境中运行的编译程序能编译出在另一种平台环境中运行的代码,则称该编译器支持交叉编译。
2.网络端口号:标志网络通信中应用层中的进程,实现端到端的链接。 3.文件描述符:在形式上是一个非负整数,也是一个索引值,指向内核为每个进程所维护的该进程打开文件的记录表,当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
4.Make工程管理器:是一个自动编译管理器,它通过读取Makefile文件的内容来执行大量的编译工作。
三、简答题
1.答:常用的进程通信方式及其特点:
(1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
(2)信号(Signal):信号是在软件层次上对中断机制的一种模拟。它是比较复杂的通信方式。用于通知接受进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求在效果上可以说是一样的。
(3)消息队列:消息队列是消息的链接表,包括Posix消息队列、systemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。
(4)共享内存:它使得多个进程可以访问同一块内存空间,不同进程可以即时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。
(5)信号量:主要作为进程间以及同一进程不同线程之间的同步手段。 (6)套接字(Socket):这是一种更为一般的进程间通信机制,它可用于不同机器之间的进程通信,应用非常广泛。
2.答:进程与程序的区别:
(1)程序是静态的,进程是动态的,可认为是运行着的程序。 (2)进程具有生命周期,程序可作为软件资料长期存在。
(3)进程可以并发执行,程序不能。 (4)同一个程序可以对应多个进程。
3.答:连接关系有:
(1)一个信号可以连接到多个槽; (2)多个信号可以连接到一个槽; (3)一个信号可以和另一个信号相连; (4)连接可以被删除;
(5)信号和槽函数必须有相同的参数类型,这样才能成功连接。
4.答:常见传输层协议及特点:
(1)TCP协议:面向连接的可靠传输,基于字节流,自动重传丢失而当数据。
(2)UDP协议:无连接的不可靠传输,基于报文,不负责检查是否数据丢失和重传。
6.答:系统调用是能完成特定功能的子程序,当应用进程要求操作系统提供某种服务时,便调用具有相应功能的系统调用。库函数则是高级语言中提供的与系统调用相对应的函数(也有些库函数与系统调用无关),目的是隐藏访管指令的细节,使系统调用更为方便抽象,但要注意,库函数属于用户程序而非系统调用,是系统调用的上层。
7.答:7种模式:(1)用户模式(2)系统模式(3)中断模式(4)快速中断模式(5)管理模式(6)中止模式(7)未定义模式
2种状态:(1)ARM状态(2)Thumb状态
8.答:模块化程度高;源码公开;广泛的硬件支持;安全性及可靠性高;有很好的网络支持,与Unix完全兼容;多任务,多用户,多平台;支持很多文件系统。
9.答对于ARM核,可以且只能识别7种处理器异常,每种异常都对应一种ARM处理器模式,当发生异常时,ARM处理器就切换到相应的异常模式,并调用异常处理程序进行处理。
ARM核异常处理的一般过程是:
(1)保存异常返回地址到r14_(确切的说是当前PC); (2)保存当前CPSR到SPSR_;
(3)改写CPSR以切换到相应的异常模式和处理器状态(ARM状态); (4)禁止IRQ(如果进入FIQ则禁止FIQ);
(5)跳转到相应异常向量表入口(例如IRQ跳转到IRQ_Handler入口);
10.答:(1)linux几种快速清空文件内容的方法
几种快速清空文件内容的方法:
$ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename
$ echo “” > filename $ echo /dev/null > filename $ echo > filename $ cat /dev/null > filename
四、程序分析题
1.解:
输出结果:
info1 from child process_2 info1 from child process_1 info1 from parent process info2 from parent process
假设main函数主进程p0,在第一个if语句中的pid1=fork()执行后p0创建了子进程p1,p1直接睡眠3秒,主进程再在执行pid2=fork()时创建子进程p2,p2睡眠1秒,最后主进程调用两个wait等待有没有子进程结束退出,当然首先睡醒的是p2,然后就首先输出info1 from child process_2,输出后p2执行exit退出,当p1退出时主进程p0第一个wait成功返回,第二个wait继续等待是否还有子进程没退出,当p1睡醒后,输出info1 from child process_1后便直接执行exit退出(貌似第二个输出语句不可能打印出来),p1退出后,主进程p0第二个wait也成功返回,然后主进程p0再执行最后的两个输出语句info1 from parent process和info2 from parent process。(程序已经上机运行过,只要求写结果,不用写分析,分析是自己写的,应该是这样吧。。) 2.解:
这是参考上次做实验中的3.2标准I/O操作编程的,就改了个变量名,但运行可以,不知道老师给不给分。
#include
#define maxsize 256
main(int argc,char *argv[])
{
int pic1,pic2; //定义源图片文件和目的图片文件的文件描述符 char buff[maxsize]; //定义一次从文件读字符的最大数 int i;
if(argc!=3) //如果命令格式不正确 {
printf(\exit(1); }
//以只读的方式打开源文件 pic1=open(argv[1],O_RDONLY); if(pic1==-1) {
printf(\exit(1); }
pic2=open(argv[2],O_WRONLY|O_CREAT|O_APPEND);//以追加的方式创建目的文件
if(pic2==-1) {
printf(\exit(1); }
while(1) {
i=read(pic1,buff,maxsize); write(pic2,buff,i);
//如果读到的字节数不是希望的bufsize,结束文件读写 if(i!=maxsize) break; }
close(pic1); close(pic2); }
测试:事先在程序目录下存储一张测试图片picture1.jpg。
将该代码保存为piccopy.c在Ubuntu中编译:
gcc piccopy.c -o piccopy 运行:
./piccopy picture.1 picture2.jpg
运行结束后即复制了一张与picture1一样的图片picture2.jpg