关于STM32-M3/M4的MSP和PSP MSP和PSP 的含义是Main_Stack_Pointer 和Process_Stack_Pointer,在逻辑地址上他们都是R13; 权威手册上说的很清楚PSP主要是在Handler的模式下使用,MSP主要在线程模式下使用(当然你在线程模式下也可以调用PSP,需要你做特殊的处理); 这意味着同一个逻辑地址,实际上有两个物理寄存器,一个...
其中MSP对应Main堆栈、PSP对应Process堆栈,那么如果我直接使用SP、R13呢,这个时候这么知道是PSP还是MSP?
如果使用了浮点功能,存在浮点上下文,那么内核也会自动将浮点相关的上下文内容压栈。由于浮点部分数据内容对我们通常的 Fault 调试没有太多帮助,这里不做赘述。进入异常前的 stack frame 压栈操作使用 MSP 还是 PSP,取决于当时内核的运行状态及其使用的堆栈。如果当时 CPU 运行于 Handler 模式,则使用 MSP 压栈 sta...
我们都知道,STM32 物理上有两个栈,一个是 PSP,一个是 MSP,在未使用操作系统的情况,一般只用一个 MSP。也就是说,不管是 main 函数,还是中断处理函数,都使用 MSP 保存上下文。 而如果使用了操作系统,一般会使用两个栈,中断用 MSP,任务用 PSP(实际操作的寄存器都是 SP,但可以通过特殊指令切换 SP 当前使用哪个...
MSP---main stack pointer—主堆栈指针 N: NVIC— Nested Vectored Interrupt Controller—嵌套向量中断控制器 NMI---不可屏蔽中断 O: OS---操作系统 OTG---On The Go—数据交换 P: PC---program counter—程序计数器 Periph---Peripherals—[pəˈrɪfər...
我的想法是,PSP各个任务使用或进程堆栈指针,内核使用MSP。 发生异常时,堆栈帧被推送到当前活动的堆栈指针,然后切换为使用MSP异常处理程序。在多任务系统中,如果调度程序导致异常,则此时您将更改PSP指向下一个任务的堆栈指针的位置,并从异常返回。然后,新堆栈指针的卸载将执行返回到下一个任务。 2018-10-30 11:49:...
60、串口中断TXE和TC的区别:其实很明显,一个是发送寄存器空标志,一个是发送完成标志。因为串口在发送的时候首先需要把发送寄存器中的数据移位到移位寄存器(影子寄存器)后再串行发送出去。所以当发送寄存器DR空时说明现在可能正在往外面发送数据,数据可能还没有发送完。但是发送完成不一样,他是在移位寄存器将本次数据全...
2:SP MSP PSP的理解: 在CPU中,堆栈寄存器SP一共有3个,分别为SP、MSP、PSP。SP是对外使用的寄存器,或者认为SP始终指向当前模式下使用的MSP/PSP,只不过在OS内核或Handler模式下,SP先指向MSP,或者说SP拷贝了MSP的值,可以直接访问主堆栈。而在线程模式下,SP拷贝了PSP的值,可以直接访问线程(任务)堆栈。即SP是MSP...
MSP用于主线程和中断服务例程的堆栈,而PSP用于任务(多线程)的堆栈。当发生中断时,内核会自动切换到...
R13(Stack Pointers,SP)Cortex-M3包含两个堆栈指针寄存器;同一时刻只能看到其中一个; (1)主堆栈指针寄存器(Main Stack Pointer,MSP):操作系统(OS)内核和异常处理程序使用的默认堆栈指针; (2)进程堆栈指针寄存器(Process Stack Pointer,PSP):用于用户代码; ...