zltigo 1 22 октября, 2006 Опубликовано 22 октября, 2006 · Жалоба При написании загрузчика под LPC2000 приблизился к отведенной ему границе в 8K При этом именно приблизился, поскольку, как видно из MAP файла остается еще 0x156 байт в заполняющем сегменте. Содержимое бинарника соответствует листингу :-) - свободное место есть. Если убрать CHECKSUM, то бинарник естественно получается менее 8K на 0x154 байта. Segment Space Start End Size Kind Align INTVEC 00000000 - 0000004F 50 Common 2 ICODE 00000050 - 000001E3 194 Relative 2 DIFUNCT 000001E4 Relative 2 CODE 000001E4 - 000019AB 17C8 Relative 2 INITTAB 000019AC - 000019B7 C Relative 2 DATA_ID 000019B8 Predefined 0 DATA_C 000019B8 - 00001EA7 4F0 Relative 2 ?FILL1 00001EA8 - 00001FFD 156 Relative 0 CHECKSUM 00001FFE - 00001FFF 2 Relative 0 Однако, если теперь добавить хоть один байт, линекр сразу вылетает с воплем: Error[e16]: Segment CHECKSUM (size: 0x2 align: 0) is too long for segment definition. At least 0x2 more bytes.... Линкер свеженький: IAR Universal Linker V4.60C/386 У кого есть мысли, что это такое???? XCL файл: //*************************************************************************** // XLINK command file template for EWARM/ICCARM //*************************************************************************** -carm //*************************************************************************** // Read-only segments mapped to ROM. //*************************************************************************** // Boootloader use 8K. -DROMSTART=0 -DROMEND=1FFF //*************************************************************************** // Address range for reset and exception // vectors (INTVEC). // The vector area is 32 bytes, // an additional 32 bytes is allocated for the // constant table used by ldr PC in cstartup.s79. //*************************************************************************** // 3F-> Changed to 4F for 4 external entry points -Z(CODE)INTVEC=0-4F //*************************************************************************** // Startup code and exception routines (ICODE). //*************************************************************************** -Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND -Z(CODE)SWITAB=ROMSTART-ROMEND //*************************************************************************** // Code segments may be placed anywhere. //*************************************************************************** -Z(CODE)CODE=ROMSTART-ROMEND //*************************************************************************** // Original ROM location for __ramfunc code copied // to and executed from RAM. //*************************************************************************** -Z(CONST)CODE_ID=ROMSTART-ROMEND //*************************************************************************** // Various constants and initializers. //*************************************************************************** -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND // For CheckSUMM -Z(CODE)CHECKSUM#ROMSTART-ROMEND // to end of ROM block //*************************************************************************** // Read/write segments mapped to RAM. //*************************************************************************** -DRAMSTART=40000000 -DRAMEND=40001FFF // Use 8K for compability //*************************************************************************** // Data segments. //*************************************************************************** -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND //*************************************************************************** // __ramfunc code copied to and executed from RAM. //*************************************************************************** -Z(DATA)CODE_I=RAMSTART-RAMEND //*************************************************************************** // ICCARM produces code for __ramfunc functions in // CODE_I segments. The -Q XLINK command line // option redirects XLINK to emit the code in the // CODE_ID segment instead, but to keep symbol and // debug information associated with the CODE_I // segment, where the code will execute. //*************************************************************************** // -QCODE_I=CODE_ID //*************************************************************************** // Stack and heap segments. //*************************************************************************** -D_CSTACK_SIZE=4 // Dummy System/User Stack Size (Not Used!) -D_SVC_STACK_SIZE=200 // Supervisor Mode (Main Work Mode) -D_IRQ_STACK_SIZE=100 -D_FIR_STACK_SIZE=20 -D_XXX_STACK_SIZE=20 // 32bytes Shared Stack for Abort/Undefined Instruction and IAP Buffer -Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND // System/User -Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND // Supervisor -Z(DATA)FIR_STACK+_FIR_STACK_SIZE=RAMSTART-RAMEND // FIR -Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND // IRQ -Z(DATA)XXX_STACK+_XXX_STACK_SIZE=RAMEND // Shared - Abort/Undefined and IAP //buffer // Calculate CRC ------------------------------------------------------------ -H75 -J2,crc16,,,,1,0 // Additional HEX File generation...----------------------------------------- -Ointel-extended,(CODE)=.hex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 24 октября, 2006 Опубликовано 24 октября, 2006 · Жалоба Ради эксперимента попытайтесь увеличить ROMEND и посмотрите результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 24 октября, 2006 Опубликовано 24 октября, 2006 · Жалоба Ради эксперимента попытайтесь увеличить ROMEND и посмотрите результат. Естественно пробовал :-(, естественно, если увеличивать, то получается. Причем файл (при убранном CRC и заполнении) получается много менее 8K. А при оставленном CRC оставшееся пространство + размер увеличения забит заполнителем. Вот такой бред. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 26 октября, 2006 Опубликовано 26 октября, 2006 · Жалоба Тогда попробуйте в строке генерации crc указать диапазон: -J2,crc16,,,,1,0=(CODE)ROMSTART-ROMEND и выкиньте заполнитель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться