您好! 我正在尝试对项目使用 CLA。 我从28035的一个工作 CLA 示例 ADC_CLA 开始。 然后、我向 CLA 代码中添加了更多内容、这些内容可以正常工作、直到.text 不再适用。 然后我尝试扩展 .text 的可用空间、但这会导致 CLA 不再工作。 我需要一些帮助! 下面是链接器代码以及内存分配图。
在图中、.text 位于 RAML0L1中、几乎已满。 此时代码工作正常。 如果我添加更多的内容、.text 将不再适用、并开始进入 RAML3。 它将进行编译、但 CLA 将不再工作、我获得了"非法 ISR"。 有人可以提供一些建议吗?
/*
// TI 文件$Revision:/main/1 $
//签入$Date:2009年3月18日09:16:06 $
//##########################################################################################
//
////文件:28035_RAM_CLA_lnk.cmd
//
//标题:针对运行于 RAM 之外的28035示例的链接器命令文件
//
这仅包括28035器件上的所有 SARAM 块。
// 这不包括闪存或 OTP。
//
// 请记住、L0、L1、L2和 L3受代码//保护
安全模块。
//
// 这意味着、在大多数情况下、您需要移至
// 另一个定义了更多存储器的存储器映射文件。
//
//##########################################################################################################################
//$TI 发行版:2803x C/C++头文件 v1.21 $
//$发行 日期:2009年12月1日$
//####################################################################################
/*
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//对于 Code Composer Studio V2.2和更高版本
//------------
//除了这个内存连接器命令文件之外,
//将头连接器命令文件直接添加到项目中。
//将
//外设结构链接到
//内存映射中的适当位置需要使用头链接器命令文件。
//
//可以在中找到头文件链接器 \DSP2803x_headers\cmd
//
//对于 BIOS 应用添加: DSP2803x_Headers_BIOS.cmd
//对于非 BIOS 应用程序,添加:DSP2803x_Headers_nonBIOS.cmd
========================================================================================== /*
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//对于 V2.2之前的 Code Composer Studio
,//----------------
// 1)使用以下-l 语句之一在
工程中包含//头链接器命令文件。 将
外设结构链接到
存储器映射中的适当//位置需要使用头链接器//文件 //
////*取消注释此行以仅包括非 BIOS 应用程序的文件*//
/*-l DSP2803x_Headers_nonBIOS.cmd */
//*取消注释此行以仅包括 BIOS 应用程序的文件*//
*-l DSP2803x_Headers_BIOS.cmd */
* 2)在项目中添加路径 \DSP2803x_headers\cmd 至
project->build options、linker tab、
library search path (-i)下的库搜索路径。
/*================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ //
*定义 DSP2803x
页0的存储器块开始/长度将用于组织程序段
页1将用于组织数据段
注:
F28035上的存储器块是一致的(也是相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。
L0块被镜像-就是这样
可在高内存或低内存中访问。
为简单起见、其中仅使用了一个实例
链接器文件。
可组合连续 SARAM 存储器块
如果需要创建更大的存储器块。
*/
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 = 0x001000
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 = RAML0L1,
运行= RAML3、
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_MSGRAM,PAGE = 1
CNTL_2P2Z_CLA_InternalData:> CLA_CPU_MSGRAM,ALIGN = 64,PAGE = 1
CNTL_2P2Z_CLA_COef:>CPU_CLA_MSGRAM,ALIGN = 64,PAGE = 1
//* CNTL_3P3Z_CLA 控制器段*
/ CNTL_3Z_CLA_SECTIONS:>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
}
/*
//===================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//文件结束。
//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*