Страница 1 из 1
Может ли программа в микроконтроллере видеть свой размер?
Добавлено: Ср дек 12, 2012 02:27:39
neon-f
Может ли программа в микроконтроллере (AVR, AtMega) видеть размер самой себя?? Если да, то как?
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 05:49:11
Kavka
В обычных условиях незанятая память во FLASH содержит непрерывные 0xFF.
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 07:38:34
menzoda
Может будет правильнее использовать какие-нибудь константы, определенные компоновщиком? Не знаю как АВР, но АРМ дает константы вида Image$$region_name$$ZI$$Base, которые позволяют определить начало, конец, и длину секций.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 07:59:46
uk8amk
Просто ради интереса, зачем прошитой в кристалл программе знать свой размер?
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 08:28:36
Engineer_Keen
элементарно...
Код: Выделить всё
[какой-то код]
...
[место, где нужно узнать размер]
LDI ZH,High(END_OF_FILE*2) ;в ZH:ZL - размер программы
LDI ZL,Low(END_OF_FILE*2)
...
[какой-то код]
[последняя строка программы]
END_OF_FILE: ;метка в конце программы
Только нафига? Или нужно оставшуюся память для чего-то использовать?
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 12:39:35
Kavka
Engineer_Keen, всё гениальное просто! Красивый способ!
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 12:55:51
ploop
Зачем отдельно? Этого в вопросе не было

Загрузчик - тоже программа.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 13:18:03
ibiza11
в смысле загрузчик может находиться в другой секции памяти, независимо от метки END OF FILE.
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь
viewtopic.php?p=1506111#p1506111
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Ср дек 12, 2012 13:57:43
ploop
А, всё, понял.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 13:45:57
Kavka
Загрузчик это, обычно, отдельная программа находящаяся в отдельной области памяти. Давайте пока его не будем рассматривать.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:09:48
ploop
В скрипт линковщика?
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:19:09
ibiza11
для AVR: что стоит написать в начале программы .org 0xFFF и поставить там метку Reset?
для ARM: объединенное адресное пространство (программа и данные) сводит на нет случай с меткой END_OF_FILE
http://www.keil.com/support/man/docs/ar ... dfhjdj.htm
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:27:58
neon-f
Основная задача - узнать лазили ли в прошивку шаловливыми ручками или нет. Залочить контроллер нельзя, прошивка периодически обновляется удаленно.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:28:51
ibiza11
а чем CRC не подходит?
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:31:43
neon-f
А подробнее можно?
Программа на Си.
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 14:33:35
ibiza11
про что подробнее то? CRC?
Вот про CRC
Re: Может ли программа в микроконтроллере видеть свой размер
Добавлено: Чт дек 13, 2012 15:49:29
uk8amk
neon-f писал(а):прошивка периодически обновляется удаленно
Тогда отчего бы самому не прочитать флешку и не сравнить со своим эталоном. Или вы действительно полагаете, что тот чел, кто смог дизассемблировать ваш код и понять логику алгоритма не в состоянии будет подделать CRC?
neon-f писал(а):Залочить контроллер нельзя,
Неправда. Залочиваете и обновляетесь наздоровье. Только разрешите фузами работу LPM-SPM.
Еще чтоб прошивку не просниффили, можно ее зашифровать хотяб простейшим XORом, а в бутлодыре хранить ключик.