Перейти к содержанию
    

подскажите, как организовать память у TMS320F2812 в CCS2000

Программа не помещается в H0. пробовал менять области памяти в cmd-файле, но это приводит только к появлению ошибок при попытке загрузить программу эмулятором в кристалл.

Уменьшить программу не могу, подскажите, как быть.. у техаса столько памяти, а какая то мелкая прога не помещается .. нонсенс...

 

 

вот cmd-файл:

MEMORY

{

PAGE 0 :

/* For this example, H0 is split between PAGE 0 and PAGE 1 */

/* BEGIN is used for the "boot to HO" bootloader mode */

/* RESET is loaded with the reset vector only if */

/* the boot is from XINTF Zone 7. Otherwise reset vector */

/* is fetched from boot ROM. See .reset section below */

 

RAMM0 : origin = 0x000000, length = 0x000400

BEGIN : origin = 0x3F8000, length = 0x000002

PRAMH0 : origin = 0x3F8002, length = 0x000FFE

RESET : origin = 0x3FFFC0, length = 0x000002

 

 

PAGE 1 :

 

/* For this example, H0 is split between PAGE 0 and PAGE 1 */

 

RAMM1 : origin = 0x000400, length = 0x000400

DRAMH0 : origin = 0x3f9000, length = 0x001000

}

 

 

SECTIONS

{

/* Setup for "boot to H0" mode:

The codestart section (found in DSP28_CodeStartBranch.asm)

re-directs execution to the start of user code.

Place this section at the start of H0 */

 

codestart : > BEGIN, PAGE = 0

ramfuncs : > PRAMH0 PAGE = 0

.text : > PRAMH0, PAGE = 0

.cinit : > DRAMH0, PAGE = 1//переместил, ибо тоже не лезло

.pinit : > PRAMH0, PAGE = 0

.switch : > RAMM0, PAGE = 0

.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

 

.stack : > RAMM1, PAGE = 1

.ebss : > DRAMH0, PAGE = 1

.econst : > DRAMH0, PAGE = 1

.esysmem : > DRAMH0, PAGE = 1

 

 

}

 

 

а для .text надо 0x002e14 размер.. куда еще его можно запихнуть???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Близко не знаком с f28xx но

Для начала Копайте здесь ->

...

PRAMH0 : origin = 0x3F8002, length = 0x000FFE

...

.text : > PRAMH0, PAGE = 0

 

У Вас сегмент в котором размещается .text слишком маленький (0xffe)

Увевеличте его так чтобы .text поместился и проследите чтобы этот

сегмент не перекрылся с другими (Примерно так ... length = 0x2400)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините за бред в пред ид посте - не видел доку f281x и их карту памяти в глаза

Щас глаза открылись :-)

На Вашем месте Поступил бы так - часть кода разместил бы в M0 (M1,L0,L1),

То есть часть кода из .text перенес в другую секцию и разместил эту секцию в M0(M1,L0,L1)

(вроде как отображены в программную страницу) если, конечно, хватает места под стэк и данные

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то у F2812 размер H0 = 8Kx16. Что означает length = 0x1FFE. Вы себе искуственно ополовинили память, насколько я понимаю.

Разместить 0x2E14 это конечно не поможет. Придется поиграться, как посоветовал BratherLU. То есть некоторые функции разместить в других секциях. Хочу обратить внимание, что L0 и L1 находятся рядом и поэтому можно сделать что-то типа такого:

 

MEMORY

{

...

PAGE 0 : /* Data Memory */

H0SARAM : origin = 0x3F8002, length = 0x001FFE /* 8Kw H0 SARAM */

...

PAGE 1 : /* Data Memory */

H0SARAM : origin = 0x3F8002, length = 0x001FFE /* 8Kw H0 SARAM */

...

L1SARAM : origin = 0x009000, length = 0x001400 /* 4Kw L1 SARAM */

L0L1SARAM : origin = 0x008400, length = 0x001C00 /* 256w L0 SARAM begin*/

}

SECTIONS

{

...

/* Data Memory (PAGE 1) sections */

.bss : > L0L1SARAM, PAGE = 1

.ebss : > L0L1SARAM, PAGE = 1

...

}

 

Мне такое понадобилось, так как константа-таблица не влазила в исходный 2K размер секции L0. Сразу скажу, что размещать код я там не пробовал, но ограничений для этого не вижу. Чисто по размеру памяти должно хватить, надеюсь код не придется дорабатывать-увеличивать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вроде разобрался, взял файл 2812.cmd подчепил и .text положил во FLASHA|FLASHC.

 

но вот еще затык получился - прошиваю флеш, запускаю эмулятором софтину - все ок. как только передерну питание - прога встает колом.

вот тот файл

MEMORY

{

PAGE 0: /* Program Memory */

/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

 

ZONE0 : origin = 0x002000, length = 0x002000 /* XINTF zone 0 */

ZONE1 : origin = 0x004000, length = 0x002000 /* XINTF zone 1 */

RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */

ZONE2 : origin = 0x080000, length = 0x080000 /* XINTF zone 2 */

ZONE6 : origin = 0x100000, length = 0x080000 /* XINTF zone 6 */

OTP : origin = 0x3D7800, length = 0x000800 /* on-chip OTP */

FLASHJ : origin = 0x3D8000, length = 0x002000 /* on-chip FLASH */

FLASHI : origin = 0x3DA000, length = 0x002000 /* on-chip FLASH */

FLASHH : origin = 0x3DC000, length = 0x004000 /* on-chip FLASH */

FLASHG : origin = 0x3E0000, length = 0x004000 /* on-chip FLASH */

FLASHF : origin = 0x3E4000, length = 0x004000 /* on-chip FLASH */

FLASHE : origin = 0x3E8000, length = 0x004000 /* on-chip FLASH */

FLASHD : origin = 0x3EC000, length = 0x004000 /* on-chip FLASH */

FLASHC : origin = 0x3F0000, length = 0x004000 /* on-chip FLASH */

FLASHA : origin = 0x3F6000, length = 0x001F80 /* on-chip FLASH */

CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */

BEGIN : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */

CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */

 

/* ZONE7 : origin = 0x3FC000, length = 0x003FC0 /* XINTF zone 7 available if MP/MCn=1 */

ROM : origin = 0x3FF000, length = 0x000FC0 /* Boot ROM available if MP/MCn=0 */

RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

 

PAGE 1 : /* Data Memory */

/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */

/* Registers remain on PAGE1 */

 

RAMM0 : origin = 0x000000, length = 0x000400 /* on-chip RAM block M0 */

RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */

RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */

FLASHB : origin = 0x3F4000, length = 0x002000 /* on-chip FLASH */

RAMH0 : origin = 0x3F8000, length = 0x001FE0 /* on-chip RAM block H0 */

}

 

/* Allocate sections to memory blocks.

Note:

codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code

execution when booting to flash

ramfuncs user defined section to store functions that will be copied from Flash into RAM

*/

 

SECTIONS

{

 

/* Allocate program areas: */

.cinit : > FLASHA PAGE = 0

.pinit : > FLASHA, PAGE = 0

.text : > FLASHA|FLASHC PAGE = 0

codestart : > BEGIN PAGE = 0

ramfuncs : LOAD = FLASHD,

RUN = RAML0,

LOAD_START(_RamfuncsLoadStart),

LOAD_END(_RamfuncsLoadEnd),

RUN_START(_RamfuncsRunStart),

PAGE = 0

 

csmpasswds : > CSM_PWL PAGE = 0

csm_rsvd : > CSM_RSVD PAGE = 0

 

/* Allocate uninitalized data sections: */

.stack : > RAMM0 PAGE = 1

.ebss : > RAML1 PAGE = 1

.esysmem : > RAMH0 PAGE = 1

 

/* Initalized sections go in Flash */

/* For SDFlash to program these, they must be allocated to page 0 */

.econst : > FLASHA PAGE = 0

.switch : > FLASHA PAGE = 0

 

/* Allocate IQ math areas: */

IQmath : > FLASHC PAGE = 0 /* Math Code */

IQmathTables : > ROM PAGE = 0, TYPE = NOLOAD /* Math Tables In ROM */

 

/* .reset is a standard section used by the compiler. It contains the */

/* the address of the start of _c_int00 for C Code. /*

/* When using the boot ROM this section and the CPU vector */

/* table is not needed. Thus the default type is set here to */

/* DSECT */

.reset : > RESET, PAGE = 0, TYPE = DSECT

vectors : > VECTORS PAGE = 0, TYPE = DSECT

 

}

 

подскажите, что не так делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот пример cmd из spra958

 

MEMORY

{

PAGE 0: /* Program Memory */

ZONE0 : origin = 0x002000, length = 0x002000 /* XINTF zone 0 */

ZONE1 : origin = 0x004000, length = 0x002000 /* XINTF zone 1 */

RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */

ZONE2 : origin = 0x080000, length = 0x080000 /* XINTF zone 2 */

ZONE6 : origin = 0x100000, length = 0x080000 /* XINTF zone 6 */

OTP : origin = 0x3D7800, length = 0x000800 /* on-chip OTP */

FLASH_IJ : origin = 0x3D8000, length = 0x004000 /* on-chip FLASH */

FLASH_GH : origin = 0x3DC000, length = 0x008000 /* on-chip FLASH */

FLASH_EF : origin = 0x3E4000, length = 0x008000 /* on-chip FLASH */

FLASH_CD : origin = 0x3EC000, length = 0x008000 /* on-chip FLASH */

FLASH_AB : origin = 0x3F4000, length = 0x003F80 /* on-chip FLASH */

CSM_RSVD : origin = 0x3F7F80, length = 0x000076 /* Part of FLASHA. Reserved when CSM is in use. */

BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to flash" bootloader mode. */

PASSWORDS : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */

BEGIN_H0 : origin = 0x3F8000, length = 0x000002 /* Part of H0. Used for "boot to H0" bootloader mode. */

RAMH0 : origin = 0x3F8002, length = 0x001FFE /* H0 SARAM */

/* ZONE7 : origin = 0x3FC000, length = 0x003FC0 /* XINTF zone 7 available if MP/MCn=1 */

ROM : origin = 0x3FF000, length = 0x000FC0 /* boot ROM available if MP/MCn=0 */

RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */

 

PAGE 1 : /* Data Memory */

RAMM0 : origin = 0x000000, length = 0x000400 /* on-chip RAM block M0 */

RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */

RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */

 

}

 

 

SECTIONS

{

/*** Compiler Required Sections ***/

/* Program memory (PAGE 0) sections */

.text : > FLASH_AB, PAGE = 0

.cinit : > FLASH_CD, PAGE = 0

.pinit : > FLASH_CD, PAGE = 0

.reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset section */

 

/* Data Memory (PAGE 1) sections */

.cio : > RAMM0, PAGE = 1

.bss : > RAMM0, PAGE = 1 /* Should be empty with large memory model */

/*

.ebss : > RAMM0, PAGE = 1

*/

.ebss : > RAML1, PAGE = 1

.const : > FLASH_CD, PAGE = 0 /* Should be empty with large memory model */

.econst : > FLASH_CD, PAGE = 0

.stack : > RAMM1, PAGE = 1

.sysmem : > RAMM0, PAGE = 1 /* Should be empty with large memory model */

.esysmem : > RAMM0, PAGE = 1

.switch : > FLASH_CD, PAGE = 0

 

/*** User Defined Sections ***/

codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.asm */

csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file passwords.asm */

passwords : > PASSWORDS, PAGE = 0 /* Used by file passwords.asm */

pie_vect : > PIE_VECT, PAGE = 1

secureRamFuncs : LOAD = FLASH_AB, PAGE = 0 /* Used by InitFlash() in SysCtrl.c */

RUN = RAML0, PAGE = 0

LOAD_START(_secureRamFuncs_loadstart),

LOAD_END(_secureRamFuncs_loadend),

RUN_START(_secureRamFuncs_runstart)

}

 

Обратите внимание на

BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002 /* Part of FLASHA. Used for "boot to flash" bootloader mode. */

codestart : > BEGIN_FLASH, PAGE = 0 /* Used by file CodeStartBranch.asm */

 

И еще на всякий случай стоит проверить подтянут ли SCITXDA к 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Программа не помещается в H0. пробовал менять области памяти в cmd-файле, но это приводит только к появлению ошибок при попытке загрузить программу эмулятором в кристалл.

Уменьшить программу не могу, подскажите, как быть.. у техаса столько памяти, а какая то мелкая прога не помещается .. нонсенс...

 

 

вот cmd-файл:

MEMORY

{

PAGE 0 :

/* For this example, H0 is split between PAGE 0 and PAGE 1 */

/* BEGIN is used for the "boot to HO" bootloader mode */

/* RESET is loaded with the reset vector only if */

/* the boot is from XINTF Zone 7. Otherwise reset vector */

/* is fetched from boot ROM. See .reset section below */

 

RAMM0 : origin = 0x000000, length = 0x000400

BEGIN : origin = 0x3F8000, length = 0x000002

PRAMH0 : origin = 0x3F8002, length = 0x000FFE

RESET : origin = 0x3FFFC0, length = 0x000002

 

 

PAGE 1 :

 

/* For this example, H0 is split between PAGE 0 and PAGE 1 */

 

RAMM1 : origin = 0x000400, length = 0x000400

DRAMH0 : origin = 0x3f9000, length = 0x001000

}

 

 

SECTIONS

{

/* Setup for "boot to H0" mode:

The codestart section (found in DSP28_CodeStartBranch.asm)

re-directs execution to the start of user code.

Place this section at the start of H0 */

 

codestart : > BEGIN, PAGE = 0

ramfuncs : > PRAMH0 PAGE = 0

.text : > PRAMH0, PAGE = 0

.cinit : > DRAMH0, PAGE = 1//переместил, ибо тоже не лезло

.pinit : > PRAMH0, PAGE = 0

.switch : > RAMM0, PAGE = 0

.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */

 

.stack : > RAMM1, PAGE = 1

.ebss : > DRAMH0, PAGE = 1

.econst : > DRAMH0, PAGE = 1

.esysmem : > DRAMH0, PAGE = 1

 

 

}

 

 

а для .text надо 0x002e14 размер.. куда еще его можно запихнуть???

 

я стталкнулся с такой проблемой. ПОКА решил так:

Как видно, сектор Н0 разделен между 2-я страницами Page0 и Page1.

Необходимо увеличить размер в Page0 и уменьшить в Page1.

PRAMH0 : origin = 0x3F8002, length = 0x0017FE (в Page0 )

DRAMH0 : origin = 0x3f9800, length = 0x0007ff (в Page1 )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...