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/TMS320F2.8022万:保证闪存负载段的顺序

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/578856/ccs-tms320f28022-guaranteeing-order-of-flash-load-sections

部件号:TMS320F2.8022万

工具/软件:Code Composer Studio

Code Composer 6.1 Studio .Win7 3.0.0034万 32位。

我正在使用Piccolo 2.8022万和Analog Devices ADAU1701 DSP创建一个项目。

1701没有内置闪存,因此我将代码存储在Piccolo闪存中,并在用户每次开机时对1701进行编程。

1701具有一些不同(特定)的区域,必须按特定顺序进行编程。

我已经为1701代码创建了5个部分,我称之为0段到4段。 这些段存储在Piccolo闪存中,我生成了一个.h文件,将所有5个段映射到我称为"ADAUprog"的单个部分

CMD文件如下所示:

内存
{
第0页:...


第1页:/*
用于ADAU编码*/
FLASHDC的片上闪存:原点= 0x3F4000,长度= 0x0.2万
}

节
{
ADAUprog :> FLASHDC,页=1
}

h文件如下所示:

...

#define seg_0_addr 0x081C
#define segment _0_size 2
#pragma data_section(seg野0,"ADAUprog");
const char segment _0[]=
{
#include "..\ADAU-1701\segment 0.dat"
};

#define segment _1_addr 0x0400
#define char_1_seg_0[_prag1

={#partse_parts.0.0_.0_ed.0_.0_edrag_1's段




中的数据段1'.1'_1'.1'.0'_adu.1'.1'.ad_parts段1'.0'.0'.0'.0 

我注意到,当链接程序在该部分的较低地址使用连续内存时,它将我的段以随机顺序放置在该部分中。

链接程序在闪存中出现的实际最终顺序是segment 4,0,3, 2和1。

h文件按升序(按名称)列出句段,程序按相同顺序使用句段。

虽然这样做是可以的,但如果我每次在调试和编译之间来回来回切换时都刻录闪存,在大多数情况下,我会选择刻录闪存一次,然后重写CMD文件以执行该部分的NoLoad,以便进行后续测试。

当然,如果链接程序为我的段选择随机顺序,则不能保证顺序保持不变,我可能会将错误的数据加载到1701中。

是否有办法保证特定部分中的句段顺序?

谢谢,Mark。

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请访问 processors.wiki.ti.com/.../C28x_Compiler_-_Understanding_Linking
    和processors.wiki.ti.com/.../Linker_Command_File_Primer

    希望这能有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    似乎我至少找到了一个答案。

    根据TMS320C28x汇编语言工具v 6.1 (SPRU513E)的7.5 6.2 ,我发现:

    7.5 6.2 将输出部分组合在一起
    Sections指令的Group选项强制连续分配多个输出部分。"


    我创建了一个链接器.CMD文件,其中包含以下内容:
    内存

    第1页:
    FLASHDC :原点= 0x3F4000,长度= 0x0.2万
    }

    章节



    ADAUprog0
    ADAUprog1.
    ADAUprog2.
    ADAUprog3.
    ADAUprog4.
    ADAUprog5.
    ADAUprog6.
    ADAUprog7.
    ADAUprog8.
    ADAUprog9.
    } LOAD = FLASHDC,PAGE = 1 (加载= FLASHDC,页= 1)
    }

    然后,在包含所有pragma的头文件中,我更改了节名称。

    这样,每次为其它处理器重新分配内存时,我就不必更改链接程序文件,而链接程序现在似乎是按生成的顺序强制它们。

    如果这给我带来了一个曲线,我会告诉你。

    标记。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,这不像广告上说的那样有效。

    我添加了type = NoLoad后

    我收到链接器错误,告诉我在节中不允许对组或联合使用类型标志。

    所以,我想这应该回到思考板上。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我以不同的方式解决了这个问题。

    我不是创建5个单独的分段并让链接程序执行它喜欢的操作,而是将5个分段合并为一个分段,并跟踪5个部分的起始位置。 链接器现在可以正常工作。 转换计划有点难,但唉...

    我想有多种方法可以看Schrödinger ö m的猫。

    标记。