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.

[参考译文] RTOS/TM4C129ENCZAD:示例 uartecho 工程具有内存空间错误

Guru**** 1807890 points
Other Parts Discussed in Thread: TM4C129ENCZAD, EK-TM4C1294XL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/578712/rtos-tm4c129enczad-example-uartecho-project-has-memory-space-error

器件型号:TM4C129ENCZAD
Thread 中讨论的其他器件: EK-TM4C1294XL

工具/软件:TI-RTOS

我正在尝试构建 CCS V7中包含的 uartecho 示例(C:\TI_ccs\tirtos_tivac_2_16_01_14\packages/examples\sources\uartecho)、其中包括 uartecho.c 和相应的.cfg 文件。 我创建了一个新的空 CCS 工程、并将这两个文件添加到工程中。 我还必须在 Properties-ARM 编译 器中添加编译器的包含路径、并将 board.h 文件添加到工程中、以完成编译步骤(编译操作自述文件会有所帮助)。 但是、编译后会出现链接器错误:


"configPkg/linker.cmd"、第166行:错误#10099-D:程序将无法装入可用内存。 ".resetVecs"大小为0x3c、与".intvecs"重叠、大小为0x208 (第0页)的定位失败

在论坛上进行一些搜索后、我发现了链接器.map 文件:

存储器配置

        名称           源   长度     使用    未使用  的属性   填充
------------  ----  ------  ----  ----  --------  
 闪                存00000000  00100000 00012392 000edc6e R X
 SRAM                 20000000  00040000 00003c4b 0003c3b5 RW X


段分配映射

运行 origin load origin  length  init length atts members
------  ------ ------ ------ ---- ----
00000000   00000000   0000003c  0000003c   r--
 00000000   00000000   0000003c  0000003c   r-.Vecresets
00000000   00000000   00000208  00000208   r--
 00000000   00000000   00000208  00000208   r--.intvecs
00000208   00000208   00012190  00012190   r-x
 00000208   00000208   0000f0b2  0000f0b2   r-x .text
 0000f2bc   0000f2bc   00002f20  00002f20   r--.const
 000121e0   000121e0   000001b8  000001b8   r-.cinit
20000000   20000000   00000360  00000000   Rw-
 20000000   20000000   00000360  00000000   rw-.vecs
20000400   20000400   000038ec  00000000   rw-
 20000400   20000400   00002ecb  00000000   rw-.bss
 200032cc   200032cc   00000720  00000000   rw-.data
 200039ec   200039ec   00000300  00000000   rw-.stack


部分分配映射

 输出                                 属性/
段  页   原点     长度      输入段
----  --------   ------   --------
.intvecs  0   00000000   00000208     
                 00000000   00000208    tm4c129enczad_startup_ccs.obj (.intvecs)

.resetVecs
0            00000000   0000003c    分配失败
.text     0   00000208   0000f0b2     
                 00000208   0000065c    EK_TM4C129EXL.obj (.text)
                 00000864   00000004    usblib.lib:usbdma.obj (.text:DMAUSBStatus)

看起来.resetVecs 与 intVecs 具有相同的起始地址吗? 为什么会这样、我应该如何解决?

感谢你能抽出时间并提供帮助。

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

    上面的屏幕截图显示了.cfg 中的程序视图。 我看到.resetVec、配置为从0x0开始... 我看不到.intvecs 的任何对应字段。 应该位于 RTOS 配置的这个"页面"中、如果是、在这里(我浏览了 cfg 查看器中的所有内容...)

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

    很抱歉、您在 TIRTOS 演示中遇到问题。 遗憾的是、对该软件具有更多经验的人目前正在休假。 我还尝试构建和运行演示、并在创建正确的构建环境时遇到问题。

    如果此时不需要 RTOS、我建议您下载 最新版本的 TivaWare。 您将在以下位置找到类似的演示:

    C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl\UART_echo

    (不确定您使用的是哪种电路板、该版本适用于 EK-TM4C129XL)

    然后打开 CCSv7、依次选择"File"->"Import"、"Code Composer Studio"->"CCS Projects"->"Next"、然后浏览

    "C:\ti\TivaWare_C_Series-2.1.4.178\examples\boards\ek-tm4c1294xl\UART_ECHO"

    选择完成。

    该工程应在不进行修改的情况下编译。 理解起来要简单得多、而且 RTOS 例程的所有额外行李都没有进行性能测量。

    如果你已经超过了这一点,我很抱歉。 只需告诉我、我将在星期一看到我可以做些什么来了解/调试 RTOS 示例。

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

    感谢您的快速回复。 我没有使用 TI 演示板之一。 我们有自己的板、带有129ENCZAD 芯片。 我现在只想测试 UART 接口。 您提到的 TivaWare 是严格针对 TI 开发板还是仅依赖于微控制器?


    再次感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该示例假设您使用25MHz 晶体、并且您可以将 UART0连接到 PC 上的串行端口。 否则、它独立于 TI 开发板。 (可针对其他晶振和其他 UART 端口修改软件。) TivaWare 本身仅依赖于微控制器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、明白了、谢谢。

    如果你能在回来时带其他工程师(你提到的那位正在度假)来讨论这个问题、我会非常感激。 我真的想了解这里的问题、并运行它、因为它非常接近我需要执行的测试操作。 再次感谢您的参与和帮助。

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

    [引用 user="Erik skullerude">.resetVecs 与 intVecs 具有相同的起始地址吗? 为什么是这样、我应该如何修复?[/quot].resetVecs 是 TI-RTOS 启动代码的中断向量。  .intvecs 是创建新空工程时 CCS 添加的启动代码的中断向量。 拥有这两组中断向量会导致链接器错误。

    由于 TI-RTOS 具有其自己的启动代码、因此如果您删除 _startup_ccs.c 源文件和 在创建空 CCS 工程时添加的.cmd 链接器命令文件、该文件应删除尝试将.resetVecs 和.intvecs 放置在闪存中的同一地址时出现的链接器错误。

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

    感谢您提供的信息和建议。 我从工程中排除了 tm4c129enczad_startup_ccs.c 和 tm4c129enczad.cmd 文件、运行 Project Clean、然后生成。 结果如下:

    警告#10247-D:创建不带 SECTIONS 规范的输出段".text"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".bss"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".data"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".const"
    警告#10247-D:在没有 SECTIONS 规范的情况下创建输出段".bss:.common"
    警告#10247-D:在不使用 SECTIONS 规范的情况下创建输出段".cinit"
    "configPkg/linker.cmd"、第161行:警告#10096-D:指定的地址位于内存映射之外
    错误#10264:默认存储器范围与现有存储器范围 RAM 重叠

    似乎我真的在杂草中。 另一个论坛建议从一个示例项目开始,而不是从头开始设置一个新项目。 在从头开始创建项目之前、一个人是否必须学习大量内容?