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

 
 
> Хоть кто-н-дь работает с ВНЕШНЕЙ ПАМЯТЬЮ на adsp21X, или никто не работает с ADSP219x?
partsun
сообщение Jun 1 2007, 07:06
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 24-04-07
Пользователь №: 27 276



wacko.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bmf
сообщение Jun 5 2007, 07:39
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 6-01-05
Из: Украина
Пользователь №: 1 831



уточню на примерах

1
...
int far *ptr=(int far *) (((unsigned long)VALSEG<<16) | (unsigned)(off));
*ptr++=value1;
*ptr++=value2;
...
value3=*ptr;

2
static void _ideReadWord(unsigned far *adr)
{
unsigned i;
for(i=0;i<256;i++) {
*adr++ =io_space_read(IDE_DATAREG);
}
}

3
inline void SetEntryVal(bool bFat32,unsigned far *buf,unsigned thisoff,unsigned long *pval)
{
if(!bFat32) {
*((WORD *)(buf+thisoff))=*((WORD *)pval+1);
} else {
unsigned far *ptr=buf+thisoff*2;
*ptr++=*(((WORD *)pval+1));
*ptr= (*ptr & 0xF000) | (*(((WORD *)pval)) & 0x0FFF);
}
}

Если вы помните, тоже самое применялось и в x86 в DOS small модели, все указатели по умолчанию до 64к, а для дпинных успользовалось far для задания другого сегмента.
Для этого DSP это более чем оправдано, т.к. быстрые DSP алгоритмы живут во внутренней памяти и использование смещения при адресации лишь приведет к потери быстродействияю.
В ранних версиях VDSP такое обращение возможно было только через специальные функции external_memory_read и external_memory_write. Использование far - чистый Си наглядный и переносимый код
Go to the top of the page
 
+Quote Post
partsun
сообщение Jun 5 2007, 10:31
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 21
Регистрация: 24-04-07
Пользователь №: 27 276



[quote name='bmf' date='Jun 5 2007, 11:39' post='258133']
1
...
int far *ptr=(int far *) (((unsigned long)VALSEG<<16) | (unsigned)(off));
*ptr++=value1;
*ptr++=value2;
...
value3=*ptr;

2
static void _ideReadWord(unsigned far *adr)
{
unsigned i;
for(i=0;i<256;i++) {
*adr++ =io_space_read(IDE_DATAREG);
}
}

3
inline void SetEntryVal(bool bFat32,unsigned far *buf,unsigned thisoff,unsigned long *pval)
{
if(!bFat32) {
*((WORD *)(buf+thisoff))=*((WORD *)pval+1);
} else {
unsigned far *ptr=buf+thisoff*2;
*ptr++=*(((WORD *)pval+1));
*ptr= (*ptr & 0xF000) | (*(((WORD *)pval)) & 0x0FFF);
}
}


Вцелом понятно, но к сожалению не всё... crying.gif
Можно коментарий...?
Зарание СПАСИБО и СОРРИ
Go to the top of the page
 
+Quote Post



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

 


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


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