реклама на сайте
подробности

 
 
> обращение на Си к памяти программ за пределом кода программы
sbw
сообщение Oct 5 2007, 21:04
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 5-10-07
Из: Харьков, Украина
Пользователь №: 31 107



Си для АВРа изучаю недавно, поэтому образовался такой вопрос.
Есть проблема, легко решаемая на асме: после тела (откомпилированной) программы идут данные, подгружаемые другой (пользовательской) программой, то есть в исходном файле (тексте) этих данных нет, внешняя программа их добавляет в хекс-файл. Длина программы может меняться от версии к версии, внешние данные тоже переменной длины, то есть могут быть и пара байт, а могут быть до конца памяти проца. Дополнительное условие: пользователю не должен быть доступен код (текст) программы, то есть отконвертировать внешние данные в Си-файл а потом подгружать их при компиляции (каждый раз компилировать) не предлагать.

Как я это делаю на асме: после тела программы и всех внутренних констант пишу метку
end_prog: ; конец программы
после метки ничего нет. на эту метку ссылаюсь в теле программы ( типа ldi zl, low (end_prog * 2) ) и все путем.
Как такое же сделать на си? Может есть какая-то переменная типа "последний занятый байт" или "длина программы"?
Си- Винавр, но я только начал знакомиться, могу перейти на Иар. Хочется универсального решения.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Oct 5 2007, 21:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



В IAR можно выделить отдельный сегмент под ваши данные и при описании данных помещать их именно в этот сегмент. Сегмент описывается в .xcl-файле. Подробнее см. в хелпе IAR.
Go to the top of the page
 
+Quote Post
sbw
сообщение Oct 5 2007, 22:01
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 5-10-07
Из: Харьков, Украина
Пользователь №: 31 107



[quote name='rezident' post='303786' date='Oct 5 2007, 23:07']
В IAR можно выделить отдельный сегмент под ваши данные и при описании данных помещать их именно в этот сегмент.
[/quote ]
А если в ВинАвр?

[quote name='IceS' date='Oct 5 2007, 23:31' post='303789']
в ИАРе я бы сделал так:

Код
__flash unsigned char Arr[2048]; //максимальная длинна данных
__flash unsigned int ArrLen;        //кол-во загруженных данных

[/quote ]
То есть зарезервировать массив? Два "но": как я извне (внешней оболочкой) узнаю, куда этот массив "лег", и как мне сделать так, чтобы он был "от конца программы и до конца флеша"? Из этого - не ясно.
[quote ]
Эти данные заливал бы не програматором, а передавал в сам контроллер, а он знает где их размещать и знает сколько их пришло, вот только процедуру записи придется делать свою, банальный
[/quote]
То есть лепить к контроллеру какой-то интерфейс? И процедуру записи кода разбивать на два этапа?...
[quote ]
Если вы пользователю даете HEX, значит ему доступна вся программа. При желании перевести ее в Асм не составит труда.
[/quote ]
Это так, но возможен вариант, что "хекс" с кодом программы будет запрятан глубоко в экзешнике оболочки, дописывающей внешние данные, или закодирован (а оболочка раскодирует их перед записью)

Сообщение отредактировал sbw - Oct 5 2007, 22:27
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016