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.

[参考译文] TMS570LC4357:tiarmclang 无法将中断矢量表链接到.invish

Guru**** 2445440 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1266354/tms570lc4357-tiarmclang-fails-to-link-interrupt-vector-table-into-invects

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我正在尝试编译一个项目并将其与 tiarmclang 链接起来。 出于某种原因、.invetcs 段始终以大小0结束。 项目应使用 GNU 汇编语法。

这是定义中断矢量的汇编器代码。

    .section ".intvecs"
    .sym_meta_info ".intvecs","retain",1
    .no_dead_strip ".intvecs"
    .arm

resetEntry:
        b   _c_int00
undefEntry:
        b   undefined_instruction_handler
svcEntry:
        b   supervisor_call_handler
prefetchEntry:
        b   prefetch_abort_handler
dataEntry:
        b   data_abort_handler
phantomEntry:
        b   phantom_interrupt_handler
irqEntry:
        ldr pc,[pc,#-0x1b0]
fiqEntry:
        ldr pc,[pc,#-0x1b0]

这是.map 文件的一部分。  

architecture: arm
start address: 0x0000a380

Program Header:
    LOAD off    0x00000034 vaddr 0x00000000 paddr 0x00000000 align 2**2
         filesz 0x00000008 memsz 0x00000008 flags r--
    LOAD off    0x00000040 vaddr 0x00000020 paddr 0x00000020 align 2**4
         filesz 0x00010fa0 memsz 0x00010fa0 flags r-x
    LOAD off    0x00010fe0 vaddr 0x0800b730 paddr 0x00010fc0 align 2**4
         filesz 0x00000f30 memsz 0x00000f30 flags r-x
    LOAD off    0x00011f10 vaddr 0x00011ef0 paddr 0x00011ef0 align 2**3
         filesz 0x00001070 memsz 0x00001070 flags r--
    LOAD off    0x00012f80 vaddr 0x08002000 paddr 0x08002000 align 2**2
         filesz 0x00000000 memsz 0x0000972e flags rw-
    LOAD off    0x00012f80 vaddr 0x0800c660 paddr 0x0800c660 align 2**3
         filesz 0x00000000 memsz 0x00000800 flags rw-
    LOAD off    0x00012f80 vaddr 0xf0400000 paddr 0xf0400000 align 2**0
         filesz 0x00080000 memsz 0x00080000 flags r--

Dynamic Section:

Sections:
Idx Name              Size     VMA      LMA      Type
  0                   00000000 00000000 00000000 
  1 .intvecs          00000000 00000000 00000000 

如何解决这个问题有什么想法吗?

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

    您好、Georg:

    我们已开始处理您的问题、并将尝试尽快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好、Georg:

    转发给专家以寻求帮助。

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

    您好、Georg:

    HALCOGen 提供的代码专为  TI-ARM 编译器/连接器而设计。 建议将 TI ARMCL 用于 Hercules 器件。

    是否 在闪存中将.invetcs 段分配给了0x00000000?

    https://software-dl.ti.com/codegen/docs/tiarmclang/compiler_tools_user_guide/migration_guide/index.html

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

    是的、.intvecs 位于0x00000000。 链接器文件中的代码段:

    /*----------------------------------------------------------------------------*/
    /* Memory Map  */
    MEMORY
    {
        VECTORS    (X)   : origin=0x00000000 length=0x00000020 vfill = 0xffffffff
        .
        .
        .
    }
    /*----------------------------------------------------------------------------*/
    /* Section Configuration                                                      */
    SECTIONS
    {
    
       .intvecs : {} > VECTORS
       .
       .
       .
    }
    

    我只要使用调试器将 PC 设置为起始地址、代码就会按预期工作。  

    我们只需要将正确的矢量表写入0x00000000。

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

    您好、Georg:

    您是否正在使用 TI ARMClang? 我尝试使用 Clang 2.1.2和3.0.0重现此问题、并获得错误:

    如果我使用旧语法、它仍然有效、并将.intvecs 分配给0x00000000:

    我不太熟悉 Clang 支持的指令、宏和内在函数。

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

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

    我想非法的助记符错误是由 GNU 语法在一个. asm 文件。 在我的经验 CCS 尝试编译所有. 具有旧的 ti 语法、.s 或的 asm 文件。 应该使用 GNU 语法编译 S 文件。

    您是否 了解使用 tiarmclang 的任何示例项目、即使是对于其他微控制器也是如此?  

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

    您好、Georg:

    AM263x 和 AM243x SDK 中的所有示例(CCS 工程)默认都使用 tiarmclang。

    https://www.ti.com/tool/MCU-PLUS-SDK - AM263X

    https://dev.ti.com/tirex/explore/node?node=A__AD2nw6Uu4txAz2eqZdShBg__com.ti.MCU_PLUS_SDK_AM263X__aBmeCqF__LATEST

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

    感谢链接、他们帮我解决了这个问题。

    assember 代码具有以下标头:

            .text
            .global resetEntry
            .type   resetEntry,%function
            .section ".intvecs","ax",%progbits
            .arm

    在链接器脚本中、-e 选项似乎非常重要、

    --retain="*(.intvecs)"
    -eresetEntry

    我希望这能在某些时候帮助