美文网首页
2017-11-13

2017-11-13

作者: 习习xy | 来源:发表于2017-11-13 23:26 被阅读0次

    1.(填空)数据类型

    ARM处理器支持下列数据类型:

    Byte 字节,8位      Halfword 半字,16位(半字必须与2字节边界对齐);

    Word 字,32位(字必须与4字节边界对齐)。

    2.处理器模式

    ARM体系结构支持的处理器模式

    在软件控制下可以改变模式,外部中断或异常处理也可以引起模式发生改变。

    大多数应用程序在用户模式下执行。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源也不能改变模式,除非异常发生。这允许操作系统来控制系统资源的使用。

    除用户模式外的其他模式称为特权模式。特权模式是为了服务中断或异常,或访问保护的资源。它们可以自由的访问系统资源和改变模式。其中的5种被称为异常模式,即:FIQ IRQ 管理 中止 未定义。

    当特定的异常出现时,进入相应的模式。每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。

    剩下的模式是系统模式,不能由于任何异常而进入该模式,它与用户模式有完全相同的寄存器。然而它是特权模式,不受用户模式的限制。

    3.异常(问答)

      异常由内部或外部源产生并引起处理器处理一个事件,例如外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后原来的程序能够重新执行。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。

    (1)复位:处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行指令。

    (2)未定义指令异常:当ARM处理器执行处理器指令时,它必须等待任一外部处理器应答后,才能真正执行这条指令。若处理器没有响应,就会出现未定义指令异常。

    (3)软件中断异常(SWI):该异常由执行SWI指令产生,可使用此机制进行软件仿真。

    (4)预取中止(取指令存储器中止):若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。

    (5) 数据中止(访问数据存储器中止):若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。

    (6) 中断IRQ异常:当处理器的外部中断请求引脚有效,且CPSR中的I=0,产生IRQ异常。

    系统的外设可通过该异常请求中断服务。

    (7)快速中断FIQ异常:当处理器的外部中断请求引脚有效,且CPSR中的F=0,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。

    (8)异常优先级

    4.块复制寻址(语言描述,画图)

    (1)R0的内容传送到R9指向的位置,传送之后R9加一,指向下一位。R0占用32位地址,一次加4

    (2)R0传送之前加一,再将R0的内容传送到R9指向的位置,每传送一次加4.

    多寄存器指令映射:

    STMIB/STMFA:向上生长、增加、之前、满    LDMDA/LDMFA:向上生长、减少、之后、满

    STMIA/STMEA:向上生长、增加、之后、空    LDMDB/LDMEA:向上生长、减少、之前、空

    LDMIA/LDMFD:向下生长、增加、之后、满  STMDB/STMFD:向下生长、减少、之前、满

    LDMIB/LDMED:向下生长、增加、之前、空    STMDA/STMED:向下生长、减少、之后、空

    例:STMIA R9{R0,R1,R5}  R9向上生长,R9'之后增加

    STMFD R13!,{R2-R9};  存储寄存器到堆栈

        LDMFD R13!{R2-R9};  从堆栈恢复

    5.(简答)基于ARM的硬件启动程序一般包括:

    (1)分配中断向量表;(2)初始化存储器系统;(3)初始化各工作模式下的堆栈;

    (4)初始化有特殊要求的硬件模块;(5)初始化用户程序的执行环境;(6)切换处理器的工作模式;(7)调用主应用程序

    6. S3C2410A的存储器控制器提供访问外部存储器所需要的存储器控制信号。具有以下特性:

    (1)支持小/大端(通过软件选择)  (2)地址空间:每bank有128M字节(总共有8个banks,共1G字节)    (3)除bank0(只能是16/32位宽)之外,其他bank都具有可编程的访问大小(可以是8/16/32位宽)  (4)总共有8个存储器bank(bank0~bank7)

    (5)其中6个banks用于ROM,SRAM等  (6)剩下2个banks用于ROM,SRAM,SDRAM等  (7)7个固定的存储器bank(bank0~bank6)起始地址  (8)最后一个bank(bank7)的起始地址是可调整的  (9)最后两个bank(bank6~bank7)的大小是可编程的

    (10)所有存储器bank的访问周期都是可编程的  (11)总线访问周期可以通过插入外部等待来延长      (12)支持SDRAM的自刷新和掉电模式

    S3C2410A复位后,存储器的映射情况如下,bank6和bank7对应不同大小存储器时的地址范围:

    bank6地址                                    bank7地址

    2MB:起始(0X30000000)终止(0X301FFFFF)    起始(0X30200000)终止(0X303FFFFF)

    4MB:起始(0X30000000)终止(0X303FFFFF)      起始(0X30400000)终止(0X307FFFFF)

    8MB:起始(0X30000000)终止(0X307FFFFF)      起始(0X30800000)终止(0X30FFFFFF)

    16MB:起始(0X30000000)终止(0X30FFFFFF)    起始(0X31000000)终止(0X31FFFFFF)

    32MB:起始(0X30000000)终止(0X31FFFFFF)    起始(0X32000000)终止(0X33FFFFFF)

    64MB:起始(0X30000000)终止(0X33FFFFFF)    起始(0X34000000)终止(0X37FFFFFF)

    128MB:起始(0X30000000)终止(0X37FFFFFF)    起始(0X38000000)终止(0X3FFFFFFF)

    7.电源控制模式包括?              正常、慢速、空闲、掉电

    正常:正常运行模式;            慢速:不加PLL的低时钟频率模式;

    空闲:只停止CPU的时钟;        掉电:所有外设和内核的电源都切断了

    8.NAND Flash控制器的启动特点?

    (1)NAND Flash模式:支持读/擦除/编程NAND FLASH存储器(2)自动启动模式:系统复位后,启动代码被传送到Steppingstone中。传送完毕后,启动代码在Steppingstone中执行。(3)具备硬件ECC生成模块(硬件生成校验码,通过软件校验)(4)NAND Flash启动以后,4KB的内部SRAM缓冲器Steppingstone可以作为其他用途使用(5)NAND Flash控制器不能通过DMA访问,可以使用LDM/STM指令来代替DMA操作

    9慢速模式?不使用PLL,而使用外部时钟直接作为S3C2410A中的FCLK。在这种模式下,功耗大小仅取决外部时钟的的频率,与PLL无关。

    10掉电模式?电源管理模块断开内部电源。因此,除唤醒逻辑外,CPU和内部逻辑都不会产生功耗。激活掉电模式需要两个独立的电源,一个电源为唤醒逻辑供电;另一个为包括CPU在内的其他内部逻辑供电,并且这个电源的开、关可以控制。在掉电模式下,CPU和内部逻辑供电的第二电源将关断。

    11(填空)Vi编辑器的使用

    Vi有4种基本的工作模式:正常模式,插入模式,命令模式和可视模式。

    :q退出    :q!强行退出vi,不改写文件    :w存盘    :wq 存盘退出

    12.介绍makefile文件的编写格式

    (1)makefile中以“#”开始的行是注释行。

    (2)Makefile中最终要的是描述文件依赖关系的说明。一般格式是:target:components——表示依赖关系              TAB  rule——表示规则

    (3)clean 当用户键入“make clean”命令时,会执行clean后面的语句。对于上面的makefile,当用户键入“makeclean”命令时,会执行“rm-rf  *0  main”从而删除*0和main文件

    (4) makefile有三个非常有用的变量,分别是“$@”“$^”“$<”

       

    13.(简答)Bootloader的stage1通常包含以下步骤:

    (1)Bootloader 的第一阶段(Stage1)步骤:

    ①硬件设备初始化      ②为加载Bootloader的stage2准备RAM空间

    ③复制Bootloader的stage2到RAM空间中    ④设置好堆栈  ⑤跳转到stage2入口点

    (2)Bootloader的stage2通常包含以下步骤:

    ①初始化本阶段要使用的硬件设备    ②检测系统内存映射    ③将kernel映像和根文件系统映像从Flash读到RAM中        ④为内核设置启动参    ⑤调用内核

    14. ViVi程序架构            vivi代码包括arch init lib drivers和include几个主要目录。

    ①arch:该目录主要包括所有vivi所支持的目标板的子目录

    ②drivers:该目录包括引导内核需要的设备驱动程序

    ③init:该目录只含有main.c 和version.c两个文件,vivi将从main.c函数开始C语言的执行。

    ④lib:该目录包含一些平台的接口函数

    ⑤include:该目录是头文件的公共目录,该目录定义了目标系统相关的资源配置参数。

    15. file-operation结构的作用:

    一个设备驱动程序包括两个基本任务:执行系统调用和负责中断处理。而file-operation结构的每一个成员的名称都对应一个系统调用。在操作系统内部,外部设备的存取是通过一组固定入口点进行的,这些入口点由每个外设的驱动程序提供,由file-operation结构向系统说明,因此编写驱动程序的主要工作就是编写子函数,并填充file-operation的各个域。

    16.驱动程序的开发步骤:

    (1)对该驱动程序使用到的硬件寄存器进行初始化,包括中断寄存器。

    (2)初始化与设备相关的参数。一般来说,每个设备要定义一个设备变量,用来保存设备的相关参数。

    (3)注册设备(函数的作用)。Linux内核通过主设备号将设备驱动程序同设备文件相连。

    (4)注册设备使用的中断,注册中断使用的函数。

    (5)其他的一些初始化工作,比如给设备分配I/O,申请DMA通道等。

    如果设备的驱动程序使用如下的函数方式,那么设备驱动可以被动态地加载和卸载。

    module_init(device_init);                module_exit(device_exit);

    对于驱动程序的使用,有静态编译和动态编译两种。静态编译将设备的驱动程序添加到内核中,动态编译是指将设备驱动程序编译成驱动模块。

    17.若在/dev目录下没有相应的设备文件,就可用“mknod device_name.c主设备号从设备号”命令来创建一个设备文件,从而正确使用驱动模块。卸载驱动模块时,使用“rmmod device_driver”命令。删除设备文件使用“rm device_name”命令。建设被编译成驱动模块。

    18.开发linux应用程序的一般分为以下几个步骤:

    编写程序;编写makefile文件;编译程序;运行程序;将生成的可执行文件加入文件系统

    19.ARM处理中断步骤:

    (1)保存现场(2)模式切换(3)获取中断源(4)中断处理(5)中断返回,恢复现场

    20.自动启动模式的执行步骤:(1)完成复位 (2)如果自动启动模式使能,NAND Flash存储器的前4KB自动复制到Steppingstone内部缓冲器; (3)Steppingstone映射到nGCS0; (4)CPU在Steppingstone的4KB内部缓冲器中开始执行启动代码。

    21.Linux的移植?所谓Linux移植就是针对具体的目标平台对Linux做必要的改写后,安装到该目标平台并使其正确运行的过程。基本内容包括:

    (1)获取某一半杯的Linux内核源码;(2)根据具体的目标平台,对源码进行必要的改写,然后添加一些驱动,打造一款适合目标平台的新的操作系统;(3)对该系统进行针对目标平台的交叉编译,生成一个内核映像文件;(4)对该映像文件烧写、安装到目标平台中。

    22.Linux内核主要由5个子系统组成:进程调度子系统,内存管理子系统,虚拟文件子系统,网络接口子系统,进程间通信子系统。

    Linux内核的主要目录结构:(1)/arch:其中的子目录包含所有与硬件体系结构相关的内核移植代码,每一个目录都代表一种硬件平台,每种平台都应该包括以下几个部分:

    boot:包含启动内核所使用的部分或全部平台的相关代码。  kernel:包含支持体系结构特有的特征代码。  lib:包含存放体系结构特有的通用函数的实现代码  mm:包含存放体系结构特有的内存管理程序的实现。    mach-xxx:包含存放该处理器的移植代码。

    (2)/documentation:有关内核各部分的通用解释和注释(3)/drivers:设备驱动程序(4)/fs:所支持的各种文件系统的代码(5)/include:建立内核代码时头文件,与系统相关的头文件放置在include/linux子目录下(6)/init:内核初始化代码,内核从此目录下开始工作。(7)/ipc:内核进程间通信的代码(8)/kernel:主内核的代码,包括进程调度、定时器等(9)/lib:通用的库文件代码(10)/mm:内核的内存管理代码(11)/net内核的:网络相关代码(12)/scripts:用于配置内核的脚本文件。

    23.S3C2410A的I/O口工作原理:S3C2410共有117个多功能服用输入输出口(I/O口),分为8组PORTA~PORTH。PORT A 除了作为功能口外,它只作为输出口使用;其余的PORT B~PORT H都可以作为输入输出口使用。8组I/O口按照其位数的不同,可分为:

    ①1个23位的输出口(PORT A)    ②2个11位的I/O口(PORT B和PORT H)

    ③4个16位的I/O口(PORT C 、PORT D、PORT E、PORT G)  ④1个8位的I/O口(PORT F)

    1.嵌入式系统的特点:⑴硬软件一体化,集计算机技术、微电子技术和行业技术为一体⑵需要操作系统支持,代码小执行速度快⑶专用紧凑,用途固定,成本敏感⑷可靠性要求高⑸多样性,应用广泛,种类繁多    2.操作系统功能:处理器管理,存储器管理,设备管理,文件管理,用户接口      3.实时操作系统的特点:支持异步事件的响应;中断和调度任务的优先级机制;支持抢占式调度;确定的任务切换时间和中断延迟时间;支持同步

    4.板级支持包BSP完成的功能:①在系统启动时,对硬件进行初始化,比如对设备的中断、CPU的寄存器和内存区域的分配等进行操作;②为驱动程序提供访问硬件的手段,BSP就是为上层的驱动程序提供访问硬件设备寄存器的函数包。

    1.下面是实现LED1和LED2轮流闪烁的程序代码。

    void Main(void){

        int flag,i;

        Target_Init();//进行硬件初始化操作,包括对I/O口的初始化操作

        for(; ;){

              if(flag==0){

                for(i=0;i<1000000;i++);        //延时

                rGPGCON=rGPGCON&0xfff0ffff|0x00050000; //配置第8、第9位为输出引脚

                rGPGDAT=rGPGDAT&0xeff|0x200; //第8位输出为低电平,第9位输出为高电平                             

                for(i=0;i<10000000;i++);      //延时

                flag=1;

              }

              else{

                for(i=0;i<1000000;i++);        //延时

                rGPGCON=rGPGCON&0xfff0ffff|0x00050000; //配置第8、第9位为输出引脚

                rGPGDAT=rGPGDAT&0xdff|0x100; //第8位输出为高电平,第9位输出为低电平                           

                for(i=0;i<10000000;i++);      //延时

                flag=0;            }  }    } 

       

    相关文章

      网友评论

          本文标题:2017-11-13

          本文链接:https://www.haomeiwen.com/subject/xlgtvxtx.html