主题中讨论的其他器件:C2000WARE、 SysConfig
工具与软件:
您好!
我将使用 CLA 读取两个 SPI 编码器、到目前为止运行良好。 并非必须添加一些校准例程、代码增长越来越快、我现在正处于使用总共4个 RAM LS 组(3个用于程序、1个用于数据)的情况、但这似乎不可行、我总是会收到以下编译器错误:
"程序将无法放入可用的存储器中、或者该段包含的调用站点需要无法为此段生成 trampoline。 对于"Cla1Prog"大小0x10dc 第0页、加载对齐/分块的放置失败。 可用内存范围"
现在我不明白这个问题、因为我可以成功地将 RAMLS1和 RAMLS2合并到一个更大的银行、但似乎没有这个问题、我无法将 LS1-LS3合并到一个银行。
f28003x_flash_lib_is:
...
RAMLS012 : origin = 0x008000, length = 0x001800
RAMLS3 : origin = 0x009800, length = 0x000800
RAMLSnP : origin = 0x00A000, length = 0x002000
RAMGSnP : origin = 0x00C000, length = 0x001000
RAMGSC : origin = 0x00D000, length = 0x001000
RAMGSF : origin = 0x00E000, length = 0x001000
RAMGSD : origin = 0x00F000, length = 0x000FF8
...
// CLA Sections
#if defined(__TI_EABI__)
/* CLA specific sections */
Cla1Prog : LOAD = FLASHBANK1_CLA,
RUN = RAMLS012,
LOAD_START(Cla1ProgLoadStart),
RUN_START(Cla1ProgRunStart),
LOAD_SIZE(Cla1ProgLoadSize),
ALIGN(8)
.const_cla : LOAD = FLASHBANK1_CLA,
RUN = RAMLS3,
RUN_START(Cla1ConstRunStart),
LOAD_START(Cla1ConstLoadStart),
LOAD_SIZE(Cla1ConstLoadSize),
ALIGN(8)
#else
/* CLA specific sections */
Cla1Prog : LOAD = FLASHBANK1_CLA,
RUN = RAMLS012,
LOAD_START(_Cla1ProgLoadStart),
RUN_START(_Cla1ProgRunStart),
LOAD_SIZE(_Cla1ProgLoadSize),
ALIGN(8)
.const_cla : LOAD = FLASHBANK1_CLA,
RUN = RAMLS3,
RUN_START(_Cla1ConstRunStart),
LOAD_START(_Cla1ConstLoadStart),
LOAD_SIZE(_Cla1ConstLoadSize),
ALIGN(8)
#endif
.scratchpad : > RAMLS3
.bss_cla : > RAMLS3
Cla1DataRam : > RAMLS3 //RAMLS3
cla_shared : > RAMLS3
CLADataLS1 : > RAMLS3
Cla1ToCpuMsgRAM : > CLATOCPU_MSGRAM
CpuToCla1MsgRAM : > CPUTOCLA_MSGRAM
用于 CLA 的 INIT:
void MEMCFG_init()
{
//
// Initialize RAMs
//
MemCfg_initSections(MEMCFG_SECT_MSGCPUTOCLA1);
MemCfg_initSections(MEMCFG_SECT_MSGCLA1TOCPU);
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCPUTOCLA1));
while(!MemCfg_getInitStatus(MEMCFG_SECT_MSGCLA1TOCPU));
//
// Configure LSRAMs
//
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS0, MEMCFG_LSRAMCONTROLLER_CPU_CLA1); //LS0 - LS2 needs to be for CLA --> Change in flash.cmd file
MemCfg_setCLAMemType(MEMCFG_SECT_LS0, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS1, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS1, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS2, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS2, MEMCFG_CLA_MEM_PROGRAM);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS3, MEMCFG_LSRAMCONTROLLER_CPU_CLA1);
MemCfg_setCLAMemType(MEMCFG_SECT_LS3, MEMCFG_CLA_MEM_DATA);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS4, MEMCFG_LSRAMCONTROLLER_CPU_ONLY);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS5, MEMCFG_LSRAMCONTROLLER_CPU_ONLY);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS6, MEMCFG_LSRAMCONTROLLER_CPU_ONLY);
MemCfg_setLSRAMControllerSel(MEMCFG_SECT_LS7, MEMCFG_LSRAMCONTROLLER_CPU_ONLY);
// Lock/Commit Registers
//
//
// Enable Access Violation Interrupt
//
//
// Correctable error Interrupt
//
MemCfg_setCorrErrorThreshold(0);
MemCfg_disableCorrErrorInterrupt(MEMCFG_CERR_CPUREAD);
}
有什么想法、为什么这样做不起作用? 我还激活了编译器 选项"--gen_func_subsections = on"、但没有成功。
编辑: 我找到了解决方法、但我不确定折衷方案是什么。 当我使用以下命令时、它是有效的:
计算结果:
Cla1Prog : >> RAMLS012 .const_cla : > RAMLS3
不起作用:
// CLA specific sections
Cla1Prog : LOAD = FLASHBANK1_CLA,
RUN = RAMLS012,
LOAD_START(_Cla1ProgLoadStart),
RUN_START(_Cla1ProgRunStart),
LOAD_SIZE(_Cla1ProgLoadSize),
ALIGN(8)
.const_cla : LOAD = FLASHBANK1_CLA,
RUN = RAMLS3,
RUN_START(_Cla1ConstRunStart),
LOAD_START(_Cla1ConstLoadStart),
LOAD_SIZE(_Cla1ConstLoadSize),
ALIGN(8)
那么、如果不使用 lfash 银行加载程序、会有什么折衷呢? 这是否会以某种方式导致问题?
