搜索
查看: 3353|回复: 1

[求助] STM32汇编的MSP、PSP和SP的区别

[复制链接]

该用户从未签到

7

主题

24

帖子

0

蝴蝶豆

中级会员

最后登录
2021-7-11
发表于 2020-1-21 16:38:21 | 显示全部楼层 |阅读模式
最近在看freeRTOS的移植,发现它的堆栈访问代码跟51和x86区别比较大,网上搜到的资料说MSP、PSP、SP、R13都可以访问堆栈。
其中MSP对应Main堆栈、PSP对应Process堆栈,那么如果我直接使用SP、R13呢,这个时候这么知道是PSP还是MSP?

附上freeRTOS的任务切换代码:
  1. __asm void xPortPendSVHandler( void )
  2. {
  3.         extern uxCriticalNesting;
  4.         extern pxCurrentTCB;
  5.         extern vTaskSwitchContext;

  6.         PRESERVE8

  7.         mrs r0, psp
  8.         isb

  9.         ldr        r3, =pxCurrentTCB                /* Get the location of the current TCB. */
  10.         ldr        r2, [r3]

  11.         stmdb r0!, {r4-r11}                        /* Save the remaining registers. */
  12.         str r0, [r2]                                /* Save the new top of stack into the first member of the TCB. */

  13.         stmdb sp!, {r3, r14}
  14.         mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY
  15.         msr basepri, r0
  16.         dsb
  17.         isb
  18.         bl vTaskSwitchContext
  19.         mov r0, #0
  20.         msr basepri, r0
  21.         ldmia sp!, {r3, r14}

  22.         ldr r1, [r3]
  23.         ldr r0, [r1]                                /* The first item in pxCurrentTCB is the task top of stack. */
  24.         ldmia r0!, {r4-r11}                        /* Pop the registers and the critical nesting count. */
  25.         msr psp, r0
  26.         isb
  27.         bx r14
  28.         nop
  29. }
  30. /*-----------------------------------------------------------*/
复制代码



回复

使用道具 举报

该用户从未签到

17

主题

470

帖子

68

蝴蝶豆

金牌会员

最后登录
2022-5-6
发表于 2020-1-24 22:49:22 | 显示全部楼层
12年前我用LPC2132时纯汇编写程序,那时好像没有见过MSP 和PSP 这两位,可能是后加的宏吧?
至于R13就是SP ,正如R15就是PC 是同一单元
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-26 05:27 , Processed in 1.152294 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表