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.

[参考译文] TM4C1290NCPDT:TI ARM Clang 迁移和 Tiva 引导加载程序问题

Guru**** 2538930 points
Other Parts Discussed in Thread: TM4C1290NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1272836/tm4c1290ncpdt-ti-arm-clang-migration-and-tiva-bootloader-issue

器件型号:TM4C1290NCPDT

您好!

我要将现有工程从 TI 20.2.7 LTS 迁移到 TI ARM Clang v2.1.3 LTS、但遇到了以下问题:

我构建了 hexfile 并在目标上运行它、但当我重新启动器件时、会调用引导加载程序。 我`m 使用默认的 TivaWare 引导程序2.2.0295。

`ve 已n`t 了问题的根源、但我不知道如何解决。

引导加载程序期望应用程序位于地址0x4000、并检查 int 矢量表。

    // See if the first location is 0xfffffffff or something that does not
    // look like a stack pointer, or if the second location is 0xffffffff or
    // something that does not look like a reset vector.
    //
    pui32App = (uint32_t *)APP_START_ADDRESS;
    if((pui32App[0] == 0xffffffff) ||
       ((pui32App[0] & 0xfff00000) != 0x20000000) ||
       (pui32App[1] == 0xffffffff) ||
       ((pui32App[1] & 0xfff00001) != 0x00000001))
    {
        return(1);
    }

我´ve 了 TI Clang 编译器中的链接器映射、并将文本段置于0x4000旧编译器会将 intvecs 置于地址。 请查看附加的链接器文件和链接器命令。

我如何修改 Clang 编译器的链接器脚本、以便将 intvecs 放在0x4000?

谢谢!

此致

斯特芬

e2e.ti.com/.../Maps.zip

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

    最重要的一点是、文件本身  tm4c1290ncpdt_startup_ccs.obj 最后一条链路命令看到的输入之一?

    谢谢。此致、

    -乔治

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

    您好、George、

    谢谢! 这就是问题所在! 迁移向导从编译中排除了 startup_ccs.c。 我n`t 了!

    我`ve 了2个跟进问题:

    1.警告->#10247-D 创建没有段规范的输出段".rodata":

    我该怎么做。 当然、我可以在链接器脚本中设置它、但旧的 ti 编译器能否识别它? 我想在一段时间内支持这两种方式...

    2.警告->#16032-D 目标文件具有不兼容的 wchar_t 类型("TivaWare_C_Series-2.2.0.295/driverlib/ccs/Debug/driverlib.lib "=--wchar_t=16、"./main.o"=--wchar_t=32):

    Tiva 库是使用 wchar_t=16构建的。 如果我将 globaly 切换至 wchar_t=16、则出现错误时、libc 是使用 wchar_t=32构建的。 我可以重新编译 Tiva Lib 吗? Tiva 库根本不使用 wchar_t 吗? 因此、我可以忽略它。 它只是一个 C 语言库、所以没有 wchar_t 是n`t 它? 我可以抑制针对特定包含的警告吗?

    谢谢!

    此致

    斯特芬

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

    您好、George、

    您能回答我的后续问题吗?

    谢谢!

    此致

    斯特芬

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

    很抱歉耽误你的时间。  将此主题标记为"已回答"时,它会自动关闭。  因此、我使用的仪表板不再向我显示此主题。  当你发布另一个回复时、这导致该主题自动打开、然后我在我的仪表板上看到了它。  请不要觉得有义务了解所有这些详细信息。  但这就是我的响应延迟的原因。

    警告->#10247-D 正在创建不带 SECTIONS 规范的输出段".rodata":

    我该怎么做。

    [/报价]

    更改链接器命令文件(您将其称为链接器脚本)。  如果不更改、则 .rodata 使用链接器默认设置将段分配到存储器中、这几乎可以肯定会导致问题。

    当然我可以在链接器脚本中设置它,但旧的 ti 编译器是否会识别它?

    可以。  对于两个工具链、链接器命令文件的编程语言是相同的。  当您使用旧编译器进行编译时、最终会创建一个 .rodata 长度为零的那一部分。  这是无害的。

    我可以重新构建 Tiva 库吗?

    我不知道。

    是否 Tiva 库完全使用 wchar_t?

    也许不是。  但是、您需要与支持该计划的团队进行确认。

    是否可以抑制对特定包含的警告?

    有一个命令行选项可抑制某些诊断、包括此诊断。  在这种情况下、添加 --diag_suppress=16032 。  该数字出现在诊断的早期部分。

    谢谢。此致、

    -乔治

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

    您好、George、

    我`ve 了链接器脚本、它运行正常! 谢谢!

    n`t ,我已经抑制了16032警告,但我想说,这种 dows 会在未来造成麻烦。

    您能否与您的团队确认此问题?

    谢谢!

    此致

    斯特芬

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

    尊敬的 Steffen:

    Tiva 库是使用 wchar_t=16构建的。 如果我将 globaly 切换至 wchar_t=16、则出现错误时、libc 是使用 wchar_t=32构建的。 我可以重新编译 Tiva Lib 吗? Tiva 库根本不使用 wchar_t 吗? 因此、我可以忽略它。 它只是一个 C 语言库、所以没有 wchar_t 是n`t 它? 是否可以抑制特定包含的警告?

    我没有看到 wchar_t 用于 Tiva driverlib。  

    您可以重新构建 drivelib。 您可以将 TivaWare SDK 中的 driverlib 工程导入 CCS 并重新构建。  

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

    谢谢!