This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TDA2EVM5777:使用 ti-CGT-ARM_5.2.5编译器的启动.asm 文件的前提条件

Guru**** 2589245 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/636425/compiler-tda2evm5777-precondition-in-startup-asm-file-using-ti-cgt-arm_5-2-5-compiler

器件型号:TDA2EVM5777

工具/软件:TI C/C++编译器

您好!

我正在处理多核、并在启动文件中生成了两个有关内核的单独矢量表。 但我也必须为单个内核使用相同的启动文件。   

如果 core_count 为0、则跳过 vector_table1的部分、因为我尝试了以下代码。 但会出现下面提到的错误

全局 core_count
CoreCount .field core_count //  CoreCount .word core_count (尝试".field"和".word")
.if CoreCount
.global vector_table1
.endif

错误:无法对给定的操作数执行操作

     .if OCoreCount

请建议我能够放入.asm 文件的指令、该文件为单核和多核生成单独的矢量表。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Harshalkumar Shinde">请提供说明、我可以将其放入.asm 文件中、以便为单核和多核生成单独的矢量表。  [/报价]

    我缺乏这方面的专业知识。  但我可以告诉您、需要更好地了解 ARM 汇编器中的指令。  为此、请参阅 ARM 汇编工具手册中标题为汇编器指令的章节。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、George、
    感谢您的回复

    我已经浏览过该文档并使用该.if 和.endif 指令、但它不起作用。 解决这个问题非常重要。 请提供您是否找到任何解决方案。

    谢谢、
    Harshalkumar
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Harshal、

    您能否提供有关您最终目标的更多详细信息?

    您正在制作多核的 CPU 是哪些?  

    谢谢、此致、

    Piyali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Priyali、

    我们使用的是 TDA2EX 控制器、对于多核、我们使用的是 IPU2 C0和 C1内核。 对于多核、我们将在 startup.asm 文件中生成两个矢量表、其工作正常。  

    现在、对于单核、我们必须保留相同的 startup.asm 文件、并且不想编译内核1的补丁。 即、不想编译用于多核的矢量表1。  

    为了单独编译、我们使用 core_count 宏命令、其可配置

    如果 core_count 为0、我必须跳过 矢量表1的部分、因为我尝试了以下代码。 但会出现下面提到的错误

    全局 core_count
    CoreCount .field core_count //  CoreCount .word core_count (尝试".field"和".word")
    .if CoreCount
    .global vector_table1
    .endif

    错误:无法对给定的操作数执行操作

         .if OCoreCount

     TI-CGT-ARM_5.2.5编译器用于编译。

    谢谢、

    Harshalkumar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Harshal、

    对于宏、您可以执行以下操作:

    if:.if core_count = 0
        .global vector_table1
        .endif

    请注意、.if 之前应该有一个制表符或一个标签。

    core_count = 基于您分配给宏的值。

    此致、

    Piyali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    BTW、.if 指令和宏有更多选项。 您可以查看 www.ti.com/.../spnu118t.pdf 第59页。

    谢谢、此致、
    Piyali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Priyali、

    我们检查了以下情况
    首先、我将 core_count 硬编码在该文件中、它工作正常

    1)
    core_count .equ 2.

    if:.if core_count=2
    .global vector_table1
    .endif

    状态:正常工作

    在第二种情况下、在另一个.h 文件中生成了 GBL_core_count、我们将执行该宏、如下所述

    2)
    全局 GBL_CORE_COUNT
    CoreCount .word GBL_core_count
    Core_count .equ CoreCount

    if:.if core_count=2
    .global vector_table1
    .endif

    获取错误:无法对给定的操作数执行[E0200]操作

    对于第二种情况、我们遇到了错误、请为第二种情况提供解决方案。

    谢谢、
    Harshal
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Harshal、

    恐怕.global 用于具有地址的符号、而不是用于控制编译的宏。
    在您的生成过程中、您可以更改 makefile 文件以将--define=GBL_core_count=2添加到编译中、并使用以下命令:

    if:.if GBL_core_count=2
    .global vector_table1
    .endif

    此致、
    Piyali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Harshal、

    您有机会尝试一下吗? 这是否适合您?

    谢谢、此致、
    Piyali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Priyali 的宝贵支持。 由于您的信息越来越清楚、因此我们相应地修改了代码并解决了问题。
    再次感谢。