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.

[参考译文] CLA 2p2z 输出中的奇怪错误(变为无穷大)

Guru**** 2458270 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/677276/cla-2p2z-strange-error-in-output-goes-to-infinity

我尝试将 DPlib 与 CLA 结合使用、但遇到了问题。 我在现有 CLA 示例(CLA_ADC)中从 CLA DPlib 中添加了2p2z 的代码。 我有常数作为参考和反馈、只是为了查看它是否正确计算。 在2p2z 输出中、由于某种原因、我得到了一个常数1.99e30。 请参见下图。 以前有人有类似的问题吗?

BR Niclas

在 CLA.asm 文件中、我添加 了 CNTL_2P2Z_CLA 命令、如下所示。 ADC_CLA 的程序代码中的所有其他内容都可以正常工作。

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

    这是2p2z CLA 的链接器代码。  

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

    1.确保"out"变量位于 CLA 可访问空间中

    此外、还请注意、我们现在提供了 CLA C 编译器、用于 CLA、编写和调试时可能会更加容易。 我们还有带有 CLA C 的 DP 库
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复! "OUT"可供 CLA 访问、但我认为这与存储器有关。 在我添加了更多与2p2z 无关的代码后、问题消失了。 但现在2p2z 的作用在我继续在程序中添加更多内容时又奇怪了。

    我查看了 CLA 的 C 代码 DP 库、但计算似乎需要更多的周期。 如果可能、我更愿意使用汇编宏。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我的链接器文件中的代码。 您能看到是否有任何不良情况吗? 

    MEMORY { PAGE 0: /* BEGIN 用于“引导至 SARAM"引导加载程序模式*/ BEGIN :origin = 0x000000,length = 0x000002 RAMM1 :origin = 0x000480,length = 0x000380 /*片上 RAM 块 M1 */ RAML0L1 :origin = 0x008000、length = 0x000C00 RAML3 :origin = 0x009000、length = 0x000C18 CLARAM:origin = 0x009C19、length = 0x0003E8 reset :origin = 0x3FFFC0、length = 0x000002 IQTABLES :origin = 0x3FE000、length = 0x000B50 /*引导 ROM 中的 IQMath 表*/ IQTABLES2 :origin = 0x3FEB50、length = 0x00008C /*引导 ROM 中的 IQMath 表*/ IQTABLES3 :origin = 0x3FEBDC,length = 0x0000AA//引导 ROM 中的 IQMath 表*/ 引导 ROM :origin = 0x3FF27C,length = 0x000D44 page 1: boot_RSVD :origin = 0x000002,length = 0x00004E // M0的一部分,引导 ROM 将此用于栈*/ RAMM0 :origin = 0x000050、length = 0x0003B0 DataRAM :origin = 0x008C00,length = 0x000400// RAML2 */ CLA_CPU_MSGRAM:origin = 0x001480、length = 0x000080 CPU_CLA_MSGRAM:origin = 0x001500,length = 0x000080 } SECTIONS {// 设置“引导至 SARAM"模式: codestart 段(可在 DSP28_CodeStartBranch.asm 中找到) 将执行重定向到用户代码的开始。 */ codestart :>开始, PAGE = 0 ramfuncs :> RAMM1 PAGE = 0.text :>> RAML0L1 | RAML3,PAGE = 0 /*默认代码段*/ .cinit :> RAMM1, page = 0 /*初始化变量*/ .pinit :> RAMM1, page = 0 /*全局构造函数表*/ .switch :> RAMM1, PAGE = 0.reset :>重置, PAGE = 0、TYPE = DSECT /*未使用、*/ .stack :> RAMM0,PAGE = 1 align (2)/* stack:偶数字对齐*/ .ebss :> DataRAM, PAGE = 1.econst :> DataRAM, PAGE = 1 .esysmem :> DataRAM, PAGE = 1 IQmath :> RAML0L1,page = 0 IQmathTables :> IQTABLES,PAGE = 0,TYPE = NoLoad Cla1Prog :load = CLARAM, 运行= CLARAM、 load_start (_Cla1funcsLoadStart)、 load_size (_Cla1funcsLoadSize) run_start (_Cla1funcsRunStart)、 PAGE = 0 Cla1ToCpuMsgRAM:>CLA_CPU_MSGRAM,PAGE = 1 CpuToCla1MsgRAM:>CPU_CLA_MSGRAM,PAGE = 1 //如果调用 IQNexp()或 IQexp(),请取消注释以下部分 库中的函数、以便利用 引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM 1个等待状态)。 如果此部分未注释、则为 IQmathTables2 将被加载到其他存储器(SARAM、闪存等)中并将采用 上行空间、但0等待状态是可能的。 // /* IQmathTables2:> IQTABLES2,page = 0,type = NoLoad { IQMath.lib (IQmathTablesRam) } */ /*如果调用 IQNasin()或 IQasin(),请取消注释以下部分 库中的函数、以便利用 引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM 1个等待状态)。 如果此部分未注释、则为 IQmathTables2 将被加载到其他存储器(SARAM、闪存等)中并将采用 上行空间、但0等待状态是可能的。 // /* IQmathTables3:> IQTABLES3,page = 0,type = NoLoad { IQMath.lib (IQmathTablesRam) } */ } 段 { /******* DPLIB 部分 C28x ***** /* ADCDRV_1CH 部分*/ ADCDRV_1ch_Section:> DataRAMpage = 1 /* ADCDRV_4ch section */ ADCDRV_4ch_Section:> DataRAMpage = 1/* CNTL_2P2Z section */ CNTL_2P2P2Z_Section:> DataRAMpage = 1 CNTL_2P2Z_SECTION :> DataRAM page = 1 CNTL_2P2Z >DataRAMpage = 1/* CNTL_3P3Z section */ CNTL_3P3Z_Section:>DataRAMpage = 1 CNTL_3P3Z_InternalData:>DataRAMpage = 1 CNTL_3P3Z_Coef:>DataRAMpage = 1/* DLOG_4CH section */ DLOG_DLOG_SECTION:>DataRAM page = 1 CNTL_3P3Z_COef:>DataRAM page = 1>DataRAMpage = 1/* MATH_EMAVG section */ MATH_EMAVG_SECTION:> DataRAMpage = 1/* PFC_ICMD section*/ PFC_ICMD_SECTION:> DataRAMpage = 1/* PFC_INVSQR section*/ PFC_INVSQR_Section:> DataRAMpage = 1/* PWMDCH_RV_SECTION * PWMDCH_SECTION >DataRAMpage = 1 /* PWMDRV_1chHIRes driver section */ PWMDRV_1chHIRes_Section:> DataRAMpage = 1 /* PWMDRV_PFC2PHIL driver section */ PWMDRV_PFC2PHIL_Section:> DataRAMpage = 1 /* PWMDRV_PSRV_UDPWCLV_SECTION * PWMDRV_DUT_UPWMDRV_SECTION:* PWMDRV_UPDRV_SECTION * >DataRAMpage = 1/* PWMDRV_ComplPairDB driver section */ PWMDRV_ComplPairDB_Section:>DataRAMpage = 1/* ZeroNet_Section */ ZeroNet_Section:> DataRAMpage = 1/***** DPLIB 部分 CLA ***** / //* ADCDRV_1ch_CLA 部分*/ ADCDRV_1ch_CLA_SECTION:> CPU_CLA_MSGRAM页面= 1 /* ADCDRV_4ch_CLA 部分* / ADCDRV_4ch_CLA_SECTION:> CPU_CLA_MSGRAM页面= 1 /* CNTL_2P2Z_CLA_CLA_CONTROLLER *部分 :>CPU_CLA_MSGRAMPAGE = 1 CNTL_2P2Z_CLA_InternalData:>CLA_CPU_MSGRAMpage = 1 CNTL_2P2Z_CLA_COef:>CPU_CLA_MSGRAMpage = 1 /* CNTL_3P3Z_CLA 控制器部分*/ CNTL_3P3Z_CLA_Section:>CPU_CLA_MSGRAMpage = 1 CNTL_3P3Z_CLA_InternalData:>CLA_CPU_MSGRAMpage = 1 CNTL_3P3Z_CLA_COef:>CPU_CLA_MSGRAMpage = 1 /* MATH_EMAD_CLA_CLA SECTIONS */ MATH_EMAVG_CLA_SECTIONS:>CPU_CLA_MSCLA_CLA_CLA_CLA_SECTIONS= 1 MP_CLA_CLA_CLA_CLA_INCLA_CLA_CLA_CLA_SECTIONS:>1 CMPA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_INCR_SECTIONS :>1 >CPU_CLA_MSGRAMpage = 1 PFC_INVSQR_CLA_InternalData:>CPU_CLA_MSGRAMpage = 1 /* PWMDRV_1ch_CLA driver section */ PWMDRV_1ch_CLA_SECTION:> CPU_CLA_MSGRAMpage = 1 // PWMDRV_1chHICRV_CLA_SECTION * PWMDRV_CLA_CLA_CLA_CLA_CLA_CLA_SECTION:* PWMCLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_PWMCLA_CLA_CLA_SECTION:* PWMCLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLR_SECTION:* PWMCLA_CL >CPU_CLA_MSGRAMpage = 1 /* PWMDRV_PSFB_CLA driver section */ PWMDRV_PSFB_CLA_SECTION:> CPU_CLA_MSGRAMpage = 1 /* PWMDRV_DualUpDwnCnt_CLA driver section */ PWMDRV_DualUpDwnCLA_CLA_CLA_CLA_CLA_CLA driver* ****** 1 * PWMDRV_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA driver_CLA driver_CLA section:*/PWMDR_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA_CLA Compl_CLA driver_CLA_CLA_CLA section:* ***** >CPU_CLA_MSGRAMPAGE = 1 }

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

    您能否发布地图文件?

    我看到您只使用 CLA 的消息 RAM、它们很小。

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

    RAML3. :origin = 0x009000、length = 0x000C18
    CLARAM :origin = 0x009C19、length = 0x0003E8

    对于 CLA、整个块被分配给 CLA、你不能像上面那样对其进行分区。

    CLARAM :origin = 0x009000,length = 0x001000

    您无法按照自己的方式拆分、这绝对是您的问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、那么除了 CLA 之外、没有办法使用[ 0x009000、长度= 0x001000 ]? 我一直在尝试将其拆分、因为现在有很多 RAM 未被使用。 感谢您的回复!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    遗憾的是、CLA 在 F28035上实现了所有功能。 在我们的一些较新器件上,我们确实有较小的部分来实现一定的灵活性(尺寸是一半),但在 F28035上,情况就是这样。

    这也解释了在添加某些代码等时代码开始工作的原因。