嵌入式复习

Posted by XDong on June 21, 2022

嵌入式复习

第1章

什么是嵌入式系统

嵌入到对象体系中的、用于执行独立功能的专用计算机系统

第2章

处理器模式

  • 用户模式
  • 系统模式
  • 管理模式
  • 外部中断模式
  • 快速中断模式
  • 数据访问终止模式
  • 未定义指令终止模式

第3、4章

编写程序段:B卷7题

1
2
3
4
5
6
    AREA example, CODE, READONLY
    ENTRY
    CMP R3, R4
    MOVHI R1, R5, LSR#1
    ADDLS R1, R5, 5
    END

编写程序段:B卷8题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    AREA BlockData, DATA, READWRITE
src DCD 1,2,3,4,5
dst DCD 0,0,0,0,0
number EQU 5*4
    AREA text, CODE, READONLY
    ENTRY
start
    LDR R4, =src    ;加载源数组首地址
    LDR R5, =dst    ;加载目的数组首地址
    MOV R3, #number ;取出数组的总长度
data_copy
    LDR R2, [R4]    ;加载当前源地址的数字
    STR R2, [R5]    ;将当前数字的总长度
    ADD R4, #4
    ADD R5, #4
    CMP R1, #number
    BEQ stop
    ADD R1, #4
    B   data_copy
stop
    END

混合编译应用:A卷6题

1
2
3
4
5
6
7
8
9
#include <stdio.h>
extern void str_copy(char *str1, char *str2);
int main() {
    const char *source = "Hello World!";
    char des[20];
    strcopy(source, des);
    printf("des is %s\n", des);
    return 0;
}
1
2
3
4
5
6
7
8
9
    AREA copy, CODE, REANONLY
    EXPORT str_copy
str_copy
    LDRB R2, [R0], #1
    STRB R2, [R1], #1
    CMP  R2, #0
    BNE  str_cpy
    MOV  PC, LR
    END

如何实现汇编源程序和C语言源程序之间的数据互访

  1. 在C语言中内嵌汇编指令
  2. 在汇编中使用C程序全局变量
  3. C程序中调用汇编的函数(EXPORT)
  4. 在汇编程序中调用C的函数(EXPORT)

第5章

GPIO程序:B卷9题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define GPFCON(*(volatile unsigned *)0x56000050)
#define GPFDAT(*(volatile unsigned *)0x56000054)
#define GPFUP(*(volatile unsigned *)0x56000058)
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++)
}
int Ledlamp() {
    int i;
    GPFUP &=0xffffff3f;  // 使能上拉F7 F6
    GPFCON &= 0x0fff;    // 复位F7 F6
    GPFCON |= 0x5000;    // 设置F7 F6为输出口
    while (1) {
        GPFDAT = 0x3f;
        Delay(100)
        GPFDAT = 0xff;
        Delay(70);
    }
    return 0;
}
1
2
3
4
5
6
AREA |DATA|, CODE, READONLY
ENTRY
LDR r13, =0x1000
IMPORT Ledlamp
B Ledlamp
END

UART的工作原理和特点

UART以异步方式发送数据,在UART通信中,两个UART直接相互通信,发送UART将来自CPU等控制设备的并行数据转换为串行形式,并将其串行发送到接收UART,接收UART然后将串行数据转换回接收设备的并行数据

特点:串行、异步、数据帧可编程、只是用两根电线、不需要时钟信号

UART在接收数据时能够识别哪些传输错误

  1. 溢出错误
  2. 奇偶校验错误
  3. 帧错误
  4. 通信中断

第7、8、9章

什么是Bootloader

Bootloader程序是在操作系统内核运行之前运行的小程序,通过这段小程序可以初始化系统硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境

Bootloader主要功能

  1. 初始化系统硬件设备
  2. 建立内存空间的映射图
  3. 将系统的软硬件带到一个合适的状态,为最终调用操作系统内核准备好正确的环境

内核移植步骤

  1. 内核修改:1.解压内核源码;2.修改Makefile;3.修改目标板输入时钟;4.修改MTD分区;5.配置YAFFS2文件系统的补丁
  2. 内核配置
  3. 内核编译

设备驱动程序的功能

  1. 对设备初始化和释放
  2. 把数据从内核传送到硬件和从硬件读取数据
  3. 读取应用程序传送给设备文件的数据和回送应用程序的数据
  4. 检测和处理设备出现的错位

设备驱动分类

  • 字符设备
  • 块设备
  • 网路设备

一些提示

批量数据加载/存储指令

  • IA
  • IB
  • DA
  • DB
  • FD:满递减堆栈
  • ED:空递减堆栈
  • FA:满递增堆栈
  • EA:空递增堆栈

异常

当异常发生,CPU进入相应的异常模式时,以下工作是由CPU自动完成的:

  1. 在异常模式的R14中保存前一工作模式的下一条即将执行的指令地址;
  2. 将CPSR的值复制到异常模式的SPSR中;
  3. 将CPSR的工作模式设为该异常模式对应的工作模式;
  4. 令PC值等于这个异常模式在异常向量表中的地址,即跳转去执行异常向量表中的相应指令;

从异常工作模式退回到之前的工作模式时,需要由软件来完成以下工作:

  1. 将异常模式的R14减去一个适当的值(4或8)后赋给PC寄存器;
  2. 将异常模式SPSR的值赋给CPSR;