Может ли программа в микроконтроллере видеть свой размер?
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
Может ли программа в микроконтроллере (AVR, AtMega) видеть размер самой себя?? Если да, то как?
- Реклама
В обычных условиях незанятая память во FLASH содержит непрерывные 0xFF.
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 535
- Зарегистрирован: Вт авг 28, 2012 22:21:33
Может будет правильнее использовать какие-нибудь константы, определенные компоновщиком? Не знаю как АВР, но АРМ дает константы вида Image$$region_name$$ZI$$Base, которые позволяют определить начало, конец, и длину секций.
Просто ради интереса, зачем прошитой в кристалл программе знать свой размер?
элементарно...
Только нафига? Или нужно оставшуюся память для чего-то использовать?
Код: Выделить всё
[какой-то код]
...
[место, где нужно узнать размер]
LDI ZH,High(END_OF_FILE*2) ;в ZH:ZL - размер программы
LDI ZL,Low(END_OF_FILE*2)
...
[какой-то код]
[последняя строка программы]
END_OF_FILE: ;метка в конце программы
- Реклама
Engineer_Keen, всё гениальное просто! Красивый способ!
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Зачем отдельно? Этого в вопросе не было 
Загрузчик - тоже программа.
Загрузчик - тоже программа.
в смысле загрузчик может находиться в другой секции памяти, независимо от метки END OF FILE.
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь http://radiokot.ru/forum/viewtopic.php? ... 1#p1506111
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь http://radiokot.ru/forum/viewtopic.php? ... 1#p1506111
Ставим плюсы: )
Загрузчик это, обычно, отдельная программа находящаяся в отдельной области памяти. Давайте пока его не будем рассматривать.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
для AVR: что стоит написать в начале программы .org 0xFFF и поставить там метку Reset?
для ARM: объединенное адресное пространство (программа и данные) сводит на нет случай с меткой END_OF_FILE
http://www.keil.com/support/man/docs/ar ... dfhjdj.htm
для ARM: объединенное адресное пространство (программа и данные) сводит на нет случай с меткой END_OF_FILE
http://www.keil.com/support/man/docs/ar ... dfhjdj.htm
Ставим плюсы: )
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
Основная задача - узнать лазили ли в прошивку шаловливыми ручками или нет. Залочить контроллер нельзя, прошивка периодически обновляется удаленно.
- Сообщения: 392
- Зарегистрирован: Сб дек 12, 2009 02:15:45
Тогда отчего бы самому не прочитать флешку и не сравнить со своим эталоном. Или вы действительно полагаете, что тот чел, кто смог дизассемблировать ваш код и понять логику алгоритма не в состоянии будет подделать CRC?neon-f писал(а):прошивка периодически обновляется удаленно
Неправда. Залочиваете и обновляетесь наздоровье. Только разрешите фузами работу LPM-SPM.neon-f писал(а):Залочить контроллер нельзя,
Еще чтоб прошивку не просниффили, можно ее зашифровать хотяб простейшим XORом, а в бутлодыре хранить ключик.


