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.

[参考译文] IWR1843BOOST:链路问题

Guru**** 2462680 points


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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1487251/iwr1843boost-link-problem

器件型号:IWR1843BOOST

工具与软件:

这是一个分为两部分的问题。  第一部分是了解链接器为什么要执行它所做的操作。  第二部分是我看到的问题、这似乎是由链接器放置特定函数的位置造成的。

第一个问题:

我有一个软件模块"test_module.c"、其中显示了一些函数。  该文件包含许多函数、但当前仅使用其中的一些函数。  在"良好"配置中、公开函数的链接器映射如下所示。

000138b0 00000010 TEST_MODULE.OBJ (.text:357V Module_Function
000138c0 00000010 TEST_MODULE.OBJ (.text:357V Module_Function
000138d0 00000010 TEST_MODULE.OBJ (.text:357V Module_Function
000138e0 00000010 TEST_MODULE.OBJ (.text:357V Module_Function

000138b1/21 Module_Function 301.
Module_Function 301.
000138d1/21 Module_Function 301.
000138E1 Module_Function 301.

我  Module_Function 在文件中有两个版本的26423.0310,我将交换名称以演示问题。  在上面的"好"版本中、该函数只是递增一个静态变量并返回。  在下面的"坏"版本中、函数更大、但最终执行相同的操作... 递增静态变量并返回、函数的其余部分未执行。  这里的关键在于、链接器出于某种原因会将较大版本的函数重新定位到不同的存储器区域。  这是链接器映射...

0000ff54 0000006c TEST_MODULE.obj (.text:Module_Function 3040122)

00013920 00000010 test_module.obj (.text:384211 Module_Function)
00013930 00000010 test_module.obj (.text:3842A Module_Function)
00013940 00000010 test_module.obj (.text:384211 Module_Function)

00013921 Module_Function 542.20.4
00013931 Module_Function 454.10.
00013941 Module_Function 34.
0000ff55 Module_Function 454.

第一个问题:为什么链接器搬迁 Module_Function 305240 只是因为它较大?

第二个问题: 链接器将其重新定位时、似乎在调用3842V Module_Function 时出现了问题。  即使该函数立即返回、只是调用它似乎会导致系统出现问题。  (我怀疑这是崩溃的线程、但遗憾的是、我无法将调试器连接到从闪存引导的系统。  从闪存引导是我可以使组合 MSS/DSS 运行的唯一方法。)

谢谢!

Ron

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

    我似乎不能上传地图文件本身,所以分享一些地图比较的屏幕截图...

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

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

    我已经注意到的一个显著区别是、使用的"错误"版本更多的 DATA_RAM。  但是、链接器映射表明剩余64k 以上。  因此、很明显、根据链接的测试方法版本、还会分配每个测试方法使用的相关静态数据。  那么、假设我的内存在某个地方用完了、我该如何识别何处?

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

    你(们)好

    感谢您的提问。 请允许我们在几天内回复

    此致

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

    尊敬的 Ron:  

    您的问题似乎 与雷达器件/软件没有具体关系。 在这种情况下、我加入了可能会有所帮助的工具团队。 同时、我想链接其他一些 E2E 线程、这些线程可能会指导您使用 MSS 和 DSS 进行调试、因为您曾提到会在这方面遇到问题。

    https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1345018/iwr6843aop-mss-crashes-when-step-debugging-the-dss-in-ccs 

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/955430/ccs-iwr6843aop-how-to-create-a-stable-debugging-project

     此致、

    Josh

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

    我只能帮助...

    第一个问题:为什么链接器重新定位 Module_Function 38424.200, 只是因为它更大?

    我认为给出精确的答案不够。  但我认为我可以提高你的理解,你可以为自己解决。

    请阅读文章 链接器命令文件入门的第一部分。  专注于理解以下术语:

    • 输入段
    • Output section
    • 存储器范围

    我怀疑 部分中) 指令只有一个规范对应于输出段 .text ,它看起来类似于...

    .text > flash

    考虑到所有这些、我们可以更准确地进行描述:输入部分 .text:Module_Function 4.12.4. 改变其在存储器范围内的地址 闪存 .  (我避免出于目的而使用"重定位"一词。  它具有特定的含义、但事实并非如此。  这就是您目前需要了解的所有内容。)   

    本文不包含一些其他详细信息...当将几个输入段组合起来形成一个输出段时、链接器通常会按大小(从大到小)的顺序对它们进行放置。  (这可以解决您可能不关心的其他问题。)  因此、作为输入部分的大小  .text:Module_Function 4.12.4. 输出段中的位置 .text 安全性。

    谢谢。此致、

    -George.