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.

[参考译文] TM4C1294NCPDT:开箱即用故障示例

Guru**** 2482105 points
Other Parts Discussed in Thread: EK-TM4C1294XL, SYSBIOS, TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/715850/tm4c1294ncpdt-example-out-of-box-failure

器件型号:TM4C1294NCPDT
Thread 中讨论的其他部件:SYSBIOS、EK-TM4C1294XL

正如典型的示例项目一样、我创建了一个新项目、但它甚至不起作用。

我有 Tiva TM4C1294 XL Launch Pad。 我使用的是 CCS 7.2 、GCC 6.3.1。  无 SYSBIOS

重现步骤:

  1. 只使用 main.c.创建一个新的空项目。 "CCS "菜单中的"CCS Project"。
  2. 构建它。
  3. 加载它。
  4. 启动调试器。
  5. 观察它从 Get-Go 转到故障 ISR。  我甚至无法在 tm4c1294ncpdt_startup_ccs_gcc.c 中设置断点

项目已附加。  Stellaris 调试器正在加载代码、因为它擦除了之前电路板上的内容。

如果创建的最基本的项目 shell 甚至不起作用、您希望有人使用 launchpad 来学习这种环境吗?

有人能帮我吗?

e2e.ti.com/.../1488.Project0.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    下面有一个 project0示例和各种 TivaWare 示例 /examples/boards/ek-tm4c1294xl. 请将这些项目导入 CCS 以尝试它们。 您可以从 project0、hello 或 blinky 开始。 这些项目都已完全初始化器件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感受您的痛苦!   真的!   必须向您提出建议-您远离(非常远)孤独!

    [引用 user="Christopher Weber"]我创建了一个新的,它甚至不起作用。

    正如供应商/朋友 Charles 所建议的-您最好选择"从"已知工作(即供应商提供/测试)项目开始"、而不是尝试"创建您自己的项目"。

    为什么是这样?    (员工/我-阅读您的想法/听到您的声音!)   IDE 有许多"角落和缝隙"-对于那些试图"创造自己"的人来说-成功总是(可能总是)被证明是难以实现的。   这绝不是对您的期望和/或能力的任何反思。   相反,应该考虑的是"向现实中发展"。   请注意 、"您的代码的添加/放置"-在 供应商的"已知良好项目"中-确保所有这些(通常是隐藏/隐藏的)"IDE 角落/缝隙"-已"完全管理"-为您准备!   (您尝试"创造"-减去"IDE 专业技术"-永远无法竞争!)

    还应该指出的是、"始终且仅限于"的动机是什么 ?"鼓励"、"创建自己的项目?"    (这是从未/从未解释过的!)

    事实证明、"现有供应商项目中添加您自己的代码-运行并检查 它-然后"仔细且系统地"-删除供应商的示例代码是很容易的。   (理想情况下、每次一个部分/部分-始终测试/确认-在每个供应商代码之后-被激发。   (被杀/被禁)  这种"模块"——最常—为您节省了成为"IDE Maven (IDE Maven)所需的时间(和巨大的努力),同时使您的项目获得成功!   (目标是什么-不是?)

    这种指导显然应该更好地(即某些)促进供应商。   (显然、他们当前的"模板"正在失败-这是众所周知的-也许是"一天"...)

    在供应商提供/测试的项目中、对您的代码进行编程绝对是您的最佳选择!    阿尔利斯!

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

    [引述用户="Charles Tsaaa">您好、Chris、
    下面有一个 project0示例和各种 TivaWare 示例 /examples/boards/ek-tm4c1294xl.请将这些项目导入 CCS 以尝试它们。 您可以从 project0、hello 或 blinky 开始。 这些项目都已完全初始化器件。[/quot]

    查尔斯

    不。

    我拥有的唯一"示例"文件夹是 "C:\ti_tirtos_tivac_2_16_01_14_examples"中的"tirtos_tivac_2_16_01_14"。  CCS 在其中找不到任何要导入的内容。  请参阅:

    我为任何示例提供了指导,您的" /examples/boards/ek-tm4c1294xl. 文件夹树。  

    我尝试从根级别进行 CCS 搜索、并获得了大量名为"com_ti_rtsc_tirtos_example_xxx"的内容。  在浏览了其中300多个示例的列表后,我选择了示例#141,并尝试导入该示例(C:\ti_tirtos_tivac_2_16_01_14\resources\ek_tm4C1294XLEempemationKit\driveramples\tDriverExamples\ttyExamples\com_ti_rtsc_tirtostivac_example_141.projectspec)

    它不会导入、它会给我此错误:

    考虑到 TivaWare 的安装版本比 CCS 旧(我在两年前使用 CCS 6.2,现在是7.2版),我不明白为什么需要更新...  仍然失败。

    无法完成安装、因为找不到一个或多个必需项目。
    正在安装的软件:CCS 闪存内容8.1.0.1297 (com.ti.dsflash.win32.feature.group 8.1.0.1297)
    缺失要求:调试服务器- Win32 7.4.0.1313 (com.ti.ccstudio.debugserver.win32.feature.group 7.4.0.1313)需要'com.ti.ccstudio.installer.win32.feature.group 7.4.0.00015'、但找不到它
    无法满足依赖项要求:
    从:CCS 闪存内容8.1.0.1297 (com.ti.dsflash.win32.feature.group 8.1.0.1297)
    改为:com.ti.ccstudio.debugserver.win32.feature.group 7.4.0.1313 

    此时将显示此"超级信息"消息:

    所有这些、当我想要的只是一个简单的"empty example project with Main.c..." 、它不适用于 GCC 编译器...

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

    尊敬的 Chris:

     请从此链接下载 TivaWare、  它提供了一套 用于开发基于 Tiva C 系列的 MCU 应用的软件工具。

     下载后、您将找到许多示例、如下所示。

    TivaWare 示例不基于 TI-RTOS。 如果您想要运行一些 TI-RTOS 示例、则将使用 CCS Resource Explorer 导入这些示例。 我建议您首先从 TivaWare 示例开始、熟悉器件后、您可以继续使用 TI-RTOS 示例。  

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

    [引用 USER="CB1_MOBILE"]

    在供应商提供/测试的项目中、对您的代码进行编程绝对是您的最佳选择!    阿尔利斯!

    [/报价]
    正如我在其他许多时候所做的那样、在另一个器件中、以及在该器件上此 IDE 的先前版本中...
    但现在、这不是我们要做的... 不起作用时不起作用。  见我对查尔斯的答复。
    但是、"供应商"正如您礼貌地称呼他们、提供了一个项目生成选项、其方式与 Visual Studio、Netbeans、Android Studio、MPLAB、Quartus、 IAR 以及地球上几乎所有其他 IDE 软件包、但这一个会生成不起作用的代码。
    人们会假设"供应商提供/测试的项目"还包括一个简单的"自动生成的空项目"。  毕竟、他们在 IDE 中为您提供了这种能力。 它会设置您所谈到的所有"角落和缝隙"、因为项目详细信息对话框要求您创建这样一个简单的项目。  提供正确运行的"tm4c1294ncpdt_startup_ccs.c"和"tm4c1294ncpdt.lds"文件有多困难?  两种编译器中的  他们可以为我使用的另一个器件执行该操作。
    因为我相信"main.c"没有任何配置错误的角落和缝隙。  毕竟、它只有4行:
    int main (void)
    {
    return 0;
    } 

    最后、当编译器设置为"TI"但设置为"GNU"时、为什么它起作用?  在另一篇文章中、有人告诉我不要使用 TI 编译器。  他们不再支持该协议、转而使用 GNU (在 Sitara 论坛中)。

    TI 项目与 GNU 之间的区别在于启动时的某种程度、即"供应商提供"。  在 TI 世界:

    • 它设置矢量表、跳转至 ResetISR、调用 _c_int00。 一切都有道理。  除了...
    • 但是、映射文件显示条目为"_c_int00_noinit_noargs"。。  它是从哪里获得的?
    • 在调试器中、它跳转到名为"_c_int00_template"的入口点...  从"boot_cortex_m.c"(在.../compilers/ti-cgt-arm_17.9.0.STS/lib/src 中) 获取此名称的位置?  

    他们在玩什么类型的 shell 游戏时在封面下面更改了符号名称?

    供应商决定隐藏太多内容。  在几十年的发展过程中、我能够发现并学习所有其他环境中的"角落和缝隙"。  这是唯一一个说"你不需要知道、只需继续"的人
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    那么、我需要后退吗?
    我有一个名为"tirtos_tivac_2_16_01_14"的东西
    现在我需要安装版本2.1.4.178

    我还有另外一件事吗? 几年前、我被指示安装该软件。 我记得、它可能是通过 CCS 中的 Resource 工具安装的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    不开发基于 TI-RTOS 的应用程序的人员使用 TivaWare。 tirtos_tivac_2_16_01_14安装也会将 TivaWare 推导为较旧版本。 TI-RTOS 驱动程序环绕 TivaWare 驱动程序、因此 TI-RTOS 驱动程序(即 UART、SPI、I2C 等)可用于所有 TI 器件平台。 在您的原始帖子中、您提到您正在创建一个简单的非基于 BIOS 的示例。 因此、我建议您从非基于 TI-RTOS 的 TivaWare 示例开始。 许多客户不使用 OS、而 TivaWare 是他们开始项目开发的地方。 如果您的应用仅基于 TI-RTOS、则可以从我通过 CCS 资源浏览器指出的适用于 TM4C 的 TI-RTOS 示例开始。 如果您有时间、我仍建议您尝试使用 TivaWare、了解该库可以为您提供的内容。 请注意、TI-RTOS 不提供所有驱动程序。 例如、如果您想使用 CAN 或 ADC 模块、则没有适用于它们的 TI-RTOS 驱动程序。 您仍需要使用 TivaWare 驱动程序。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    我在 Resource Explorer 中引入的示例"project0"使用了 TI 编译器。 它的工作原理。
    我还安装了您提到的软件包、但 CCS 没有提示我"找到新软件包"

    如果为 TI 编译器设置了"new Project"|"Empty Project"、但如果为 GNU 编译器设置了该项目、则无法运行该项目。

    这是否意味着您不支持 GNU 编译器?

    这是有关此帖子的核心问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Chris:
    您是否上传了一些图像? 不确定您的意思。 我将请我们的 TI-RTOS 团队就 TM4C 器件的 GNU 支持发表评论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查尔斯
    不、这只是我发布的"签名"行... 这意味着有点幽默。

    使用 TI 编译器、一切都按预期工作。 问题所在的是 GNU 编译器。 我将该编译器用于 Sitara、因此我希望它也适用于 Tiva。 尤其是因为它是创建新项目时的一个选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TI-RTOS 支持 TI、GCC 和 IAR 编译器。 请参阅 TI-RTOS 发行说明以了解推荐的版本。

    我回应 Charles 的回应。

    如果您不想使用 RTOS、请从 TivaWare 开始。
    如果您想使用 FreeRTOS、请从 TivaWare 开始。
    如果您想使用 TI-RTOS、请从用于 TivaC 的 TI-RTOS 开始。 如前所述、TI-RTOS 对驱动程序的覆盖范围不是完全覆盖。 因此、您需要使用 CAN 或 ADC、您需要自己执行该操作。 您可以使用独立 TivaWare 产品中的示例。 我们只在 TI-RTOS 中提供 TivaWare 的器件(例如 driverlib 代码和库)、而不提供 TivaWare 示例。

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

    [引用 USER="Christopher Weber]Watch 它从 Get-Go 转至故障 ISR 我可以使用 GCC 6.3.1和最新 CCS 来重复此操作  8.1.0.00011。将以下内容添加到 tm4c1294ncpdt.lds 链接器脚本中意味着程序在启动调试会话时会运行到 main:

    条目(ResetISR) 

     在使用 CCS 6.1/Linaro GCC 4.8.4时、对这种修改的需求"隐藏"在已知问题上

    我最初在 Project for a TM4C1294NCPDT 中报告了此问题、该问题是在 CCS 6.1中使用 GNU 编译器创建的、但无法运行到 main 中、因此需要检查我更新随 CCS 提供的默认链接器脚本的建议是否得到了执行。

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

    我使用 CCS 8.1.0为 TM4C1294NCPDT 使用 GCC 7.2.1编译器创建新的"空项目(使用 main.c)"、程序在启动调试会话时转到故障 ISR。 即、随"最新"CCS 8.1.0提供的默认链接器脚本仍然存在问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、
    已确认。 感谢您提供这些信息、它将清除此问题。 我是否还可以提出有关 TI 版本的问题? 在同一主题中:

    TI 编译可以正常工作、但未设置任何"entry (...)" 比如 GNU 的这个解决方案。
    "条目"会按预期调用_c_int00、但链接器设置中未将其列为入口点。
    因此、当调试器加载时、我找不到任何提示它跳转至"ResetISR"的内容... 它在 TI 编译器/链接器中的了解程度如何?
    映射文件将入口点显示为_c_int00_noargs... 它从哪里获得它?

    矢量表将入口点重置为 ResetISR、正如我所期望的那样。 在 GNU 上... 即使调试会话期间调试器未设置正确的起点、我也会看到下电上电确实会转到正确的入口点(通过矢量表)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Christopher Weber">因此我找不到任何提示它在调试器加载时跳转至"ResetISR"的内容。 ELF 格式.out 文件的标头包含调试器使用的"入口点"字段(而不是知道入口点的符号名称的调试器)。 使用-l 选项时、GCC ARM 安装中的 readelf 程序可以显示入口点。

    "entry (...)"之前为 GCC ARM 获取 Project0示例 添加到 GCC 链接器脚本中、ELF 头中的入口点是地址0x208、它是.map 文件中显示的.text 段的开头:

    $~/ti/ccs810/ccsv8/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/arm-none-eabi/bin/readelf -l Project0/Debug/Project0.out
    
    Elf 文件类型为 EXEC (可执行文件)
    入口点0x208
    有5个程序头、起始偏移量为52
    
    程序头:
    类型 偏移量 VirtAddr PhysAddr FileSiz MemSiz Flg Align
    EXIDX 0x020b0c 0x00000b0c 0x00000b0c 0x00008 0x00008 R 0x4
    LOAD 0x010000 0x00000000 0x00000000 0x006d4 0x006d4 R E 0x10000
    LOAD 0x020000 0x20000000 0x000006d4 0x00438 0x00438 RW 0x10000
    LOAD 0x020b0c 0x00000b0c 0x00000b0c 0x00008 0x00008 R 0x10000
    LOAD 0x030438 0x20000438 0x20000438 0x00000 0x00240 RW 0x10000
    
    段到段映射:
    段段段段...
    00 arm.exidx
    01 .intvecs .text .rodata .eh_frame
    02 .data .JCR
    03 arm.exidx
    04 .bss 

    在将"entry (ResetISR)"添加到链接器脚本后、ELF 头文件中的入口点现在为 0x2F1、映射文件显示的是 ResetISR 函数的地址:

    $~/ti/ccs810/ccsv8/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/arm-none-eabi/bin/readelf -l Project0/Debug/Project0.out
    
    Elf 文件类型为 EXEC (可执行文件)
    入口点0x2F1
    有5个程序头、起始偏移量为52
    
    程序头:
    类型 偏移量 VirtAddr PhysAddr FileSiz MemSiz Flg Align
    EXIDX 0x020b0c 0x00000b0c 0x00000b0c 0x00008 0x00008 R 0x4
    LOAD 0x010000 0x00000000 0x00000000 0x006d4 0x006d4 R E 0x10000
    LOAD 0x020000 0x20000000 0x000006d4 0x00438 0x00438 RW 0x10000
    LOAD 0x020b0c 0x00000b0c 0x00000b0c 0x00008 0x00008 R 0x10000
    LOAD 0x030438 0x20000438 0x20000438 0x00000 0x00240 RW 0x10000
    
    段到段映射:
    段段段段...
    00 arm.exidx
    01 .intvecs .text .rodata .eh_frame
    02 .data .JCR
    03 arm.exidx
    04 .bss 

    请注意、写入程序计数器时、最低有效位会将执行程序状态寄存器中的 T 位置位;其中0 = ARM 状态、1 = THUMB 状态。 Cortex-M 仅支持 THUMB 状态、地址0x208的错误入口点具有最低有效位清零功能、 当调试器尝试写入错误入口点的 PC 时、可能会导致 INVSTATE 异常(硬故障)。

    [引用 user="Christopher Weber">并且映射文件将入口点显示为_c_int00_noargs... 它从何处获取该内容?_c_int00_noargs 是 TI ARM 编译器运行时库中的入口点。 除非被覆盖、否则 TI 链接器默认为运行时库中的适当入口点。

    [引用 user="Christopher Weber">矢量表将入口点重置为 ResetISR,正如我所期望的那样。 在 GNU 上... 即使调试会话期间调试器未设置正确的起点、我也会看到下电上电确实会转到正确的入口点(通过矢量表)。同意、使用矢量表中的正确入口点对闪存进行编程; 问题是调试器被告知.out 文件 ELF 头中的"入口点"不正确。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    切斯特、
    感谢您的编写。 它提供了非常丰富的信息。 我知道要花多长时间才能形成一个全面的答案,我对此表示赞赏。

    但是、我的问题仍然是关于 TI 的。 它如何在没有相同的"entry (...)"的情况下设置入口点 需要什么? 因为它起作用、并且该指令不在 TI 的链接器脚本中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Christopher Weber">但是、我的问题仍然是关于 TI 的。 它如何在没有相同的"entry (...)"的情况下设置入口点 GNU 需要   ? TI ARM 汇编语言工具用户指南的第3.2节入口点和第3.3.1 _c_int00节对此提供了一些信息。 基本上、TI 链接器似乎使用默认名称。

    如果您查看 TI 运行时库的源代码、例如 ccsv8/tools/compiler/ti-cgt-arm_ /lib/src/boot_cortex_m.c 可以看到入口点的源代码。 从 v18.1.3开始、 _c_int00函数有四个变体、具体取决于参数是否需要传递到 main 和/或是否需要 C 自动变量初始化。 在源代码中、没有用于将其标记为入口点的属性;根据 TI ARM 汇编语言工具用户指南的建议、TI 链接器必须具有运行时库中入口点的默认名称的内置假设。

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

    切斯特、

    是的、您回答正确、感谢您提供答案。 链接器的确定方式如下: