打印
[ZLG-MCU]

关于crossstudio for arm的汇编

[复制链接]
4303|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yeool|  楼主 | 2007-1-8 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
OSPendSV:
        MRS     R0, psp             //PSP is process stack pointer
        CBZ     R0, OSPendSV_nosave //skip register save the firsttime
        SUB     R0, R0, #0x20      
        stm     r0, { r4 - r11 }   //  出错了
        。
        。
        。
        。
OSPendSV_nosave:
        PUSH    {R14}                   //; need to save LR exc_return value
        LDR     R0, __OS_TaskSwHook     //; OSTaskSwHook();
        BLX     R0
        pop     {r14}                 //  出错了
        LDR     R4, __OS_PrioCur        //; OSPrioCur = OSPrioHighRdy
        LDR     R5, __OS_PrioHighRdy
        LDRB    R6, [R5]
        STRB    R6, [R4]

        LDR     R4, __OS_TCBCur         //; OSTCBCur  = OSTCBHighRdy;
        LDR     R6, __OS_TCBHighRdy
        LDR     R6, [R6]
        STR     R6, [R4]

        LDR     R0, [R6]              
        LDM     R0, {R4-R11}          //  出错了
        ADD     R0, R0, #0x20
        MSR     psp, R0              //; load PSP with new process SP
        ORR     LR, LR, #0x04          //  出错了
        BX      LR                    
        NOP

以上代码在iar上编译通过但在Crossstudio for arm上出错了:错误如下:

Building “ucTest” in configuration “THUMB Flash Debug” — 4 errors
  Assembling os_cpu_a.asm — 4 errors
    D:/soft/lm3s/ucProg/uCOS-II/Ports/arm-cortex-m3/Generic/IAR/os_cpu_a.asm: Assembler messages:
    Error: lo register required -- `stm r0,{r4-r11}'
    Error: invalid register list to push/pop instruction --`pop {r14}'
    Error: lo register required -- `ldm R0,{R4-R11}'
    Error: unshifted register required -- `orr LR,LR,#0x04'
Build failed

有没有crossstudio for arm 关于汇编的文档啊,或者gcc关于汇编的也行,
还有gcc的主页是什么啊?

相关帖子

来自 2楼
zlgarm| | 2007-1-12 08:48 | 只看该作者

CrossWork编译出错-解决办法

在程序开始地方加入".syntax unified",编译就不会出错,如下所示:

.code 16
.align 0
.thumb_func
.syntax unified


OSPendSV:
        MRS     R0, psp             //PSP is process stack pointer
        CBZ     R0, OSPendSV_nosave //skip register save the firsttime
        SUB     R0, R0, #0x20      
        stm     r0, { r4 - r11 }   //  出错了
        .
        .
        .

使用特权

评论回复
板凳
yeool|  楼主 | 2007-1-8 13:24 | 只看该作者

以下是cortexM3的文档,其中有关如STM的例句

同样的语句为什么crossStudio会报错呢

使用特权

评论回复
地板
yeool|  楼主 | 2007-1-9 10:58 | 只看该作者

没有人知道吗?

是不是gcc对于cortex m3支持不够好啊?

使用特权

评论回复
5
zlgarm| | 2007-1-9 18:35 | 只看该作者

32位 stm,pop错误

  “stm r0, { r4 - r11 }”和 pop {r14} 是32位Thumb2指令,初步估计是CrossStudio对16位Thumb和32位Thumb2指令,交互编译不太完善。我们已向Rowley公司提出此问题。

使用特权

评论回复
6
yeool|  楼主 | 2007-1-9 19:50 | 只看该作者

我想也是的

因为同样的语句在iar和keil下都没有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

0

粉丝