Может ли программа в микроконтроллере видеть свой размер?

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Может ли программа в микроконтроллере видеть свой размер?

Сообщение neon-f »

Может ли программа в микроконтроллере (AVR, AtMega) видеть размер самой себя?? Если да, то как?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение Kavka »

В обычных условиях незанятая память во FLASH содержит непрерывные 0xFF.
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение menzoda »

Может будет правильнее использовать какие-нибудь константы, определенные компоновщиком? Не знаю как АВР, но АРМ дает константы вида Image$$region_name$$ZI$$Base, которые позволяют определить начало, конец, и длину секций.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение uk8amk »

Просто ради интереса, зачем прошитой в кристалл программе знать свой размер?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение Engineer_Keen »

элементарно...

Код: Выделить всё

[какой-то код]
...
[место, где нужно узнать размер]
LDI ZH,High(END_OF_FILE*2) ;в ZH:ZL - размер программы
LDI ZL,Low(END_OF_FILE*2)
...
[какой-то код]
[последняя строка программы]
END_OF_FILE: ;метка в конце программы

Только нафига? Или нужно оставшуюся память для чего-то использовать?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение Kavka »

Engineer_Keen, всё гениальное просто! Красивый способ!
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ploop »

Зачем отдельно? Этого в вопросе не было :)
Загрузчик - тоже программа.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ibiza11 »

в смысле загрузчик может находиться в другой секции памяти, независимо от метки END OF FILE.
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь viewtopic.php?p=1506111#p1506111
Ставим плюсы: )
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ploop »

А, всё, понял.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение Kavka »

Загрузчик это, обычно, отдельная программа находящаяся в отдельной области памяти. Давайте пока его не будем рассматривать.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ploop »

В скрипт линковщика?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ibiza11 »

для AVR: что стоит написать в начале программы .org 0xFFF и поставить там метку Reset?
для ARM: объединенное адресное пространство (программа и данные) сводит на нет случай с меткой END_OF_FILE
http://www.keil.com/support/man/docs/ar ... dfhjdj.htm
Ставим плюсы: )
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение neon-f »

Основная задача - узнать лазили ли в прошивку шаловливыми ручками или нет. Залочить контроллер нельзя, прошивка периодически обновляется удаленно.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ibiza11 »

а чем CRC не подходит?
Ставим плюсы: )
neon-f
Потрогал лапой паяльник
Сообщения: 392
Зарегистрирован: Сб дек 12, 2009 02:15:45

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение neon-f »

А подробнее можно?
Программа на Си.
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение ibiza11 »

про что подробнее то? CRC? Вот про CRC
Ставим плюсы: )
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Может ли программа в микроконтроллере видеть свой размер

Сообщение uk8amk »

neon-f писал(а):прошивка периодически обновляется удаленно

Тогда отчего бы самому не прочитать флешку и не сравнить со своим эталоном. Или вы действительно полагаете, что тот чел, кто смог дизассемблировать ваш код и понять логику алгоритма не в состоянии будет подделать CRC?

neon-f писал(а):Залочить контроллер нельзя,

Неправда. Залочиваете и обновляетесь наздоровье. Только разрешите фузами работу LPM-SPM.
Еще чтоб прошивку не просниффили, можно ее зашифровать хотяб простейшим XORом, а в бутлодыре хранить ключик.
Ответить

Вернуться в «Разные вопросы по МК»