查看: 1949|回复: 2

[已解决] 哪位大侠帮忙把下面这段代码变换到gcc的代码?(已解决)

[复制链接]

该用户从未签到

196

主题

495

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1482
最后登录
2020-12-3
发表于 2013-12-10 15:45:47 | 显示全部楼层 |阅读模式
最近,想将ucos移植到KL15Z64上,于是从网上找到了别的M0芯片的代码。不过这个代码是在KEIL下编译通过的。
直接移到codewarrior10.x下,编译报错,后来发现是二者的编译器不同,其中的伪指令集是不同的,本人对这块不懂,
哪位好心人帮忙转换一下?下面是代码(哪位有移植好的ucos,就更好了):

    EXTERN  OSRunning                                           ; External references
    EXTERN  OSPrioCur
    EXTERN  OSPrioHighRdy
    EXTERN  OSTCBCur
    EXTERN  OSTCBHighRdy
    EXTERN  OSIntNesting
    EXTERN  OSIntExit
    EXTERN  OSTaskSwHook

   
    EXPORT  OS_CPU_SR_Save                                      ; Functions declared in this file
    EXPORT  OS_CPU_SR_Restore
    EXPORT  OSStartHighRdy
    EXPORT  OSCtxSw
    EXPORT  OSIntCtxSw


    AREA |.text|, CODE, READONLY, ALIGN=2
    THUMB
    REQUIRE8
    PRESERVE8
       
;************************************
;保存和恢复中断屏蔽寄存器子函数定义
;************************************

OS_CPU_SR_Save
        MRS     R0, PRIMASK                 ; Set prio int mask to mask all (except faults)
        CPSID   I
        BX      LR


OS_CPU_SR_Restore
        MSR     PRIMASK, R0
        BX      LR


;************************************
;启动多任务
;************************************

OSStartHighRdy
    LDR     R0, __OS_TaskSwHook                                 ; OSTaskSwHook();
    BLX     R0

    LDR     R0, __OS_Running                                    ; OSRunning = TRUE;
    MOVS    R1, #1
    STRB    R1, [R0]
   
                                                                ; SWITCH TO HIGHEST PRIORITY TASK:
    LDR     R0, __OS_TCBHighRdy                                 ;   Get highest priority task TCB address,
    LDR     R1, [R0]                                            ;   Get stack pointer,
    LDR     R2, [R1]
    MSR     MSP, R2                                             ;   Switch to the new stack,
   
    POP    {R0-R7}                                              ;   Pop new task's R8-R11 (into R0-R3), R4-R7
    MOV     R8,  R0                                             
    MOV     R9,  R1
    MOV     R10, R2
    MOV     R11, R3   
       
                                                                ; NORMAL FUNCTION RETURN (see Note #2)
    ADD     SP, #0x10
    POP    {R0-R3}                                              ;   Pop new task's R12, PC, LR, PSR into (R0, R1, R2, R3, respectively)
    MOV     R12, R0
    MOV     LR,  R1
    MSR     PSR, R3
   
    PUSH   {R2}                                                 ;   Save PC
   
    SUB     SP, #0x1C                                          
    POP    {R0-R3}                                              ;   Pop new task's R0-R3
    ADD     SP, #0x0C
   
    CPSIE   I                                                   ;   Enable interrupts
   
    POP    {PC}                                                 ;   Pop new task's PC
   
  
   
;************************************
;任务级别下的任务切换
;************************************

OSCtxSw
    CPSID   I
    SUB     SP,#0x10
    PUSH    {R0-R3}

    ADD     SP,#0x20
    MRS     R3, PSR
    MOV        R2, LR
    MOV        R1, LR
    MOV     R0, R12
    PUSH    {R0-R3}

    SUB     SP, #0x10
    MOV     R0, R8
    MOV     R1, R9
    MOV     R2, R10
    MOV     R3, R11
    PUSH    {R0-R7}


    MRS     R0, MSP
    LDR     R1, __OS_TCBCur                                     ; OSTCBCur->OSTCBStkPtr = SP;
    LDR     R1, [R1]
    STR     R0, [R1]   
 
    LDR     R0, __OS_TaskSwHook                                 ; OSTaskSwHook();
    BLX     R0
  
    LDR     R0, __OS_PrioCur                                    ; OSPrioCur = OSPrioHighRdy;
    LDR     R1, __OS_PrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, __OS_TCBCur                                     ; OSTCBCur  = OSTCBHighRdy;
    LDR     R1, __OS_TCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]
   
    LDR     R0, [R2]                                            ; SP = OSTCBHighRdy->OSTCBStkPtr;
    MSR     MSP, R0                                            
   
                                                                   ; RESTORE TASK's CONTEXT
    POP    {R0-R7}                                              ;   Pop new task's R8-R11 (into R0-R3), R4-R7
    MOV     R8,  R0                                             
    MOV     R9,  R1
    MOV     R10, R2
    MOV     R11, R3 
   
    ADD     SP, #0x10
    POP    {R0-R3}                                              ;   Pop new task's R12, PC, LR, PSR into (R0, R1, R2, R3, respectively)
    MOV     R12, R0
    MOV     LR,  R1
    MSR     PSR, R3
   
    PUSH   {R2}                                                 ;   Save PC
   
    SUB     SP, #0x1C                                          
    POP    {R0-R3}                                              ;   Pop new task's R0-R3
    ADD     SP, #0x0C
    CPSIE   I                                                   ;   Enable interrupts
    POP    {PC}   
    NOP

;************************************
;中断级别下的任务切换
;************************************

OSIntCtxSw
    CPSID   I
    SUB     SP,#0x10
    PUSH    {R0-R3}

    ADD     SP,#0x20
    MRS     R3, PSR
    MOV        R2, LR
    MOV        R1, LR
    MOV     R0, R12
    PUSH    {R0-R3}

    SUB     SP, #0x10
    MOV     R0, R8
    MOV     R1, R9
    MOV     R2, R10
    MOV     R3, R11
    PUSH    {R0-R7}


    MRS     R0, MSP
    LDR     R1, __OS_TCBCur                                     ; OSTCBCur->OSTCBStkPtr = SP;
    LDR     R1, [R1]
    STR     R0, [R1]   
 
    LDR     R0, __OS_TaskSwHook                                 ; OSTaskSwHook();
    BLX     R0
  
    LDR     R0, __OS_PrioCur                                    ; OSPrioCur = OSPrioHighRdy;
    LDR     R1, __OS_PrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, __OS_TCBCur                                     ; OSTCBCur  = OSTCBHighRdy;
    LDR     R1, __OS_TCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]
   
    LDR     R0, [R2]                                            ; SP = OSTCBHighRdy->OSTCBStkPtr;
    MSR     MSP, R0                                            
   
                                                                   ; RESTORE TASK's CONTEXT
    POP    {R0-R7}                                              ;   Pop new task's R8-R11 (into R0-R3), R4-R7
    MOV     R8,  R0                                             
    MOV     R9,  R1
    MOV     R10, R2
    MOV     R11, R3 
   
    ADD     SP, #0x10
    POP    {R0-R3}                                              ;   Pop new task's R12, PC, LR, PSR into (R0, R1, R2, R3, respectively)
    MOV     R12, R0
    MOV     LR,  R1
    MSR     PSR, R3
   
    PUSH   {R2}                                                 ;   Save PC
   
    SUB     SP, #0x1C                                          
    POP    {R0-R3}                                              ;   Pop new task's R0-R3
    ADD     SP, #0x0C
    CPSIE   I                                                   ;   Enable interrupts
    POP    {PC}   
    NOP        

;************************************
;全局变量定义
;************************************
__OS_TaskSwHook
    DCD     OSTaskSwHook

__OS_IntExit
    DCD     OSIntExit

__OS_IntNesting
    DCD     OSIntNesting

__OS_PrioCur
    DCD     OSPrioCur

__OS_PrioHighRdy
    DCD     OSPrioHighRdy

__OS_Running
    DCD     OSRunning

__OS_TCBCur
    DCD     OSTCBCur

__OS_TCBHighRdy
    DCD     OSTCBHighRdy

    END
 
我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

16

主题

705

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1745
最后登录
1970-1-1
发表于 2013-12-10 17:31:52 | 显示全部楼层

RE:哪位大侠帮忙把下面这段代码变换到gcc的代码?

这个问题看上去比较复杂!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-2-7 15:18:05 | 显示全部楼层

    回复:哪位大侠帮忙把下面这段代码变换到gcc的代码?

    楼主你好,这个问题建议你去飞思卡尔官网提交一个技术服务请求。
    [url=https://www.freescale.co
    m/zh-Hans/webapp/servicerequest.create_SR.framework]www.freescale.com/zh-Hans/webapp/servicerequest.create_SR.framework[/url]
    (请使用英文描述一下你的问题,这样国内外工程师都能够帮助到你)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 22:13 , Processed in 0.086570 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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