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/LAUNCHXL-F28379D:c2000ware 项目上的 endat22库

Guru**** 2526700 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/925637/ccs-launchxl-f28379d-endat22-library-on-a-c2000ware-project

器件型号:LAUNCHXL-F28379D
Thread 中讨论的其他器件:controlSUITEC2000WARE

工具/软件:Code Composer Studio

大家好、我想在我使用 c2000ware 开发的项目中将 endat22库与位置管理器一起使用、但它会导致库出现一些问题、因为 endat22库来自 controlSUITE。

我尝试使用 c2000ware 中的兼容性库、但当我尝试构建时、我在 F2837xD_GlobalPrototypes.h 中遇到函数空闲错误

是否有办法解决冲突?

此致  

Ludovico

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

    [引用 user="Ludovico Bonan"]您好,我想在我使用 c2000ware 开发的项目中与位置管理器一起使用 endat22库, 但它会导致库出现一些问题,因为 endat22库来自 controlSUITE

    请查看此主题是否适用:

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/885488/3275550?tisearch=e2e-sitesearch&keymatch=ar2000#3275550

    此致

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Lori、 您链接的主题非常有用、但我不知道如何使用存档工具(装配手册不是很清楚)以及如何准确地解决问题。 您是否愿意提供更精确的结构? 我认为我的 F2837xD_GlobalPrototypes.h 文件有问题。 提前感谢您的参与。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我怀疑是 GlobalVariableDefs 导致了该问题。 您可以使用归档器从 controlSUITE 库中删除该目标文件。 有关 归档器选项、请参阅第170页的《汇编工具用户指南》(http://www.ti.com/lit/spru513)。  删除文件是选项-d.   归档器 AR2000.exe 将位于安装 CCS +编译器的 CCS/codegen bin 目录中。

    此致

    Lori

    编辑:将选项从-x 更正为-d

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

    我的上述帖子中有一处更正。  -d 从归档文件中删除文件。  (-x 提取它、但不删除它)。

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

    感谢 Lori 的快速回复。

    我在 controlSUITE 目录中找不到 GlobalVariableDefs 库或文件对象。

    最接近的是 F2837xD_GlobalVariableDefs.c 文件。

    我尝试输入"ar2000.exe -x C:\ti\controlSUITE\device_support\F2837xD\V210\F2837xD_headers\sources\F2837xD_GlobalVariableDefs.c"、但我收到"不是存档"错误。

    此致

    Ludovico

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

    您好!

    命令如上所示。  您的 libname 将是 endat 库。  文件名将是您要从存档(即库)中提取(删除)的文件、因为它会导致冲突。  使用选项-d 删除文件。  

    此致

    Lori

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、我尝试了命令 AR2000 -d PM_endat22_lib.lib F2837xD_GlobalVariableDefs.obj、我得到以下结果: AR2000 -d C:\ti\controlSUITE\libs\app_libs\position_manager\v01_00_00\endat22\lib\ti_endatlib\lib\lib_lib\lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib_lib 我还尝试使用-x、未指定文件名、使用 F2837xD_GlobalVariableDefs.c 和.pp 以及上述所有可能的组合、但没有结果。 此致 Ludovico
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Ludovico Bonan"]但如果我尝试构建项目时没有发生任何更改,我仍然会遇到相同的错误。

    请发布错误(屏幕截图将起作用)。

    谢谢你

    Lori

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

    大家好、在这里可以看到 错误的一些截屏

    此致  

    Ludovico

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

    Ludovico、

    utils.c 文件是您创建的一个文件还是 TI 软件创建的一个文件?  我还无法在我们的软件中找到它。  

    此致

    Lori

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

    您好、Lori、

    我还创建了 utils.c 文件和 utils.h、其中包含一些用于我们项目的函数。

    此致

    Ludovico

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

    在 utils.c 文件中、您是否#include 来自 C2000Ware 和 controlSUITE 的器件头文件?  我建议使用 C2000Ware 中的副本。   

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

    您好、Lori 这是 utils.h 标题

    #ifndef utils_H_
    #define utils_H_
    
    // include
    #include "ePWM_management.h"
    #include "math.h"
    //#include "F28x_Project.h" //器件头文件和示例包括文件
    #include "endat.h"
    #include "device.h"
    #include "driverlib.h"
    
    
    //定义
    #define M_PI 3.141592658979323846 //pi
    
    //原型
    void fakeRef (double theta_me、float * U_alfa、float * U_beta);
    
    void spaceVectorMod (float U_alfa、float U_beta、float Vdc、float fsw、int * cmp);
    
    #endif 

    我尝试注释 C2000Ware 中的#include F28x_Project.h 和#include 头文件(driverlib.h 和 device.h)、但仍然会出现相同的错误。

    此致

    Ludovico

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

    Ludovico、

    我无法重现问题。  我从 c2000Ware 中获取了其中一个 driverlib 示例。  

    添加了您显示的除 epwm_management.h 以外的其他内容

    (我假定 math.h 是标准库一)

    //
    //包含的文件
    //
    #include 
    #include "endat.h"
    #include "device.h"
    #include "driverlib.h" 

    修改 PM_endat22_Include.h 以使用"device.h"和"driverlib.h":

    //EnDat 函数库
    #include 
    //#include "F28x_Project.h"
    #include "device.h"
    #include "driverlib.h"
    
    #define ENDAT221
    #define ENDAT210 

    ePWM 管理.h 文件中包含什么内容?

    此致

    Lori

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

    您好、Lori 我们已经更正了错误、从 项目的所有部分中删除了#include "F28x_Project.h"、并修改了 PM_endat22_Include.h 以使用"device.h"和"driverlib.h"。

    现在我们还有另一个问题:endat.c 中的大多数指令都已过时、我们不知道如何替换它们。

    如果我们尝试构建、我们会遇到这些错误

    感谢您的支持  

    此致

    Ludovico

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

    您好!

    这些变量在 F2837xD_GlobalVariableDefs.c 中定义、位于:C:\ti\c2000\C2000Ware \device_support\f2837xd\headers\source。  确保此文件是项目的一部分。

    此致

    Lori

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

    嗨、Lori 我尝试将 F2837xD_GlobalVariableDefs.c 添加到项目中、我将#include F2837xD_Device.h 替换为#include device.h (因为它无法打开前者)、如果我尝试构建、我会遇到100多个错误  

    我在 https://we.tl/t-mW5W7JRaxJ 链接中提供的 zip 文件中导出了项目 (一周内到期)。 如果您可以查看一下、了解如何解决我们的问题、那将会很好。
    提前感谢

    此致

    Ludovico

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

    Ludovico、

    TI 网络不允许我访问这些文件。  我建议从以下项目开始-它包括针对 driverlib 和位字段结构的所有设置。   

    C:\ti\c2000\C2000Ware_ \device_support\f2837xd\examples\cpu1\empty_bitfield_driverlib

    此致

    Lori

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

    您好、Lori 您的建议非常有帮助、我能够将 endat22文件添加到空项目中、并且在构建时没有错误!

    但是、仍然有一个问题:在我尝试添加主代码之后、我在编译时遇到此错误

    在尝试进行故障诊断后、我注意到错误是由 endat.c 和 endat_commands.c 中的函数引起的

    这是我的 main.c 文件、它与原始工程中的 PM_endat22-Main.c 基本相同。

    //########################################################################################################################
    //
    ////文件:empty_bitfield_driverlib_main.c
    //
    //标题:空示例
    //
    空位字段和 Driverlib 示例
    //
    //此示例是用于位字段和 Driverlib
    //开发的空项目设置。
    //
    //##########################################################################################################################
    //$TI 发行版:F2837xD 支持库 v3.10.00.00 $
    //$发行 日期:星期二5月26日17:13:46 IST 2020 $
    //版权所有:
    //版权所有(C) 2013-2020 Texas Instruments Incorporated - http://www.ti.com/
    //
    
    只要
    满足以下条件,就允许以源代码和二进制形式重新分发和使用//修改或不修改//:
    //
    //重新分发源代码必须保留上述版权
    //声明、此条件列表和以下免责声明。
    //
    //二进制形式的再发行必须复制上述版权
    //声明、此条件列表和//
    
    分发随附的//文档和/或其他材料中的以下免责声明。
    ////
    未经
    
    事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。
    ////
    本软件由版权所有者和贡献者提供
    //“按原样”,不
    
    承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权
    //所有者或贡献者都不对任何直接、间接、偶然、
    //特殊、模范、 或相应的损害(包括但不
    限于采购替代产品或服务;丧失使用、
    //数据或利润; 或业务中断)、无论
    
    出于何种原因使用
    本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。
    //$
    //########################################################################################################################
    
    //
    //包含的文件
    //
    #include "main.h"
    
    //
    Main
    //
    void main (void)
    {
    //初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //此示例函数位于 F2837xD_SYSCTRL.c 文件中。
    InitSysCtrl();
    //步骤3. 清除所有中断并初始化 PIE 矢量表:
    //禁用 CPU 中断
    Dint;
    
    //将 PIE 控制寄存器初始化为默认状态。
    //默认状态为禁用所有 PIE 中断和标志
    //被清除。
    //此函数位于 F2837xD_PIECTRL.c 文件中。
    InitPieCtrl();
    
    //禁用 CPU 中断并清除所有 CPU 中断标志:
    IER = 0x0000;
    IFR = 0x0000;
    
    //使用指向 shell 中断的指针初始化 PIE 矢量表
    //服务例程(ISR)。
    //这将填充整个表,即使是中断也是如此
    //在本例中未使用。 这对于调试很有用。
    //可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
    //此函数可在 F2837xD_PieVect.c 中找到
    InitPieVectTable();
    
    // endat 操作的初始化例程-在 endat.c 中定义
    //配置外设并为所需模块启用时钟
    //根据 EnDat 操作的需要配置 GPIO 和 Xbar
    //在端数据结构中设置 SPI 外设并启用中断
    EnDat_Init();
    
    //运行所有 EnDat21命令的模板
    //这在实际应用中是可选的。
    ///在 endat_commands.c 中定义的函数
    endat21_runCommandSet();
    
    if (编码器类型== 22)
    {
    //运行所有 EnDat22命令的模板
    //这在实际应用中是可选的。
    ///在 endat_commands.c 中定义的函数
    
    endat22_runCommandSet();
    }
    
    //在 endat22操作中启用2个附加数据
    //这在实际应用中也是可选的。 在 endat.c 中定义的函数
    
    endat22_setupAddlData();
    
    //打印电缆传播延迟计算。
    //对于长电缆长度和更高的 EnDat 时钟频率、需要使用此选项
    //在 endat.c 中定义的函数
    
    EnDat_initDelayComp ();
    
    //切换到高频- 8.3MHz (=200/4*ENDAT_RUNTIME_FREQ_DIVIDER)
    PM_endat22_setFreq (ENDAT_RUNTIME_FREQ_DIVIDER);
    DELAY_US (800L); //延迟800us
    
    while (1)
    {
    if (编码器类型== 22)
    {
    //在 EnDat22模式下读取位置数据,同时启用2个附加数据
    ///更早版本、通过 endat22_setupAddlData 函数调用。
    //在 endat.c 中定义的函数
    endat22_readPositionWithAddlData();
    }
    其他
    {
    //在 EnDat21模式下读取位置数据。 在 endat.c 中定义的函数
    endat21_readPosition ();
    }
    }
    
    
    
    
    
    //
    ////文件结束
    //
    

    此致

    Ludovico

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

    未解析的符号位于 C:\ti\c2000\C2000Ware 中的 VCU 库中 \libraries\DSP\VCU 此库需要添加到项目中。  

    此致

    Lori

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

    嗨、Lori 我尝试使用链接器选项添加库、但这既未解决"未解析符号"错误、也未解决"程序无法放入可用存储器"错误。

    此时我不知道该怎么做、您能否查看链接器映射并告诉我是否有问题?

    我收到错误"line 62:error #10099-D:program will not fit into available memory、or the section contains a call site that requires a trampoline that not be generated for this section.(第62行:错误#10099-D:程序将无法放入可用内存中、或者该段包含需要无法为该段生成 对于大小为0x279apage 0的".text"段、定位/分块放置失败。  可用存储器范围:"。

    MEMORY
    {
    PAGE 0:
    /* BEGIN 用于“引导至 SARAM"引导加载程序模式*/
    
    BEGIN :origin = 0x000000,length = 0x000002
    RAMM0 :origin = 0x000123,length = 0x0002DD
    RAMD0 :origin = 0x00B000、length = 0x000800
    RAMLS0 :origin = 0x008000、length = 0x000800
    RAMLS1 :origin = 0x008800,length = 0x000800
    RAMLS2 :origin = 0x009000、length = 0x000800
    RAMLS3 :origin = 0x009800,length = 0x000800
    RAMLS4 :origin = 0x00A000、length = 0x000800
    reset :origin = 0x3FFFC0,length = 0x000002
    
    page 1:
    
    boot_RSVD :origin = 0x000002、length = 0x000121 // M0的一部分,引导 ROM 将此用于栈*/
    RAMM1 :origin = 0x000400、length = 0x0003F8 /*片上 RAM 块 M1 *//
    RAMM1_RSVD :origin = 0x0007F8,length = 0x000008 /*根据勘误咨询"Memory:Prepetching Beyond Valid Memory"(内存:有效内存之外的预取)来保留和不用于代码*/
    RAMD1 :origin = 0x00B800,length = 0x000800
    
    RAMLS5 :origin = 0x00A800,length = 0x000800
    
    RAMGS0 :origin = 0x00C000、length = 0x001000
    RAMGS1 :origin = 0x00D000、length = 0x001000
    RAMGS2 :origin = 0x00E000、length = 0x001000
    RAMGS3 :origin = 0x00F000、length = 0x001000
    RAMGS4 :origin = 0x010000,length = 0x001000
    RAMGS5 :origin = 0x011000,length = 0x001000
    RAMGS6 :origin = 0x012000,length = 0x001000
    RAMGS7 :origin = 0x013000、length = 0x001000
    RAMGS8 :origin = 0x014000、length = 0x001000
    RAMGS9 :origin = 0x015000,length = 0x001000
    RAMGS10 :origin = 0x016000,length = 0x001000
    
    // RAMGS11 :origin = 0x017000、length = 0x000FF8 //取消对 F28374D、F28376D 器件的注释*//
    
    RAMGS11_RSVD:origin = 0x017FF8,length = 0x000008 //根据勘误表中的“Memory:Prepetching Beyond valid Memory”*/
    
    RAMGS11保留并不用于代码 :origin = 0x017000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS12 :origin = 0x018000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS13 :origin = 0x019000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS14 :origin = 0x01A000、length = 0x001000 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 */
    RAMGS15 :origin = 0x01B000、length = 0x000FF8 /*仅在 F28379D、F28377D、F28375D 器件上可用。 移除其他设备上的线路。 *
    
    RAMGS15_RSVD:origin = 0x01BFF8,length = 0x000008 /*根据勘误咨询“Memory: pret撷取 超出有效内存”*/保留并不用于代码
    /*仅在 F28379D、F28377D、F28375D 器件上。 移除其他设备上的线路。 //
    
    CPU2TOCPU1RAM:origin = 0x03F800,length = 0x000400
    CPU1TOCPU2RAM:origin = 0x03FC00,length = 0x000400
    
    CANA_MSG_RAM :origin = 0x049000、length = 0x000800
    CANB_MSG_RAM :origin = 0x04B000、length = 0x000800
    }
    
    
    SECTIONS
    {
    codestart :>开始, PAGE = 0.text
    :>> RAMM0 | RAMD0 | RAMLS0 | RAMLS1 | RAMLS2 | RAMLS3 | RAMLS4,PAGE=0
    .cinit :> RAMM0, PAGE = 0.switch
    :> RAMM0, PAGE = 0.reset
    :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
    .stack :> RAMM1, PAGE = 1
    
    #if defined (_TI_EABI _)
    .bss :> RAMLS5,page = 1.bss
    :output :> RAMLS3,page = 0
    .init_array :> RAMM0, PAGE = 0
    .const :> RAMLS5,page = 1.data
    :> RAMLS5,page = 1
    .sysmem :> RAMLS5,page = 1#else
    
    .pinit :> RAMM0, PAGE = 0
    .ebss :> RAMLS5,page = 1
    .econst :> RAMLS5,page = 1
    .esysmem :> RAMLS5,page = 1
    #endif
    
    Filter_RegsFile:> RAMGS0,page = 1
    
    
    ramgs0 :> RAMGS0,PAGE = 1
    ramgs1 :> RAMGS1,page = 1
    
    #ifdef __TI_Compiler_version__
    #if __TI_Compiler_version__>=15009000
    .TI.ramfunc:{}>RAMM0, PAGE = 0
    #else
    ramfuncs:>RAMM0 PAGE = 0
    #endif
    #endif
    
    /*使用 IPC API 驱动程序时需要以下部分定义*/
    组:> CPU1TOCPU2RAM,PAGE = 1
    {
    PUTBUFFER
    PUTWRITEIDX
    GETREADIDX
    }
    
    组:> CPU2TOCPU1RAM,PAGE = 1
    {
    GETBUFFER:TYPE = DSECT
    GETWRITEIDX:TYPE = DSECT
    PUTREADIDX:TYPE = DSECT
    }
    
    /*以下部分定义适用于 SDFM 示例*/
    filter1_RegsFile:>RAMGS1,PAGE = 1,fill=0x1111
    Filter2_RegsFile:>RAMGS2,PAGE = 1,fill=0x2222
    filter3_RegsFile:>RAMGS3,PAGE = 1,fill=0x1111 Filter2_RegsFile
    :>RAMG24_RegsFile
    :> RAGS4,filtersFile = 0x443333,page = 0x24_RegsFile: >RAMGS5,PAGE = 1,fill=0x3333
    }
    
    /*//===========================================================================================================================================================================================================================================================================================================================================================================================================
    
    //文件结束。
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *
    

    如果有任何帮助、这里还有项目.zip 文件。

    e2e.ti.com/.../endat22_5F00_encoder_5F00_project_5F00_empty_5F00_bitfield.zip

    此致  

    Ludovico

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

    1) 1) 从原始 controlSUITE 项目中添加这两个链接器.cmd 文件。

    • PM_endat22_2837xD_RAM_lnk_CPU1.cmd  
    • F2837xD_Headers_CLB_CPU1.cmd

    2) 2)删除了2837xD_RAM_lnk_CPU1.cmd、或将其从编译中排除

    3) 3)链接 VCU0库: C28x_vcu0_library_fpu32.lib (而不是 vcrc 库)

    链接器可能会抱怨.TI.ramfunc 段丢失。  

    4) 4)添加突出显示的行至 PM_endat22... cpu1.cmd 文件  

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

    你好 Lori
    您的回答非常有用、我们 成功解决了我们的问题。
    感谢您的耐心和支持。
    祝你一切顺利

    Ludovico