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.

[参考译文] TMS320F28234:代码上载但未运行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1170401/tms320f28234-code-uploading-but-not-running

器件型号:TMS320F28234

您好!

我尝试将代码上载到 tms320f28234的闪存中、但目标代码未运行(与 f28234.cmd 文件一同使用时)。但当我尝试将代码上载到 RAM (即 RAMMlink.cmd)时、它可以正常工作、但很明显、在复位或断电时、它会被删除。 我稍微更改了 F28234文件(.text 映射到 FLASHD)。是否缺少内容? 我正在附加我使用的闪存链接文件。

/*
// TI 文件$Revision:/main/10 $
//签入$Date:2008年7月9日13:43:56 $
//######################################################################################################################
//
//文件:F28335.cmd
//
//标题:F28335器件的链接器命令文件
//
//######################################################################################################################
//$TI 发行版:DSP2833x/DSP2823x C/C++头文件 v1.31 $
//$Release Date:2009年8月4日$
//######################################################################################################################
*

/*===================================================================
//适用于 Code Composer Studio V2.2和更高版本
//--------------------------------------------------------
//除了该内存链接器命令文件外,
//将头文件链接器命令文件直接添加到工程中。
//链接时需要标头链接器命令文件
//将外设结构设置到内部的适当位置
//存储器映射。
//
//在中找到了头文件链接器文件 \DSP2833x_Headers\cmd
//
//对于 BIOS 应用程序添加:DSP2833x_Headers_BIOS.cmd
//对于非 BIOS 应用程序添加:DSP2833x_Headers_nonBIOS.cmd
=================================================================================================== *

/*===================================================================
//对于 V2.2之前的 Code Composer Studio
//--------------------------------------------------------
// 1)使用以下-l 语句之一来包含
//项目中的头链接器命令文件。 头文件链接器
//将外设结构链接到正确的文件
//内存映射中的位置*/

/*取消注释此行以仅包括非 BIOS 应用程序的文件*/
/*-l DSP2833x_Headers_nonBIOS1.cmd*/

/*取消注释此行以仅包括 BIOS 应用程序的文件*/
/*-l DSP2833x_Headers_BIOS.cmd */

/* 2)在项目中添加路径 \DSP2833x_headers\cmd 至
库搜索路径位于 project->build options、linker tab、
库搜索路径(-I)。
/*================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ *

/*定义 F28335的内存块开始/长度
PAGE 0将用于组织程序段
第1页将用于组织数据段

注:
F28335上的存储器块是一致的(即相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。

L0/L1/L2和 L3存储器块被镜像-即
它们可以在高内存或低内存中访问。
为简单起见、其中仅使用了一个实例
链接器文件。

可组合连续 SARAM 存储器块
如果需要创建更大的存储器块。
*


存储器

第0页:/*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/

/* ZONE0:origin = 0x004000,length = 0x001000 */* XINTF 区域0 */
RAML0:origin = 0x008000、length = 0x001000 //片上 RAM 块 L0 */
RAML1:origin = 0x009000,length = 0x001000 //片上 RAM 块 L1 */
RAML2:origin = 0x00A000、length = 0x001000 //片上 RAM 块 L2 */
RAML3:origin = 0x00B000、length = 0x001000 //片上 RAM 块 L3 *
ZONE6:origin = 0x0100000,length = 0x100000 // XINTF 区域6 */
ZONE7A:origin = 0x0200000,length = 0x00FC00 /* XINTF 区域7-程序空间*/
FLASHH:origin = 0x300000、length = 0x008000 //片上闪存*/
FLASHG:origin = 0x308000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x310000、length = 0x008000 //片上闪存*/
FLASHE:origin = 0x318000、length = 0x008000 //片上闪存*/
FLASHD:origin = 0x320000,length = 0x008000 //片上闪存*/
FLASHC:origin = 0x328000,length = 0x008000 //片上闪存*/
// FLASHA:origin = 0x338000,length = 0x007F80 //片上闪存*/
csm_RSVD:origin = 0x33FF80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin:origin = 0x33FFF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL:origin = 0x33FFF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
OTP:origin = 0x380400,length = 0x000400 //片上 OTP */
ADC_CAL:origin = 0x380080,length = 0x000009 //保留存储器中的 ADC_cal 函数*/

IQTABLES:origin = 0x3FE000,length = 0x000b50 //引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEB50,length = 0x00008c //引导 ROM 中的 IQMath 表*/
FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
ROM:origin = 0x3FF27C,length = 0x000D44 //引导 ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/
INTR:origin = 0x33F000,length = 0x000300 //:origin = 0x3FA000,length = 0x00FF0 */
第1页:/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/

BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAML4:origin = 0x00C000、length = 0x001000 //片上 RAM 块 L1 */
RAML5:origin = 0x00D000、length = 0x001000 //片上 RAM 块 L1 */
RAML6:origin = 0x00E000、length = 0x001000 //片上 RAM 块 L1 */
RAML7:origin = 0x00F000、length = 0x001000 //片上 RAM 块 L1 */
ZONE7B:origin = 0x20FC00,length = 0x000400 // XINTF 区域7- data space */
FLASHB:origin = 0x330000,length = 0x008000 //片上闪存*/

/*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*

部分


/*分配计划领域:*/
.cinit:> FLASHD PAGE = 0
.pinit:> FLASHD PAGE = 0
.text:> FLASHD PAGE = 0
codestart:> begin page = 0
.sect " TIMER0INT" LOAD = INTR PAGE = 0

/*。sect " branch " load = begin page = 0 */

ramfuncs:load = FLASHD,
运行= RAML0、
load_start (_RamfuncsLoadStart)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
PAGE = 0

csmpasswds:>csm_PWL page = 0
csm_rsvd:>csm_RSVD page = 0

/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
.ebss:> RAML4 page = 1.
.esysmem:>RAMM1 PAGE = 1.
VAR:> RAML7 page = 1.

/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
econst:> FLASHD PAGE = 0
.switch:> FLASHD PAGE = 0

/*分配 IQ 数学区域:*/
IQMath:> FLASHC 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

/*分配可通过 DMA 访问的 RAM 段:*/
DMARAML4:>RAML4,PAGE = 1
DMARAML5:>RAML5,PAGE = 1
DMARAML6:>RAML6,PAGE=1
DMARAML7:>RAML7,PAGE=1

/*分配 XINTF 区域7的0x400来存储数据*/
ZONE7DATA:> ZONE7B,PAGE = 1.

/*.reset 是编译器使用的标准段。 它包含*/
/* C 代码_c_int00起始地址。 /*
/*当使用引导 ROM 时,此部分和 CPU 矢量*/
/*不需要表。 因此、默认类型设置为*/
/* DSECT */
.reset:> reset,page = 0,type = DSECT
VECTORS:> VECTORS PAGE = 0,TYPE = DSECT

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

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

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

    您好!

    请提供有关所面临错误的详细信息。 它是否 完全不运行、或不独立运行?

    此致、

    Veena

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

    您好!

    感谢您的回复。  尝试使用 f28234.cmd 作为链接器文件时、代码根本不运行。

    此致、

    南杜

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

    您好、南都、

    您是否能够加载.out 文件? 如果是、它是否到达 main?

    此致、

    Veena

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

    您好、Veena、

    是的、我能够加载它正在闪烁的.out 文件。 但“是不是达到了主”,我不明白这一点。 在调试模式下、是 的、它到达 main。

    此致、

    南杜

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

    请先使用 F28234.cmd 文件“原样”。 如果它从闪存中正确执行、则可以排除任何有关引导模式选择的问题。 确认后、您可以编辑.cmd 文件。

    e2e 上多次讨论了代码从 RAM 正确执行但不从闪存正确执行的问题。 这里的主要问题是 RAM 中存在已初始化的常量。 请参阅 https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/757590

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

    感谢您的回复。问题是由自旋式常量本身引起的。

    此致、

    南杜