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.

[参考译文] 编译器/TMS320F2.8377万D:引导加载器应用程序中FlashAPI库文件没有匹配的部分警告...

Guru**** 2553260 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/580121/compiler-tms320f28377d-no-matching-section-warning-for-flashapi-library-file-in-bootloader-application

部件号:TMS320F2.8377万D
线程中讨论的其他部件:SysBIOSTMS320F2.8377万S

工具/软件:TI C/C++编译器

亲爱的朋友们:

我正在通过通信对377D控制器进行闪存编程。 相应地修改命令文件,需要将Flash API库文件(.obj文件)复制到RAM。 但在建筑物下方时,会显示警告。

"无匹配部分"。

我在链接程序属性中检查了文件搜索路径,这也是正常的。

我陷入了这个问题,因为从库中为那些.obj文件分配了内存。 请帮助。

提前感谢!

Raghuchandar。

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

    要了解我的答案,请阅读Wiki文章 链接器命令文件入门的前半部分

    诊断程序...

    Raghuchandar Rajula 说:
    "没有匹配的部分"。[/QUOT]

    应该有与其关联的行号。  这意味着,对于链接程序命令文件的该行,找不到与规范匹配的输入部分。  

    Raghuchandar Rajula 说:
    内存未分配给库中的这些.OBJ文件。[/QUOT]

    这些目标文件中的任何代码或数据是否在任何地方使用?  检查映射文件中是否存在库名称。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在尝试获取链接器以将闪存库链接到代码时也遇到此问题。
    我正在将CCS 6.1 1与2.8377万配合使用
    我已经能够编译和链接2.8377万s flash_programming_CPU1项目的示例代码并查看地图文件。
    我从链接程序命令文件复制了该示例应用程序的代码,并且得到了相同的警告,即没有任何部分,它引用的行号是库的加载。
    不同之处在于我的应用程序是SysBIOS应用程序。 在app.cfg的boot部分,我正在为闪存函数指定相同的load和run段,如下所述。
    链接器命令文件上的DOCO对此没有任何说明,因为对该组的解释不是很好。
    下面是链接程序命令文件中加载库的部分,我已经标记了出现节错误的行。 这条完全相同的行在示例应用程序中工作。
    我非常感谢能够帮助我解决此问题。
    谢谢
    Maury



    Ramfuns
    {-l F021_API_F2837xD_FPU32.lib} ***** 警告:未定义任何部分

    }负载= FLASHD,
    运行= D01SARAM, ****已从示例修改为与我的Flash地图匹配
    load_start(_RamfuncsLoadStart),
    load_size (_RamfuncsLoadSize),
    load_end (_RamfuncsLoadEnd),
    run_start(_RamfuncsRunStart),
    Run_Size (_RamfuncsRunSize),
    Run_End(_RamfuncsRunEnd),
    页面= 0
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您要按特定顺序分配彼此相邻的多个输出部分时,将使用组。 您显示的组只有一个输出部分。  因此,您不需要组。  

    此输入部分语法...

    [报价用户="maurywalters"]{-l F021_API_F2837xD_FPU32.lib}[/报价]

    .虽然合法,但不寻常。  这意味着分配该库中的所有输入节(.text,.data等)。  你更可能想写...

    ramfuncs
    {
    -l F021_API_F2837xD_FPU32.lib(.text)
    }
    load = FLASHD,
    run = D01SARAM,
    load_start(_RamfuncsLoadStart),
    load_size(_RamfuncsLoadSize),
    load_end(_RamfuncsLoadEnd),
    run_start(_RamfuncsRunStart),
    run_size (_RamfuncsRunSize),
    run_end (_RamfuncsRunEnd),
    page = 0 

    这表示只有库中的.text部分(包含代码)分配在此输出部分。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George,
    谢谢,我刚刚从链接程序命令文件部分定义复制了闪存示例代码。
    我尝试了你上面所说的符号,却得到了同样的错误
    Ramfuns

    -l F021_API_F2837xD_FPU32.lib (.text)
    }
    负载= FLASHD,
    运行= D01SARAM,
    load_start(_RamfuncsLoadStart),
    load_size (_RamfuncsLoadSize),
    load_end (_RamfuncsLoadEnd),
    run_start(_RamfuncsRunStart),
    Run_Size (_RamfuncsRunSize),
    Run_End(_RamfuncsRunEnd),
    页面= 0
    我想也许我们在ramfunc段声明之后遗漏了一个
    所以,我又加了一个,还是同样的问题
    我在其中一个工具中看到了一个示例,并将加载库行移至ramfuncs部分声明之后
    但仍会收到相同的警告,并且库不链接。
    ramfuncs:
    负载= FLASHD,
    运行= D01SARAM,
    load_start(_RamfuncsLoadStart),
    load_size (_RamfuncsLoadSize),
    load_end (_RamfuncsLoadEnd),
    run_start(_RamfuncsRunStart),
    Run_Size (_RamfuncsRunSize),
    Run_End(_RamfuncsRunEnd),
    页面= 0
    -l F021_API_F2837xD_FPU32.lib (.text)
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    maurywalters 说:
    我尝试了您在上面指出的符号,但得到了相同的错误[/QUOT]

    请显示错误文本。  如果显示"没有匹配部分",请查看 此论坛主题 是否有用。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George,
    控制台中的错误如下所示,其标记的行是尝试加载库的行
    -l F021_API_F2837xD_FPU32.lib (.text)

    "../TMS320F2.8377万S_NO_APPL.cmd",第105行:警告#1.0068万-D:无匹配部分

    我查看了您最近发布的链接,并尝试在分配其他计划领域之前移动ramfuns部分,但收到了相同的警告。
    我看到在示例中使用了几个语法,但不清楚什么是正确的。
    -l F021_API_F2837xD_FPU32.lib (.text)
    -lrts64plus_elf.lib<memcpy64.obj>(.text:memcpy)
    在某些情况下,它是带有空格的-l,而库名则会忽略空格。
    在某些情况下,目标由>(节名)表示。
    加载库时,指定内存位置而不是节的正确语法是什么。

    请注意,ramfuncs部分在没有此加载库行的情况下工作,因为有一些闪存init和延迟函数放置在那里。

    我不理解的是,Group语法在非BIOS应用程序(示例Flash应用程序)中工作,但在SysBIOS应用程序中不工作。 这似乎表明SysBIOS链接器命令文件与我的命令文件之间存在冲突。 我尝试了链接顺序设置,但未解决问题
    Maury
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George,
    也许我不明白这一警告究竟是指什么。
    是没有为此库的链接器部分定义任何部分,还是该部分已被使用,或者.....
    为了更好地理解这一点,我尝试将不同的库加载到其他部分,甚至不是ramfuns部分,似乎我收到了相同的警告,即使我尝试使用以下命令将库加载到闪存页面
    libfuns:> FLASHD | FLASHE PAGE =0

    -l F021_API_F2837xD.lib (.text)
    }

    我在项目中指定了库路径和库名称,并且在链接程序文件搜索路径中指定了库路径和库名称,并将其设置为在同一属性页上作为库链接程序输入包含。
    我是否包括了库?
    我看到其他一些帖子中,人们有相同的问题,但没有解决方案。
    感谢你的帮助
    Maury
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    对于其中一个有问题的链接,请附加链接程序命令文件和映射文件。  因此,论坛将接受它,添加(不更改)文件扩展名.txt。  例如,file.map将更改为file.map.txt。  这应该有助于我了解库F021_API_F2837xD.lib中的.text部分的情况。  

    谢谢,此致,

    -George

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

    George,

    啊,我忘记了必须重命名命令文件,现在 附加了,注意我已注释掉了部分链接库。

    地图附带了注释在中的部分,但它似乎  未将库与警告链接。

    e2e.ti.com/.../2313.TMS320F28377S_5F00_NO_5F00_APPL.txt</s>2.8377万

    e2e.ti.com/.../RFC.txt

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

    映射文件不显示库 F021_API_F2837xD_FPU32.lib中的任何输入部分。  这意味着主应用程序代码不调用该库中的任何函数。  因此ramfuncs输出部分为空。  诊断“无匹配部分”表示没有与输入部分规格匹配的输入部分...

    -l F021_API_F2837xD_FPU32.lib (.text)
    

    谢谢,此致,

    -George

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

    George,

    这是有用的信息,但是 我在文件中有代码,调用了我假定为示例应用程序中使用的f2.8377万S的闪存API。

    当我在中注释该代码时,除了没有匹配部分之外,它将不会链接应用程序,因此我无法获取地图文件,我将获得以下未解析的外部内容

    说明 资源 路径 位置 类型
    链接期间遇到#1.001万错误;“RFC.Out”未构建 NGEN控制器   C/C++问题
    <a href="file:/c:/ti/ccsv6/tools/compiler/dMED/HTML/1.0234万.html">#10234-D</A> 未1.0234万未解析的符号仍然是 NGEN控制器   C/C++问题
    未解析的符号Fapi_initializeAPI(volatile,首先引用在FMC_Registers NGEN控制器   C/C++问题中
    未解析的符号Fapi_setActiveFlashBank(Fapi_FlashBankType),首先引用于./UnloadApp.obj NGEN控制器   C/C++问题

    这些函数在Flash API 包含文件F021.h中列出,并在示例应用程序中发布

    此外 ,调用闪存API的函数也在应用程序中引用。

    如果对调用进行注释并允许应用程序链接,我可以在它们中设置断点。

    为了验证这一点,我在main中实例化了对象,并运行到代码,如果在中对其进行了注释,则该代码将调用Flash API。

    Maury

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

    我不确定如何解释错误诊断。  它是编译器输出和CCS中“问题”视图格式化的混乱组合。  下次请从控制台视图复制并粘贴编译器输出。  

    也就是说,我认为这意味着代码调用函数 Fapi_initializeAPI和 Fapi_setActiveFlashBank,但无法找到这些函数的实现。  通常,这意味着链接程序看不到包含这些函数的库。  这毫无意义。  但这是我理解它的唯一方式。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George,
    我同意链接器没有将此库链接到应用程序,我不理解导致此行为的原因。
    它不像它说的找不到库或没有足够的空间或其他东西。
    我认为这是因为警告"没有匹配"部分与此相关。
    该警告是否会导致链接程序不链接库?
    注意:我尝试将此内容放在ramfuncs部分,然后将其移至(Flash_API)以尝试获取更多信息。
    目前我还没有将Flash_API从闪存复制到代码中的RAM -这是个问题吗?

    以下是来自控制台的消息:
    链接>
    "../TMS320F2.8377万S_NO_APPL.cmd",第121行:警告#1.0068万-D:无匹配部分

    未定义 首次引用
    符号 在文件中
    ------------------- --------
    FAPI_initializeAPI (volatile FMC_Registers *,unsigned long)./UnloadApp.obj
    FAPI_setActiveFlashBank (FAPI_FlashBankType) ./UnloadApp.obj

    错误#1.0234万-D:仍存在未解析的符号
    错误#1.001万:链接期间遇到错误;未生成“RFC.Out”

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

    此时,我看到的唯一前进方式是提交完整的CCS项目。  这是诊断这个问题的唯一方法。  有关 如何提交项目的详细信息,请参阅此帖子。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    George,
    感谢您的帮助,它引导我朝着解决方案的方向了解警告的含义。
    由于闪存API库的标头被发现,因此f021.h不包含C++构造
    #ifdef __cplusplus
    外部"C"{
    #endif
    所以我们看不见的所有函数,所以库没有被调用,因此没有链接。
    当我向函数添加调用时,由于C++名称转换,它们无法解析
    Maury
    我将关闭此问题