AM3352: 不同平台代码移植,汇编编译报错

Part Number: AM3352


我的工程是window Code  Composer Studio 10.4.0     编译器版本是TI v20.2.5.LTS

我从git上down了一份code ,是开发板BeagleBone Black的code   不是CCS平台的code  是ubuntu   + makefile   编译执行的。maybe  use  gcc 

    我目前需要将git上的code的部分功能移植到现有工程中

  现在问题如下

  1.     uint32_t ulAPSR;       __asm  volatile( "MRS %0, APSR" : "=r" (ulAPSR)  );   这样的语句编译报错  expected")", 我查找了资料,没发现解决的方式
  2.   gcc 下的 .s 文件 和使用TI 编译器的.asm文件 ,看起来语法不同,所以,是否有这部分资料说明? or 有好的方式可以进行移植替换? 
  3. 目前可以确定   .S  or  .asm 文件的需要修改(GCC  to TI编译器),所以是否有这部分汇编的资料可以参考?

谢谢!!

  • 您好,收到了您的案例,调查需要些时间,感您的耐心等待。

  • Dearl    Lydia

                     有什么进展么??

  • 你好,我想问一下,一周了,没结果么??

  • 帮您升级到此产品的专项工程师,但是由于欧美假期目前还没得到回复,已催促,请等待。

  • 非常,感谢,不过我通过我公司联系到TI的技术人员,

    问题一已经解决,原因为,因为我的工程很旧,所以使用的编译器是 older TI Arm Compiler (armcl),  新的编译器  GCC or the newer TI Arm Clang  和旧的不同

    然后目前我从TI官网上找不到关于older TI Arm Compiler (armcl), 的汇编语法介绍,    仅仅找到从  older TI Arm Compiler (armcl)  迁移到  TI Arm Clang的简单说明,,,,,,这个对我帮助很小,    看起来我现在是反过来了,我需要从 新的编译器  GCC or the newer TI Arm Clang   移植到 older TI Arm Compiler (armcl)   所以关于这俩个编译器的汇编语法介绍,  还是需要资料,,,但是我在贵公司的官网上,实在是没有找到这部分资料,还请帮忙解决

    或者  从 新的编译器  GCC or the newer TI Arm Clang   移植到 older TI Arm Compiler (armcl)    有好的,简单的办法也可以。

    再次感谢

  • 这句话...

    是ubuntu   + makefile   编译执行的。maybe  use  gcc

    这意味着它很可能是这个...

    编译器版本是TI v20.2.5.LTS

    ...是使用错误的编译器。 从版本号可以看出您使用的是较旧的TI Arm编译器。 简称为armcl。 如果可行,请更改为TI Arm Clang编译器。 简称为tiarmclang。 这种改变可能会解决您的大多数问题。

    这篇文章的其余部分假定你有一个很好的理由继续使用armcl。

        uint32_t ulAPSR;       __asm  volatile( "MRS %0, APSR" : "=r" (ulAPSR)  );   这样的语句编译报错  expected")", 我查找了资料,没发现解决的方式

    armcl不支持类似的GCC样式__asm语句。

    然后目前我从TI官网上找不到关于older TI Arm Compiler (armcl), 的汇编语法介绍

    装配体文件中的行分为两类:指令和指令。 指令是对汇编程序的命令。 指令是指向CPU的命令。 有关armcl的指令记录在TI ARM assembly tools manual。 有关说明,《TMS470R1x User’s Guide》陈旧且并非完全最新,但可能会有所帮助。

  • 目前从较旧的  TI Arm编译器更改为TI Arm  Clang编译器  这个方案不太可能,工程很旧,而更改为TI Am clang貌似还有很多的地方要修改,我简单改掉编译器后编译,工程报了一堆错误,而且作为一个已经量产的方案,boss 也不会同意改编译器

    有关armcl的指令记录在TI ARM assembly tools manual。 有关说明,《TMS470R1x User’s Guide》陈旧且并非完全最新,但可能会有所帮助。

    第一份资料之前就看到过,里面并不是 Ti arm 编译器的汇编命令说明

    第二份资料  内核是RISV  ?   这个有帮助么?

    我很好奇的是,关于  TI 旧的编译器,最早肯定有每个汇编命令的详细资料的吧,如果没有的话,早期开发人员要如何开发呢?????? 

                              现在我确实找不到这部分资料。

         然后还有,如下面的语句

     uint32_t ulAPSR;       __asm  volatile( "MRS %0, APSR" : "=r" (ulAPSR)  );    是GCC下的方式,

    如果是TI  旧的编译器,要如何实现类似功能,不可能实现不了吧??

  • OK,我再补充一个具体的问题   

    看起来旧的编译器不支持下面的伪汇编,将变量ADDR_THRESHOLD的地址放到r0

    LDR      r0, =ADDR_THRESHOLD

    只支持下面的这种

    LDR      r0, ADDR_THRESHOLD

    这种情况下, 如何通过汇编可以获取到变量ADDR_THRESHOLD 的地址到r0 呢?要如何编写汇编?

  • 看起来旧的编译器不支持下面的伪汇编

    armcl 从未支持此语法。 有关此伪汇编的更多详细信息、请参阅 arm.com 上的此页面。 使用 armcl 时、同样可以手动完成。 例如、请在 TI ARM compiler manual 中搜索标题为Accessing Assembly Language Functions From C/C++的子章节。 注意汇编代码如何访问变量 gvar。

    请参阅此其他论坛主题。 它讨论的是同一台设备,也有类似的问题。

    uint32_t ulAPSR;       __asm  volatile( "MRS %0, APSR" : "=r" (ulAPSR)  );    是GCC下的方式,

    如果是TI  旧的编译器,要如何实现类似功能,不可能实现不了吧??

    可能存在一个编译器内在函数、它执行相同的操作或类似的操作。 请搜索 TI ARM 编译器手册、获取标题为“ARM 指令内在函数“的子章节。

    可能有一个 ACLE 内在函数执行相同的操作或类似的操作。 请在手册中搜索以句子开头的段落。

    此外、编译器还支持 ARM C 语言扩展 (ACLE) 规范中所述的许多内在函数。

    如果这些都不起作用、请考虑在手动代码汇编函数中实现该操作、然后调用它。

    如有其他问题请重新提交新帖,谢谢!

  • 我昨天尝试一行一行的进行 汇编的修改,慢慢找到了俩个编译器的一些差异,汇编部分已经修改完成了,所以暂时OK了,再次感谢您的帮助