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.

[参考译文] CCS/TMS320F28335:如何将 dclfunc 链接到链接器命令文件

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/760082/ccs-tms320f28335-how-to-link-dclfunc-to-the-linker-command-file

器件型号:TMS320F28335

工具/软件:Code Composer Studio

尊敬的先生:

我尝试将以下内容添加到链接器命令文件中、但编译时显示错误。 请帮帮我。

dclfuncs:>RAML4,page = 0   

我的链接器命令文件包含以下内容

MEMORY
{
PAGE 0:
/* BEGIN 用于“引导至 SARAM”引导加载程序模式 */

开始 :origin = 0x000000,length = 0x000002 /*从此处引导至 M0 */
RAMM0 :origin = 0x000050、length = 0x0003B0
RAML0 :origin = 0x008000、length = 0x001000
RAML1 :origin = 0x009000、length = 0x001000
RAML2 :origin = 0x00A000、length = 0x001000
RAML3 :origin = 0x00B000、length = 0x001000
ZONE7A :origin = 0x200000、length = 0x00FC00 // XINTF 区域7 -程序空间*/
csm_RSVD:origin = 0x33FF80、length = 0x000076 /* FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 //
csm_PWL:origin = 0x33FFF8,length = 0x000008 /* FLASHA 的一部分。 FLASHA 中的 CSM 密码位置 */
ADC_CAL:origin = 0x380080,length = 0x000009
reset :origin = 0x3FFFC0,length = 0x000002
IQTABLES:origin = 0x3FE000,length = 0x000b50
IQTABLES2:origin = 0x3FEB50,length = 0x00008c
FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0
BootROM:origin = 0x3FF27C:


page length:length = 0x0001FF27C:page:length:
/* boot_RSVD 由引导 ROM 用于堆栈。 /*
保留此部分仅用于防止引导 ROM 在
调试过程中损坏此区域 //

boot_RSVD:origin = 0x000002,length = 0x00004E // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
RAML4 :origin = 0x00C000、length = 0x001000
RAML5 :origin = 0x00D000、length = 0x001000
RAML6 :origin = 0x00E000、length = 0x001000
RAML7 :origin = 0x00F000、length = 0x001000
ZONE7B :origin = 0x20FC00,length = 0x000400 /* XINTF 区域7 -数据空间*/
}


SECTIONS
{
//设置"引导至 SARAM"模式:
codestart 段(可在 DSP28_CodeStartBranch.asm 中找到)
将执行重定向到用户代码的开始。 */
codestart :>开始, PAGE = 0
ramfuncs :> RAML0, PAGE = 0.text
:>> RAML1 | RAML2, PAGE = 0
.InitBoot :> RAML1, PAGE = 0
.cinit :> RAML0, PAGE = 0.Pinit
:> RAML0, PAGE = 0.switch
:> RAML0, PAGE = 0

.stack :> RAMM1, PAGE = 1.ebss
:> RAML4, PAGE = 1.econst
:> RAML5, PAGE = 1
.esysmem :> RAMM1, PAGE = 1

IQmath :> RAML1, PAGE = 0
IQmathTables :>IQTABLES,page = 0,type = NoLoad

//如果调用 IQNexp()或 IQexp(),取消注释以下段
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
//
/*
IQmathTables2:> IQTABLES2,page = 0,type = NoLoad
{

IQMath.lib (IQmathTablesRam)

}
*/

FPUmathTables:> FPUTABLES,page = 0,type = NoLoad
dclfuncs :> RAML4, PAGE = 0
DMARAML4 :> RAML4, PAGE = 1
DMARAML5 :> RAML5, PAGE = 1
DMARAML6 :> RAML6, PAGE = 1
DMARAML7 :> RAML7, PAGE = 1

ZONE7DATA :>ZONE7B,PAGE=1

.reset :>重置, PAGE = 0、TYPE = DSECT /*未使用 */
csm_rsvd :>csm_RSVD page = 0,type = DSECT //不用于 SARAM 示例*/
csmpasswds :>csm_PWL page = 0、type = DSECT //*不用于 SARAM 示例*

//*分配 ADC_cal 函数(出厂时已预先编程到 TI 保留存储器中)*/
.ADC_cal :load = ADC_CAL,page = 0,type = NoLoad

} 

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

    "dclfuncs"将包含您从 DCL 库中使用的任何控制器的代码、因此需要将其映射到链接器命令文件中的第0页。  这里的问题是您选择了 RAML4来保存该段、并且在链接器命令文件的存储器部分、RAML4映射到第1页。  您无法更改.cmd 文件的 SECTIONS 部分中的页面映射。  您已将 RAML3分配给第0页、这似乎未在您的段分配中使用、因此请尝试:

    dclfuncs:>RAML3,page = 0  

    此致、

    Richard