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.

TMS320F280049C: CLA内存配置问题

Part Number: TMS320F280049C
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

我在sysconfig tool中将RAMLS3配置为共享区域,将RAMLS4配置为CLA程序区域,其余LS区域配置为CPU区域,生成的board.c相关程序如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//*****************************************************************************
//
// CLA Configurations
//
//*****************************************************************************
void myCLA0_init(){
//
// Configure all CLA task vectors
// On Type-1 and Type-2 CLAs the MVECT registers accept full 16-bit task addresses as
// opposed to offsets used on older Type-0 CLAs
//
#pragma diag_suppress=770
//
// CLA Task 1
//
CLA_mapTaskVector(myCLA0_BASE, CLA_MVECT_1, (uint16_t)&Cla1Task1);
CLA_setTriggerSource(CLA_TASK_1, CLA_TRIGGER_SOFTWARE);
#pragma diag_warning=770
//
// Enable the IACK instruction to start a task on CLA in software
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

CMD文件如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CLA_SCRATCHPAD_SIZE = 0x100;
MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to Flash" bootloader mode */
BEGIN : origin = 0x080000, length = 0x000002
RAMM0 : origin = 0x0000F6, length = 0x00030A
RAMLS02 : origin = 0x008000, length = 0x001800
// RAMLS0 : origin = 0x008000, length = 0x000800
// RAMLS1 : origin = 0x008800, length = 0x000800
// RAMLS2 : origin = 0x009000, length = 0x000800
RAMLS3 : origin = 0x009800, length = 0x000800
RAMLS4 : origin = 0x00A000, length = 0x000800
RAMLS5 : origin = 0x00A800, length = 0x000800
RESET : origin = 0x3FFFC0, length = 0x000002
/* Flash sectors */
/* BANK 0 */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

在程序中,定义了结构体strVoltPiCtrl,并将其放到了“CLADataLS1”中,同时在100kHz的PWM中断中使用软件触发的形式触发CLAtask1,

Fullscreen
1
CLA_forceTasks(myCLA0_BASE,CLA_TASKFLAG_1);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

并试图在PWM中断中对结构体的某些值进行修改,并在CLA中通过这些值进行进一步的计算,并将结果幅值给结构体中的另外一些元素

Fullscreen
1
2
#pragma DATA_SECTION(strVoltPiCtrl,"CLADataLS1");
PI_CTRL_MODULE strVoltPiCtrl;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

结果在进行Debug时,发现结构体strVoltPiCtrl所处的内存区域为Program区域

导致在Debug模式下,必须先手动connect CLA核,整体程序才能运行,若将程序烧写到Flash,则整体程序将无法运行

经过测试,将100kHz中断中的软件触发CLA屏蔽,或者将PWM中断中屏蔽与该结构体相关的语句,再将程序烧写到FLASH后,则程序又能正常运行,

请问:1.为什么结构体所对应的内存区域为program区域;2.程序为何无法正常运行

  • 另外,使用Debug模式,connect CLA核及load symbol后,在Expressions窗口所监视的变量值均是0,但在CPU核的监视窗口则变量均有变换。监视的变量均已放在message内存区域以及CPU和CLA共享的LS内存区域

  • 您好,

    看起来您的 CLAdataLS1部分已分配给链接器 cmd 文件中的 RAMLS3存储器范围。 这是故意的吗? LSRAM3从地址0x009800开始、长度为0x000800、因此如果 strVoltPiCtrl 的长度为0x009900、则这是正常现象、因为它处于该值范围内。 是否尝试让 strVoltPiCtrl 成为 CPU 和 CLA 之间的共享变量? 如果是、您是否有一个头文件的 strVoltPiCtrl 变量的外部文件在.cla 文件和 main.c 文件中都包含#include? 

  • 但是我已经在内存配置时将RAMLS3配置成了MEMCFG_CLA_MEM_DATA,那么这一块区域不应该就是CLA和CPU之间的共享数据内存区域了吗。另外, .cla文件和对应的.c文件都#include了相关的外部变量

  • 您好,

    我有点困惑。 您是否希望strVoltPiCtrl被放置在LS4中,因为它专用于程序存储器? 以下是您选择的sysconfig MEMCFG,是否正确? 或者我是否已切换LSRAM3和LSRAM4?

    如果希望CPU和CLA都具有strVoltPiCtrl变量的写入访问权限,则需要将其分配给与具有共享访问权限的LSRAM相关的输出部分。 #pragma将告诉编译器将符号放在您指定的输出部分,无论它是否具有共享内存权限。

    我建议尝试尽可能少地修改C2000ware中给出的链接程序cmd文件,以避免出现问题。