部件号: TMS320F28386S
我正在处理一个具有三种离散运行模式的工程、需要将三个不同的应用从闪存加载到 CLA 中。
根据当前配置、我没有足够的 LSRAM 来支持所有三种应用程序、因此会得到以下错误:
错误#10099-D:程序无法放入可用内存中、或者段包含一个调用点、该调用点需要无法为该段生成蹦床函数。
在我的命令文件中、我定义了:
移动数据
{
RAM_CLA_PROGRAM :origin = 0x008000、length = 0x003800 /* LS0 - LS6 */
RAM_CLA_DATA :origin = 0x00B800、length = 0x000800 /* LS7 */
Flash_Application1 :origin = 0x0B8000、length = 0x002000 /*闪存扇区 K */
Flash_Application2 :origin = 0x0BA000、length = 0x002000 /*闪存扇区 L */
Flash_Application3 :origin = 0x0BC000、length = 0x002000 /* flash sector M */
}
很重要
{
Cla1 Prog_Application 1 : load = flash_Application1、
RUN = RAM_CLA_PROGRAM、
LOAD_START (cla1 Funcs_Application 1_loadstart)、
load_size (cla1 Funcs_Application 1_loadsize)、
LOAD_END (cla1 Funcs_Application 1_loadend)、
RUN_START (cla1 Funcs_Application 1_runstart)、
RUN_SIZE (cla1 Funcs_Application 1_runsize)、
RUN_END (cla1 Funcs_Application 1_runend)、
对齐 (8)
Cla1 Prog_Application 2 : load = flash_Application2、
RUN = RAM_CLA_PROGRAM、
LOAD_START (cla1 Funcs_Application 2_loadstart)、
load_size (cla1 Funcs_Application 2_loadsize)、
LOAD_END (cla1 Funcs_Application 2_loadend)、
RUN_START (cla1 Funcs_Application 2_runstart)、
RUN_SIZE (cla1 Funcs_Application 2_runsize)、
RUN_END (cla1 Funcs_Application 2_runend)、
对齐 (8)
Cla1 Prog_Application 3 : load = flash_Application3、
RUN = RAM_CLA_PROGRAM、
LOAD_START (cla1 Funcs_Application 3_loadstart)、
load_size (cla1 Funcs_Application 3_loadsize)、
LOAD_END (cla1 Funcs_Application 3_loadend)、
RUN_START (cla1 Funcs_Application 3_runstart)、
RUN_SIZE (cla1 Funcs_Application 3_runsize)、
RUN_END (cla1 Funcs_Application 3_runend)、
对齐 (8)
}
因此、我想做的是在初始化 CLA 时、通过 memcpy 选择性地加载应用程序 1、2 或 3:
if(Application== Application1)
{
memcpy (&cla1 memcpy 1_runstart、 &cla1 Funcs_Application 1_loadstart、 (Funcs_Application)&cla1 Funcs_Application 1_loadsize);
}
Else if (Application== Application2)
{
memcpy (&cla1 Funcs_Application 2_runstart、 &cla1 Funcs_Application 2_loadstart、 (uint32)&cla1 Funcs_Application 2_loadsize);
}
Else if (Application== Application3)
{
memcpy (&cla1 Funcs_Application 3_runstart、 &cla1 Funcs_Application 3_loadstart、 (uint32)&cla1 Funcs_Application 3_loadsize);
}
问题:
(cla1 Funcs_Application cla1_loadsize + cla1 Funcs_Application 2_loadsize + cla1 Funcs_Application 3_loadsize)>(RAM_cla_program = 0x38000)
我首先想到的是将段中定义的运行位置从 RAM_CLA_PROGRAM 更改为 RAMGSx 段(其中我有足够的空间)、然后从 RAMGSx 或闪存复制到 LSRAM? 这会解决编译器的存储器错误、但我必须将 cla1 lsram1_loadstart、cla1 Funcs_Application lsram2_loadstart 或 cla1 Funcs_Application 3_loadstart 重新定义为 Funcs_Application 上的地址。 如果这样做有效、我将如何实施它? 还有其他替代方案吗?
提前感谢您的任何见解。