一、复习C语言

| 内存段 | 存什么东西 | 读写权限 | 谁管理 |
|---|---|---|---|
| code 代码段 | 函数指令、机器码 | 只读 / 执行 | 系统 |
| rodata (常量区) | 整型、字符串等各种常量、switch跳转表 | 只读 | 系统 |
| data(数据段) | 初始化不为0的全局及静态变量 | 读写 | 系统 |
| BSS 段 | 未初始化及初始化为0的全局及静态变量 | 读写 | 系统自动清零 |
| heap 堆(2.8/9G左右) | malloc/new 动态内存(程空间中其他部分使用剩余的空间使用时需要手动申请及释放) | 读写 | 程序员自己 |
| stack 栈(8M) | 局部变量、函数参数、函数返回地址 | 读写 | 系统自动 |
| map(内存映射段) | 映射一些库(函数)的地址(库位置/函数偏移地址) | 读写 | 系统 |
| 内核空间(1G) | kernel操作系统核心功能 | 受保护 | 内核 |
满减栈、空减栈

进程和线程区别
进程:开辟空间大(进程空间全部独立) 开辟/调度效率低 通信复杂
线程:开辟空间小(只有栈是独立的) 开辟/调度效率高 通信简单
二、中断


- cortex-a7:CPU 核心,负责执行指令、处理中断
- GIC:中断控制器,是所有外设中断的 "总调度器"
- 外设模块:GPIO DR、UART、定时器、IIC、ADC 等,产生中断信号
- req/ack:CPU 与 GPIO 寄存器的读写握手
- CP15 就是 ARM 用来配置系统的专用协处理器。

| 寄存器名字 | 英文全称 | 属于哪个模块 | 核心作用(必须记住) |
|---|---|---|---|
| SCTLR | System Control Register | CP15 c1 | 系统总控制寄存器 1. bit13(V) :中断向量表位置选择 ・V=0 → 可用 VBAR 映射到 RAM ・V=1 → 固定 0xFFFF00002. bit0 :MMU 开关3. bit12:指令缓存开关 |
| VBAR | Vector Base Address Register | CP15 c12 | 中断异常向量表基地址寄存器 1. 存放 RAM 中断向量表的起始地址2. 只有 SCTLR.V=0 时才生效3. 让 CPU 去 RAM 找中断函数 |
| CBAR | Configuration Base Address Register | CP15 c15 | GIC 配置基地址寄存器 1. 保存 GIC 中断控制器的物理基地址2. 读取它 → 才能找到 GICD 和 GICC3. 是配置中断的第一步 |
| GICD_CTLR | GIC Distributor Control Register | GICD | GIC 分发器总开关1. 全局使能 / 关闭所有中断2. 写 1 → 开启 GIC 分发器3. 不打开,所有外设中断都无效 |
| GICC_CTLR | GIC CPU Interface Control Register | GICC | CPU 中断接口总开关1. 让 CPU 能接收 GIC 发来的中断信号2. 写 1 → 开启 CPU 接口3. 和 GICD_CTLR 必须同时打开 |
