Alexander_84
Feb 27 2010, 19:21
Требуется разместить конрольную сумму по заданному адресу. Нашел это
http://supp.iar.com/Support/?Note=11927. Насколько понял Add usage of the symbol __checksum in your application значит в Extra Options прописываем напимер --define_symbol __checksum=0x4000 и КС размещается по этому адресу. Когда так делаю получаю Error[Li006]: duplicate definitions for "__checksum"; in "command line/config", and "Place holder __checksum" . Что не так?
Alexander_84
Feb 28 2010, 06:57
Пробовал также через --place holder такая же ошибка.
MALLOY2
Feb 28 2010, 07:03
Это потому что у вас __checksum объявлен в *.icf файле и вы его еще пытаетесь добавить с помощью Extra Options, забудьте Extra Options корректируйте icf файл.
zltigo
Feb 28 2010, 07:14
1. Размещать контрольные суммы по фиксированным местам неразумно - мешаете линкеру и получаете неиспользуемые дыры.
2. Если уж собрались рулить, то не пользуйтесь всякими галочками в IDE - в скрипте линкера укажите где, и уже рулите
через ichecksum/ielftool
Alexander_84
Feb 28 2010, 09:41
А можно подробнее как это сделать в icf файле, кстати __checksum у меня в icf не прописан. Я хотел сделать так в icf размещаю секцию .checksum так: place at address mem: 0x00004000 { readonly section .checksum };
затем в ExtraOprions хотел разместить __checksum в этой секции так: --place_holder __checksum,2,.checksum,4
Alexander_84
Feb 28 2010, 11:21
Вообщем сделал чтобы размещалось по нужному адресу. Просто прописав в icf place at address mem: 0x00004000 { ro section .checksum };
--place_holder линкер как понял сам добавляет при включение в IDE подсчета КС D:\work\New_PP\Soft\LPC2148_flash48.icf --semihosting
--entry __iar_program_start --place_holder
__checksum,2,.checksum,1 --define_symbol
__checksum_begin=0x4004 --define_symbol
__checksum_end=0x7cfff
Но есть одна особенность в программе необходимо что либо делать с __checksum иначе вылезает ошибка ielftool error: The checksum symbol was not found in string table. И еще вопрос в icf прописаны define symbol __ICFEDIT_region_ROM_end__ = 0x0007CFFF; как в программе использовать эту константу __ICFEDIT_region_ROM_end__. В 4 IAR через extern можно было.
Alexander_84
Mar 1 2010, 07:54
И еще вопрос в 5 IAR директивы ORG нет, что можно использовать?
skripach
Mar 30 2010, 13:38
Цитата
Но есть одна особенность в программе необходимо что либо делать с __checksum
Что делать?
skripach
Apr 2 2010, 06:39
Цитата
Что делать?
Копировать содержимое __checksum в переменную например.
Цитата
Размещать контрольные суммы по фиксированным местам неразумно
Вот и я к этому пришел, только не сразу придумал как загрузчик узнает где эта самая КС находится.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.