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

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

[复制链接]
灰泥鳅 提问时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版