Может ли программа в микроконтроллере видеть свой размер?
Может ли программа в микроконтроллере видеть свой размер?
Может ли программа в микроконтроллере (AVR, AtMega) видеть размер самой себя?? Если да, то как?
Re: Может ли программа в микроконтроллере видеть свой размер
В обычных условиях незанятая память во FLASH содержит непрерывные 0xFF.
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
С учётом наличия/отсутствия таблицы прерываний в начале памяти, и загрузчика в конце, можно прочитать FLASH и подсчитать идущие подряд 0xFF
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Может ли программа в микроконтроллере видеть свой размер
Может будет правильнее использовать какие-нибудь константы, определенные компоновщиком? Не знаю как АВР, но АРМ дает константы вида Image$$region_name$$ZI$$Base, которые позволяют определить начало, конец, и длину секций.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Может ли программа в микроконтроллере видеть свой размер
Просто ради интереса, зачем прошитой в кристалл программе знать свой размер?
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Может ли программа в микроконтроллере видеть свой размер
элементарно...
Только нафига? Или нужно оставшуюся память для чего-то использовать?
Код: Выделить всё
[какой-то код]
...
[место, где нужно узнать размер]
LDI ZH,High(END_OF_FILE*2) ;в ZH:ZL - размер программы
LDI ZL,Low(END_OF_FILE*2)
...
[какой-то код]
[последняя строка программы]
END_OF_FILE: ;метка в конце программы
Только нафига? Или нужно оставшуюся память для чего-то использовать?
Re: Может ли программа в микроконтроллере видеть свой размер
Engineer_Keen, всё гениальное просто! Красивый способ!
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Только загрузчик, если есть, всё-равно надо отдельно учитывать.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Может ли программа в микроконтроллере видеть свой размер
Зачем отдельно? Этого в вопросе не было 
Загрузчик - тоже программа.
Загрузчик - тоже программа.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Может ли программа в микроконтроллере видеть свой размер
в смысле загрузчик может находиться в другой секции памяти, независимо от метки END OF FILE.
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь viewtopic.php?p=1506111#p1506111
Вся соль в том, что эта метка никак не привязана к реальному расположению последнего байта в программе, поскольку загрузчик может находиться ниже на 2-3 страницы.
Поэтому и был разговор про секции, размеры которых учитывают по отдельности здесь viewtopic.php?p=1506111#p1506111
Ставим плюсы: )
Re: Может ли программа в микроконтроллере видеть свой размер
А, всё, понял.
Re: Может ли программа в микроконтроллере видеть свой размер
Загрузчик это, обычно, отдельная программа находящаяся в отдельной области памяти. Давайте пока его не будем рассматривать.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
ibiza11, вопрос был про AVR и ATmega. Тогда для программы на ассемблере - идеальный вариант предложил Engineer_Keen (метка размещённая в самом конце программы, после кода и данных).
А вот для программы на Си... Как вы "вкомпилите" в программу то что доступно линковщику? Пример можете привести? Пусть для АРМа.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Может ли программа в микроконтроллере видеть свой размер
В скрипт линковщика?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Может ли программа в микроконтроллере видеть свой размер
для 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
Ставим плюсы: )
Re: Может ли программа в микроконтроллере видеть свой размер
Основная задача - узнать лазили ли в прошивку шаловливыми ручками или нет. Залочить контроллер нельзя, прошивка периодически обновляется удаленно.
Re: Может ли программа в микроконтроллере видеть свой размер
А подробнее можно?
Программа на Си.
Программа на Си.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Может ли программа в микроконтроллере видеть свой размер
про что подробнее то? CRC? Вот про CRC
Ставим плюсы: )
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Может ли программа в микроконтроллере видеть свой размер
neon-f писал(а):прошивка периодически обновляется удаленно
Тогда отчего бы самому не прочитать флешку и не сравнить со своим эталоном. Или вы действительно полагаете, что тот чел, кто смог дизассемблировать ваш код и понять логику алгоритма не в состоянии будет подделать CRC?
neon-f писал(а):Залочить контроллер нельзя,
Неправда. Залочиваете и обновляетесь наздоровье. Только разрешите фузами работу LPM-SPM.
Еще чтоб прошивку не просниффили, можно ее зашифровать хотяб простейшим XORом, а в бутлодыре хранить ключик.