你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32汇编的MSP、PSP和SP的区别

[复制链接]
grayloach 提问时间:2020-1-21 16:38 /
最近在看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. /*-----------------------------------------------------------*/
复制代码



收藏 1 评论1 发布时间:2020-1-21 16:38

举报

1个回答
aiherong 回答时间:2020-1-24 22:49:22
12年前我用LPC2132时纯汇编写程序,那时好像没有见过MSP 和PSP 这两位,可能是后加的宏吧?
至于R13就是SP ,正如R15就是PC 是同一单元
关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版