搜索
bottom↓
回复: 2

uCOSII移植到CortexM0上遇到的问题

[复制链接]

出0入0汤圆

发表于 2017-12-4 18:36:57 | 显示全部楼层 |阅读模式
各位前辈好,我按照uCOSII移植到CortexM3的步骤,将uCOSII移植到CortexM0上,发现OS_CPU_A.ASM 中的个别指令M0不支持,
比如CBZ,如何用M0自己的指令替代这些呢,谢谢指导!

无法辨认的指令有:
   CBZ     R0, OS_CPU_PendSVHandler_nosave                     ; Skip register save the first time
   STM     R0, {R4-R11}
   POP     {R14}                                                   ;此处编译器提示应该用R0到R7
   LDM     R0, {R4-R11}                                        ; Restore r4-11 from new process stack
   ORR     LR, LR, #0x04                                       ; Ensure exception return uses process stack

出870入263汤圆

发表于 2017-12-7 14:33:33 | 显示全部楼层

  1.    
  2.     RSEG    .text:CODE:NOROOT(2)
  3.     THUMB
  4. PendSV_Handler
  5.     CPSID   I                                   ; Prevent interruption during context switch
  6.     MRS     R0, PSP                             ; PSP is process stack pointer

  7.     CMP     R0, #0
  8.     BEQ     __nosave_regs                       ; equivalent code to CBZ from M3 arch to M0 arch
  9.     ; Except that it does not change the condition code flags

  10.     SUBS    R0, R0, #0x20                       ; Save remaining regs r4-r11 on process stack
  11.     LDR     R1, =OSTCBCur                       ; OSTCBCur->OSTCBStkPtr = SP;
  12.     LDR     R1, [R1]
  13.     STR     R0, [R1]                            ; R0 is SP of process being switched out
  14.    
  15.     STM     R0!, {R4-R7}                        ; Store R4-R7(Low Registers) on process stack
  16.     MOV     R4, R8                              ; Move R8-R11 values to R4-R7 registers.
  17.     MOV     R5, R9
  18.     MOV     R6, R10
  19.     MOV     R7, R11
  20.     STM     R0!, {R4-R7}                        ; Store R8-R11(High Registers) on process stack

  21.     ; At this point, entire context of process has been saved
  22. __nosave_regs
  23.     LDR     R0, =OSPrioCur                      ; OSPrioCur = OSPrioHighRdy;
  24.     LDR     R1, =OSPrioHighRdy
  25.     LDRB    R2, [R1]
  26.     STRB    R2, [R0]

  27.     LDR     R0, =OSTCBCur                       ; OSTCBCur  = OSTCBHighRdy;
  28.     LDR     R1, =OSTCBHighRdy
  29.     LDR     R2, [R1]
  30.     STR     R2, [R0]
  31.    
  32.     LDR     R0, [R2]                            ; R0 is new process SP; SP = OSTCBHighRdy->OSTCBStkPtr;
  33.     ADDS    R0, #0x10                           ; Adjust SP to High Registers(R8-R11) location
  34.     LDM     R0!, {R4-R7}                        ; Load R8-R11 values from new process stack into R4-R7
  35.     MOV     R8,  R4                             ; Restore R8-R11 by moving their values from R4-R7
  36.     MOV     R9,  R5
  37.     MOV     R10, R6
  38.     MOV     R11, R7
  39.    
  40.     MSR     PSP, R0                             ; Load PSP with new process SP
  41.    
  42.     SUBS    R0, R0, #0x20                       ; Adjust SP to Low registers(R4-R7) location
  43.     LDM     R0!, {R4-R7}                        ; Restore remaining R4-R7 from new process stack

  44.     MOV     R0,  R14
  45.     MOVS    R1,  #0x04                          ; Immediate move to register
  46.     ORRS    R0,  R1                             ; Ensure exception return uses process stack
  47.     MOV     R14, R0
  48.     CPSIE   I
  49.     BX      LR                                  ; Exception return will restore remaining context
复制代码

出0入0汤圆

发表于 2021-7-4 22:25:38 来自手机 | 显示全部楼层
遇到楼主同样问题,谢谢楼上解答。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-2-8 03:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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