Cortex-M7——内核及汇编
小狼@http://blog.csdn.net/xiaolangyangyang
1、Cortexv8-M特点
- 用于ARMv8-M的TrustZone/系统范围安全的基础;
- 用于可扩展性的协处理器接口;
- 用于任务隔离的内存保护单元(MPU);
- DSP扩展;
- 单精度浮点单元。
2、CortexV8-M知识点汇总
1、模式及特权
特权模式有什么特权:部分系统寄存器只能在特权模式下访问,如systick寄存器;mpu可以指定特权模式才能访问的地址范围
2、M33什么场景自动压栈,压栈内容、压栈位置
3、M33中断向量表(原始向量表中只有异常向量,没有中断向量)
4、中断系统(NVIC)
5、自动压栈内容
XPSR、PC、LR、R12、R3、R2、R1、R0
6、手动出发PendSV中断
ICSR第28位(PendSV悬起寄存器)写1
7、MSP和PSP怎么切换的?
MSP用于OS内核和异常处理,PSP用于应用任务
异常中断模式下自动切换到MSP,线程模式下使用CONTROL寄存器进行切换
CONTROL[1]=0:MSP
CONTROL[1]=1:PSP
8、M33工作模式切换
CONTROL[0]=0:特权模式
CONTROL[0]=1:用户模式
9、M33复位状态
复位时处于线程模式+特权级,主堆栈+MSP
10、FREERTOS任务切换时机:
a)任务强制切换:taskYIELD()
b)中断强制切换:portYIELD_FROM_ISR()
c)systick中断中进行切换
以上切换方法都是pending一个PendSV中断
11、PendSV用于线程切换,在进入PendSV处理函数时:
a)xPSR、PC、LR、R12、R0~R3已经在处理栈中被保存;
b)处理模式切换到线程模式;
c)栈是主堆栈。
12、调试全局变量:
g_fault_context、g_assert_lr、g_assert_contex、g_assert_err、g_assert_file、g_assert_line
13、XPSR、PRIMASK、FAULTMASK、BASEPRI、CONTROL寄存器
14、具体压栈出栈过程,怎么为参数、局部变量预留栈空间?
软件压栈:
a)进入函数后,首先将LR压栈(如果没有调用子函数,则LR不压栈);
b)参数大于4个时,调用函数将多余的参数压入本函数栈帧供被调用函数使用;
c)局部变量较少时,R寄存器处理,不开辟栈空间,变量较多时,调整SP指针预留空间;
d)函数退出时出栈,如果局部变量较多使用了栈,先调整SP释放变量预留空间;
e)函数退出时将栈中的LR值出栈到PC(如果没有调用子函数,直接将LR赋值给PC)。
硬件压栈:
a)中断和异常才会进行硬件自动压栈,压栈顺序:xPSR、PC、LR、R12、R0~R3;
b)硬件压栈是在进入异常前进行,所以压栈的LR寄存器是原LR,并非进入异常后的LR值(进异常后LR=EXC_RETURN);
c)异常退出时,执行# bx R14指令,硬件根据R14判断出栈到MSP还是PSP,恢复CPU模式,出栈内容与压栈内容相同。
15、代码中的异常处理(assert、全局变量)
进异常时的全局变量:g_fault_context
进assert的全局变量:g_assert_contex
查看线程状态:g_tm_block
16、模式及特权(配合FreeRTOS+CONTROL),分析几个函数
vStartFirstTask:执行svc指令,陷入svc异常
arm_svc_handler:将栈指针改为psp,取第一个线程栈指针赋值给psp(栈中有pc指针)
arm_pendsv_handler:进行切换线程
SysTick_Handler:systick+1,检查是否需要进行线程切换,如果需要,触发pendsv中断
vPortYield:触发pendsv中断
17、ISR后缀函数意义,信号量底层实现
不带ISR的函数如等待消息,在没有消息时,函数会阻塞,切换到其他线程;
带ISR的函数在中断中使用,不允许阻塞,如在中断中等待msg,在没有消息时,函数直接返回失败。
18、CMSIS的HAL、LL、Driver层区分
19、内存越界怎么debug
3、cortex-m7内核寄存器
4、复位向量
当处理器复位之后,会从存储器中读取两个数据,0x0000_0000->MSP,0x0000_0004->PC,__isr_stack_top__是连接脚本里的栈顶地址。
STM32L5 入门课程系列(一)从Cortex-M33内核认识TrustZone
STM32L5 入门课程(二)STM32L5的系统新架构
STM32L5 入门课程系列(三)TrustZone环境下新的用户编程模型
STM32L5 入门课程系列(四)STM32CubeMX:支撑TZ应用
Cortex-M0系统滴答定时器Systick详解
CortexM0中断控制和系统控制(四)
Cortex-M3双堆栈MSP和PSP
cortex-m3 操作模式 寄存器组 异常类型 堆栈 中断
ARM的特权模式是啥?异常模式是啥?