_Pasha
Sep 29 2009, 06:41
Подскажите, реально ли использовать Prefetch Abort для организации загрузки оверлеев? Семейство AT91SAM7s. Спасибо.
aaarrr
Sep 29 2009, 10:13
Наверное, речь все же не о загрузке оверлеев, а о создании виртуальной памяти.
Реально, но будет чудовищно медленно. Разве что в академических целях можно сделать.
SasaVitebsk
Sep 30 2009, 08:40
Можно и для оверлеев. Если точки входа по фиксированным адресам, за пределами размещать. При определённой структуре п/п (если число обращений невелико, или потерянное время невелико по сравнению со временем обработки процедуры) может даже и возможно использование.

Где-то встречал аналогичную обработку внешних устройств. То есть идёт обращение к ВУ. Если оно подключено - нет проблем. Если нет - возникает прерывание и выполняется программная эмуляция данного устройства.
aaarrr
Sep 30 2009, 09:53
Цитата(SasaVitebsk @ Sep 30 2009, 12:40)

Можно и для оверлеев. Если точки входа по фиксированным адресам, за пределами размещать.
Можно, но в таком случае проще и логичнее использовать SWI.
_Pasha
Sep 30 2009, 10:27
В общем, применение такое видится.
Предположим, есть девайс, который не особо много считает, но нуждается в калибровке, желательно, автоматической. При этом код калибровки де-факто мертвый, и вся софтина не умещается во флеш. Но есть USB - подключили к компу, в меню девайса включили режим калибровки, на стороне компа типопрограмматор. Код скомпилен так, что адреса функций (высокоуровневых, заметьте) приводят при их вызове к PABT - выделяется оверлейный буфер, посылается запрос в комп - загрузилось нужное ПО. При этом, все что работает в .fastrun, ессно, никто не трогает. Закончили работу - от громоздкого софта не осталось ничего.
Красиво?
aaarrr
Sep 30 2009, 10:45
Цитата(_Pasha @ Sep 30 2009, 14:27)

Красиво?
Нет, через SWI проще и красивее:
Код
__swi(1) int func(int, int);
int main(void)
{
...
x = func(1, 2);
...
}
Суть та же, зато никаких извращений с подложными адресами и т.п.
SasaVitebsk
Sep 30 2009, 22:14
Да, мне тоже кажется что это немного притянуто за уши. Если изначально известно, что данного кода нет, то зачем Prefetch Abort?
Другое дело - если в одном изделии есть, а в другом нет, а код единый.