[an error occurred while processing this directive]
Как из программы (Keil, C51) определить последний адрес программы
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
Amateur
04 февраля 2003 г. 11:31
Составить ответ
|||
Конференция
|||
Архив
Ответы
Совсем несложно написать постпроцессор, который будет брать hex, считать CRC, и прописывать длину в фиксированную ячейку вблизи начала программы вместе с CRC в конец.
—
Oldring
(04.02.2003 13:36,
пустое
)
Постпроцессор это программа под ОС запускаемая после компиляции с меню Tools?
—
Amateur
(04.02.2003 14:03,
пустое
)
Да хоть ручками из командной строки! Вам задачу нужно решить, или потратить неделю на выяснение, как сделать комфортно?
—
Oldring
(04.02.2003 14:38,
пустое
)
Хочется знать и использовать возможности к-е дает инструмент. Ручками я умею. Но почему-то никто не хочет писать в кодах. Подавай С, С++. (Я не ругаюсь, шучу)
—
Amateur
(04.02.2003 14:50,
пустое
)
Ну так и напишите построцессор на С++ :)
—
Oldring
(04.02.2003 15:11,
пустое
)
Если никто ничего более путного не посоветует так и придется делать.
—
Amateur
(04.02.2003 15:26,
пустое
)
А средствами Keil обойтись можно?
—
Amateur
(04.02.2003 13:54,
пустое
)
А нельзя ли линковщику указать чтобы такой-то сегмент располагал последним? В MCS51 такая опция вроде-бы была.
—
Amateur
(04.02.2003 12:57,
пустое
)
Ответ: Из программы...
—
Amateur
(04.02.2003 12:00, 967 байт)
Так. Вам надо подсчитать контрольную сумму. Если в нее включить незанятые ячейки, хуже небудет. Тогда просто считайте CRC от 0 до последнего адреса минус размер CRC, а его писать по 2 последним адресам
—
DASM
(04.02.2003 12:13,
пустое
)
Для получения конечного адреса этот способ конечно подходит, но не очень то красиво да и мороки много.
—
Amateur
(04.02.2003 12:36,
пустое
)
Память программ 64К, программа занимает 27К. Если считать всю память, то при загрузке программы в устройсво необходимо ее приводить к фиксированому значению. Это увеличивает время загрузки. И время подсчета тоже.
—
Amateur
(04.02.2003 12:28,
пустое
)
К сожалению красиво подругому никак. Только хекс в бин, бин дополняеш 0x00(чтоб затирать пзушные 0xFF), пишеш в конец кс потом опять в хекс.
—
kolian
(04.02.2003 21:12, 207 байт)
Гы, любопытный вопрос. А зачем ?
—
DASM
(04.02.2003 11:43,
пустое
)
По-моему, никак. Можно конечно при программировании всю память какой-нить сигнатурой забить, но где гарантия что линкер код разместит вплотную ?
—
DASM
(04.02.2003 11:46,
пустое
)
То что программа размещена не вплотную преодолимо: HEX->BIN->HEX получаем загрузочный модуль, где незаполненные адреса забиты 0.
—
Amateur
(04.02.2003 12:14,
пустое
)
Чуть иначе. Обьявляю переменную в CODE по фиксированному адресу и внешняя утилита кладёт тудыть длину и чексум. Усё. (-)
—
Peet_on_B3
(04.02.2003 12:08,
пустое
)
Хотелось из программы считать, при запросе. Внешняя программа знает какая д.б. CS. Хранить это не совсем то, когда мы сохраняем, то изменяется CS.
—
Amateur
(04.02.2003 12:20,
пустое
)
Дык и разумеется, что чексум считается и сравнивается с записанной. Вам ведь конечный адрес только нужен? (-)
—
Peet_on_B3
(04.02.2003 12:25,
пустое
)
Для получения конечного адреса этот способ конечно подходит, но не очень то красиво да и мороки много.
—
Amateur
(04.02.2003 12:54,
пустое
)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru