temik 0 1 февраля, 2007 Опубликовано 1 февраля, 2007 · Жалоба Программа не помещается в 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 размер.. куда еще его можно запихнуть??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BratherLU 0 2 февраля, 2007 Опубликовано 2 февраля, 2007 · Жалоба Близко не знаком с f28xx но Для начала Копайте здесь -> ... PRAMH0 : origin = 0x3F8002, length = 0x000FFE ... .text : > PRAMH0, PAGE = 0 У Вас сегмент в котором размещается .text слишком маленький (0xffe) Увевеличте его так чтобы .text поместился и проследите чтобы этот сегмент не перекрылся с другими (Примерно так ... length = 0x2400) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BratherLU 0 2 февраля, 2007 Опубликовано 2 февраля, 2007 · Жалоба Извините за бред в пред ид посте - не видел доку f281x и их карту памяти в глаза Щас глаза открылись :-) На Вашем месте Поступил бы так - часть кода разместил бы в M0 (M1,L0,L1), То есть часть кода из .text перенес в другую секцию и разместил эту секцию в M0(M1,L0,L1) (вроде как отображены в программную страницу) если, конечно, хватает места под стэк и данные Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lolikandr 0 2 февраля, 2007 Опубликовано 2 февраля, 2007 · Жалоба Вообще-то у 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. Сразу скажу, что размещать код я там не пробовал, но ограничений для этого не вижу. Чисто по размеру памяти должно хватить, надеюсь код не придется дорабатывать-увеличивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
temik 0 5 февраля, 2007 Опубликовано 5 февраля, 2007 · Жалоба вроде разобрался, взял файл 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 } подскажите, что не так делаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chan 0 5 февраля, 2007 Опубликовано 5 февраля, 2007 · Жалоба Вот пример 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Milit 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Программа не помещается в 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 ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться