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.

[参考译文] TMS320F28377S:使用闪存中的 CLAmath_flu32库

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/588641/tms320f28377s-using-clamath_flu32-library-from-flash-memory

器件型号:TMS320F28377S

我很难弄清楚如何将 CLAmath 库分配到链接器命令文件中的存储器、以便将其存储在闪存中。 我之前使用存储在 RAM 中的 CLAmath 库运行代码。 下面是链接器命令文件。 您会看到我尝试将数学表分配给 FlashA ( CLA1mathTables:> FLASHA,PAGE=0) ,但我不清楚 CLA 是否被授予对该段的访问权限,以及如何在启动时将其复制到 RAM。

感谢您的任何建议、

Matt  

//如果使用、用户必须在项目链接器设置中定义 CLA_C
// CLA C 编译器
//项目属性-> C2000链接器->高级选项->命令文件
//预处理->--define
#ifdef CLA_C
//为将要使用的 CLA 暂存区定义大小
//由 CLA 编译器生成局部符号和 temps
//还强制引用标记的特殊符号
//暂存区是。
CLA_ScratchPad_size = 0x100;
--undef_sym=__cla_scratchpad_end
--undef_sym=__cla_scratchpad_start
#endif //cla_C

存储器

第0页:
/* begin 用于"引导至 SARAM"引导加载程序模式*/

开始:origin = 0x080000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
RAMD0:origin = 0x00B000、length = 0x000800
RAMLS4:origin = 0x00A000,length = 0x000800
RAMLS5:origin = 0x00A800,length = 0x000800
RAMGS14:origin = 0x01A000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
RAMGS15:origin = 0x01B000,length = 0x001000 //*仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
复位:origin = 0x3FFFC0,length = 0x000002

/*闪存扇区*/
FLASHA:origin = 0x080002,length = 0x001FFE /*片上闪存*/
FLASHB:origin = 0x082000,length = 0x002000 //片上闪存*//MB,将所有 FlashB 部分更改为 FlashE,因为它的大小是原来的4倍
FLASHC:origin = 0x084000,length = 0x002000 //片上闪存*/
FLASHD:origin = 0x086000、length = 0x002000 //片上闪存*/
FLASHE:origin = 0x088000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x090000,length = 0x008000 //片上闪存*
FLASHG:origin = 0x098000、length = 0x008000 //片上闪存*/
FLASHH:origin = 0x0A0000,length = 0x008000 //片上闪存*/
FLASHI:origin = 0x0A8000、length = 0x008000 //片上闪存*/
FLASHJ:origin = 0x0B0000,length = 0x008000 //片上闪存*/
FLASHK:origin = 0x0B8000、length = 0x002000 //片上闪存*/
FLASHL:origin = 0x0BA000、length = 0x002000 //片上闪存*/
FLASHM:origin = 0x0BC000、length = 0x002000 //片上闪存*/
FLASHN:origin = 0x0BE000、length = 0x002000 //片上闪存*/

第1页:

BOOT_RSVD:origin = 0x000002,length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *

RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1:origin = 0x008800,length = 0x000800
RAMLS2:origin = 0x009000,length = 0x000800
RAMLS3:origin = 0x009800,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 = 0x009000
//SRAMGS6:origin = 0x012000,length = 0x001000 //MB 对此进行了注释,使 RAMGS5的长度是全局变量存储器(.ebss)的两倍
// RAMGS7:origin = 0x013000,length = 0x001000 //MB 2/21/2017注释了另外两行,并使 RAMGS5 = 0x004000
// RAMGS8:origin = 0x014000,length = 0x001000
// RAMGS9:origin = 0x015000,length = 0x001000
// RAMGS10:origin = 0x016000,length = 0x001000
// RAMGS11:origin = 0x017000,length = 0x001000
// RAMGS12:origin = 0x018000,length = 0x001000 //*仅在、F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *
//RAMGS13:origin = 0x019000,length = 0x001000 //仅在 F28377S、F28375S 器件上可用。 移除其他设备上的线路。 *

CLA1_MSGRAMLOW:origin = 0x001480,length = 0x000080
CLA1_MSGRAMHIGH:origin = 0x001500,length = 0x000080


部分

/*分配计划领域:*/
.cinit:> FLASHE PAGE = 0,align (4)
.pinit:> FLASHE、PAGE = 0、ALIGN (4)
.text:> FLASHE PAGE = 0,ALIG(4)
codestart:> begin page = 0,align (4)

//MB、根据此内容对以下部分进行了注释: e2e.ti.com/.../535034
/* ramfuncs:load = FLASHD,
运行= RAMLS4、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)*/


/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
ebss:> RAMGS5 PAGE = 1//MB,从 RAMLS2更改为 RAMGS5
.esysmem:> RAMGS5 PAGE = 1//MB,从 RAMLS2更改为 RAMGS5


/*初始化段进入闪存*/
.econst:> FLASHE PAGE = 0,ALIGN (4)
.switch:> FLASHE PAGE = 0,ALIGN (4)

.reset:> reset,page = 0,type = DSECT //未使用,*/

filter_RegsFile:> RAMGS0,PAGE = 1

/*正弦表*/
//SINTBL:> FLASHN,PAGE = 0 //添加了这两行,更改为 Page=0

CLA1mathTables:> FLASHA,PAGE=0

/*数据日志*/
DLOG:>RAMGS3,PAGE = 1

/* CLA 特定部分*/

Cla1Prog:load = FLASHD,
运行= RAMLS5、
load_start (_Cla1funcsLoadStart)、
load_end (_Cla1funcsLoadEnd)、
run_start (_Cla1funcsRunStart)、
load_size (_Cla1funcsLoadSize)、
PAGE = 0、ALIGN (4)


CLADataLS0:>RAMLS0,PAGE=1
CLADataLS1:> RAMLS1,PAGE=1

Cla1ToCpuMsgRAM:> CLA1_MSGRAMLOW,page = 1.
CpuToCla1MsgRAM:>CLA1_MSGRAMHIGH,PAGE = 1.

#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:{}负载= FLASHD,
运行= RAMLS4、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0、ALIGN (4)
#endif
#endif

/*以下部分定义适用于 SDFM 示例*/
// Filter1_RegsFile:> RAMGS1,PAGE = 1,fill=0x1111
// CICRAM:>RAMGS1,page = 1.
Filter2_RegsFile:> RAMGS2,PAGE = 1,fill=0x2222
Filter3_RegsFile:> RAMGS3,PAGE = 1,fill=0x3333
Filter4_RegsFile:> RAMGS4,PAGE = 1,fill=0x4444

#ifdef CLA_C
/* CLA C 编译器段*/
//
//必须被分配给 CLA 具有写入访问权限的内存
//
CLAscratch:
{*。obj (CLAscratch)
。 += CLA_ScratchPad_size;
*。obj (CLAscratch_end)}> RAMLS1、PAGE = 1

暂存区:>RAMLS1,页=1
.bss_cla:> RAMLS1,page = 1.
.const_cla:load = FLASHE,
运行= RAMLS1、
run_start (_Cla1ConstRunStart)、
Load_start (_Cla1ConstLoadStart)、
load_size (_Cla1ConstLoadSize)、
PAGE = 1.
#endif //cla_C

/*
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

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

    虽然您可以将 CLAMathTables 分配给闪存、但 CLA 无法访问它们。 您必须在运行时将其复制到 RAM 块、并将该块的所有权分配给 CLA、以便 CLA 可以访问该块。

    CLA1mathTables:load = FLASHA,
    运行= RAMLS4、
    run_start (_Cla1ConstRunStart)、
    Load_start (_Cla1ConstLoadStart)、
    load_size (_Cla1ConstLoadSize)、
    PAGE = 0

    以上代码段假定 RAMLS4预定用于 CLA 数据、表适合该空间。 您可能需要将几个 RAM 块组合在一起以容纳所有表。

    或者、这些表已经在 CLA 数据 ROM 中。 使用 CLA 库的_dataarom 变体和2837x 的 dataROM 符号库来使用 ROM 表。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你,谢谢你。 我现在已经设置好了。