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.

[参考译文] CCS/MSP430FR2675:编译器不会链接 ROM 中的 CapTIvate™︎软件库

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/888440/ccs-msp430fr2675-compiler-does-not-link-captivate-software-library-in-rom

器件型号:MSP430FR2675
主题中讨论的其他器件:MSP430FR2512MSP430FR2522MSP430FR2676

工具/软件:Code Composer Studio

我在该器件上使用 CapTIvat 函数。 我设法使软件和硬件正常工作(只有1个接近传感器)。

我意识到、编译器不会在现有 ROM 库中链接。

 

我在"rom_captate.h"中找到了以下行

//! MSP430FR2512器件 ROM 头文件
//
#elif defed (__MSP430FR2512__)
#include "rom_headers/rom_captate_msp430fr2522_family.h"

//! MSP430FR2676器件 ROM 头文件

//
#elif defed (__MSP430FR2676__)
#include "rom_headers/rom_captate_msp430fr2676_family.h"

其他
#warning "failed to match a ROM include file.(警告"未能匹配 ROM 包含文件。)"
#endif

 

 

(在"rom_map_captate.h"文件中、声明并启用 ROM_CAPT_XXX 函数

 

似乎没有 MSP430FR2675配置?? 但根据数据表、此处显示了 ROM 库

 

我在项目菜单中将器件更改为 MSP430FR2676、并再次编译。

我打开了"Memory Allocation"->仍然没有使用 ROMLIB!!

 

1) 我未能使用 ROMLIB 的原因

2) 如何获取 FR2675 ROMLIB

 

非常感谢

此致

Kurt

 

 

 

 

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

    您好、Kurt、

    将来、在制作新主题时、请使用更具描述性的标题。

    [引用 user="Kurtlin"]似乎没有 MSP430FR2675配置 ??? 但根据数据表、ROM 库位于此处

    你是对的。 数据表中的表6-31确实显示 MSP430FR2676器件在 ROM 中具有 CapTIvate 库。

    [引用 user="Kurtlin"]2.) 如何获取 FR2675 ROMLIB

    查看 《CapTIvateTm技术指南》中的“ROM 中包含 CapTIvateTm软件的器件”部分,我找到了以下说明。 他们应该帮助回答您的问题。

    示例:

    要调用库函数“foo()”,建议进行隐式 ROM 调用 map_foo()。 编译器通过 rom_map_captivate.h 文件进行解析、以确定该函数是否驻留在 ROM 中、如果驻留在 ROM 中、则会进行 ROM 调用。 如果 ROM 中不存在此函数、编译器将调用预编译的库版本。

    可以使用 foo()从预编译的库中显式调用函数“foo()”。 链接器将在链接过程中从预编译的库中提取此函数、并将该函数添加到 FRAM 程序存储器中。 要从 ROM 中显式调用函数“foo()”,请使用 ROM_foo()。 这将强制编译器调用 ROM、而不会影响 FRAM 程序存储器。

    此致、

    James

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

    尊敬的 James:

     感谢您的回答。

    所有 cap 函数都在"rom_captate_msp430fr2676_family.h"中声明

    例如

     #define ROM_CAPT_computeArcTanApprovx                                         \
           ((uint16_t (_cc_rom *)(int32_t i32XComp、                            \
                                   int32_t i32YComp)) rom_CAPTIVATE_JUMPTABLE[1])

    在"rom_map_captate.h"中重新定义的

    / ROM 与 FRAM 调用 CAPT_computeArcTanApprovx()的宏
    #ifdef ROM_CAPT_computeArcTanApprovx
    #define MAP_CAPT_computeArcTanApprovx \
           ROM_CAPT_computeArcTanApprovx
    其他
    #define MAP_CAPT_computeArcTanApprovx \
           CAPT_computeArcTanApprovx
    #endif

    到目前为止还不错、但当我打开映射文件时:

    BSLCONFIGURATIGISNA 0000ff88  00000002 00000002 00000000 RWIX FFFF
     BSLCONFIGURATION     0000ff8a  00000002 00000002 00000000 RWIX FFFF 存储器配置

            名称           源   长度     使用    未使用  的属性   填充
    ------------  ----  ------  ----  ----  --------  
     TINYRAM              00000006  0000001a 00000000 0000001a RWIX
     BSL0                 00001000  00000800 00000000 00000800 RWIX
     信息                 00001800  00000200 00000000 00000200 RWIX
     TLVMEM               00001a00  00000200 00000000 00000200 RWIX
     引导代码             00001c00  00000400 00000000 00000400 RWIX
     RAM                  00002000  00001800 00000276 0000158a RWIX
     FRAM                 00008000  00007f80 00004480 00003b00 RWIX
     JTAGSIGNATURE        0000ff80  00000004 00000004 00000000 RWIX FFFF
     BSLSIGNATURE         0000ff84  00000004 00000004 00000000 RWIX FFFF

     BSLI2CADDRESS        0000ffa0  00000002 00000002 00000000 RWIX FFFF
     INT00                0000ffa2  00000002 00000000 00000002 RWIX

    没有提到 ROM!!???

    此致

    Kurt

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

    您好、Kurt、

    很棒的工作! 我无法解释为什么 ROM 未显示在映射文件中。 您是否正在使用 CapTIvate 链接器文件? 您是否选择了正确的内存模型? 这些器件的所有 CapTIvateTm软件库项目都必须使用小代码小数据存储器模型进行编译,以便与 ROM 函数和预编译库兼容。

    您是否遵循 了将现有 CapTIvate 项目移植到新器件的说明

    此致、

    James

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

    尊敬的 James:

     如果使用小模型、编译器会抛出错误、

    我找到了以下 define 语句

    #if (defined (__TI_Compiler_version__)&&!defined (__large_data_model__))||\
       (已定义(__IAR_systems_icc_)&&(__data_model__!=__data_model_large__))
    错误"此 ROM 仅支持大数据模型。"
    #endif
    #ifndef ROM_CAPTIVATE_MSP430FR2676_H_
    #define ROM_CAPTIVATE_MSP430FR2676_H_

    #if (defined (__TI_Compiler_version__)&& defined (__large_code_model__))||\
       (已定义(__IAR_systems_icc__)&&(__code_model__=__code_model_large__)

    看起来你必须使用大模型吗?!!!

    此致

    Kurt

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

    您好、Kurt、

    我将对此进行检查。 同时、您使用的是哪个 CapTIvate 设计中心版本? 是否有方法可以尝试更新到最新版本?

    此致、

    James  

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

    您好、Kurt:

    我可以帮助您向前迈进。 听起来您已经做了一些很好的工作。 但是、就像 James 问的、您的版本是什么? FR2675发布之前、您可能有一个版本。 因为我看到一侧的"rom_captate.h"中的 FR2675。

    正如您所遇到的、我不会对代码/数据模型太担心。 我们的接头将会错误并指向正确的方向、这不是我们期望人们知道的。 您正确地说 FR2675应该使用大型代码模型。

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

    尊敬的 James / Wallace:

     我从您的网站(1.82.00.06)加载了当前的 CapTIvateDesignCenter 并创建了一个新项目。 我在 main.c 文件中添加了几个调用来尝试它。 同样、也是如此、未使用 ROM 库

    我认为、如果我向您发送项目、您可以尝试访问 yourself.e2e.ti.com/.../PTL3_5F00_Type2_5F00_HRC.zip、这会更容易

    感谢你的帮助

    此致

    Kurt

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

    您好、Kurt:

    感谢您的分享。 我想我已经确定了您问题的答案。

    澄清#1

    如果您查看.map 文件(来自您发布的项目):

    存储器配置
         名称       使用        的原始长度未使用  属性  填充
    ------------  ----  ------  ----  ----  --------  
     TINYRAM         00000006  0000001a 00000000 0000001a RWIX
     BSL0          00001000  00000800 00000000 00000800 RWIX
     信息          00001800  00000200 00000000 00000200 RWIX
     TLVMEM         00001a00  00000200 00000000 00000200 RWIX
     引导代码        00001c00  00000400 00000000 00000400 RWIX
     RAM           00002000  00002000 0000017e 00001e82 RWIX
     FRAM          00008000  00007f80 000011c4 00006dbc RWIX
     JTAGSIGNATURE      0000ff80  00000004 00000004 00000000 RWIX FFFF  
     复位          0000fffe  00000002 00000002 00000000 RWIX
     FRAM2          00010000  00008000 00000000 00008000 RWIX
     ROMLIB         000c0000  00004000  00000000 00004000 RWIX
     BSL1          000ffc00  00000400 00000000 00000400 RWIX
    "已使用"部分的计算方法仅是应用 程序插入到该名为 ROMLIB 的存储器部分中的代码量。 在所有情况下、无论是否使用 ROM、"已使用"段都将始终为0、因为 ROM 已存在:应用程序不会将任何代码放入该段。 它 表示  从 ROMLIB 段中使用的代码量。
    澄清#2

    绝大多数、但不是所有的 Capt 函数都被放置在 ROM 中。 出于各种原因、FRAM 非易失性存储器中存在一些保留空间。 总体而言、您仍应看到显著的内存和速度节省。 因此、您看到的仍然占用 FRAM 空间的 Capt 函数是有意使用的、这意味着它们不包含在 ROM 中(有时由用户选择、如果它们不使用 MAP_或 ROM_前 缀)。 您无法看到有多少函数成功使用 ROM、其中有很多。
    希望这对您有所帮助!

     
    为好奇心和未来参考提供额外信息
    那么、您如何查看哪些函数 使用 ROM?
    简而言之、没有种仅使用映射文件的综合方法。 由于我们的 ROM 是预编译/预加载的、并使用预处理器指令(#ifdef、#define)和函数指针调用、因此生成映射文件的链接器不知道内容。
    当然、您可以在调试器中跟踪函数调用的进度、并看到这些函数调用确实会进入 ROM 而不是 FRAM。 但这不是一个像.map 文件那样的完整分解文件。
    但反过来说要容易得多。 映射文件可以向您展示所有函数、这些函数不是从 ROM 中调用的、而是在 FRAM 中调用的。 这在.map 文件的.text 段中很容易看到。
    有趣的练习是验证列出的所有函数在 ROM 中都不存在 captate_fr2676_family.lib (不会)。 它会告诉您函数在存储器中的确切起始位置以及其长度。
    在此特定的案例研究中、如果未使用 ROM、.text 段将会更长。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wallace、

      非常感谢您的回复。 我可以看到使用了 ROM 库。

    我是为2675和2676编译的、在我的程序中有大约1k 的差异。

    我的问题是、现在我使用的是2675、它会出现编译器警告"未使用 ROM 库"、因为它没有定义。

    rom_captive.h 文件仅具有 __MSP430FR2676__的定义

    是否可以仅复制和重命名  

    rom_captivate_msp430fr2676_family.h   

    文件到

    rom_captivate_msp430fr2675_family.h

    不确定有何差异????

    非常感谢

    此致

    Kurt

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

    您好、Kurt:

    我将分两部分回答您的问题:

    1. FR2676和 FR2675之间的 ROM 恰好没有差异。 但是、您可以添加、而不是重命名文件
      #elif defed (__MSP430FR2675__)
      #include "rom_headers/rom_captate_msp430fr2676_family.h"
      ROM_captate.h 内的代码行
    2. 但是、这不是必需的、因为这已经在 CapTIvate 软件的最后几个版本中完成。 事实上、我看到这已经在您之前发送的项目的.zip 中完成。 您能否再次检查您是否使用的是最新版本?

    谢谢、

    Wallace

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

    您好、Wallace、

     非常感谢您的帮助。 zip 文件是新创建的、因此 rom_captive.h 的版本较新。 我将新版本复制到基目录中、一切正常!

    此致

    Kurt