Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хоть кто-н-дь работает с ВНЕШНЕЙ ПАМЯТЬЮ на adsp21X
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
partsun
wacko.gif
bmf
опишите как far тогда будет понимать
partsun
А при чём тут far???? 07.gif
bmf
вы же хотите чтобы код c DMPG генерился
novlev
работаю и с озу и с пзу....но вопроса не понял
partsun
Может не правильно обЪясняю...
Щас попробую ...
Я, обращаюсь к переменным, находящимся во внешней области (прога на Си) и, компилятор не вырабатывает адрес страницы DMPG - Это очень напрягает. Иногда в процедурках невозможно заранее определить в asm DMPG1.
Большая проблема!!!!

И ещё вопрос: ВАМ приходилось переходить в режим работы ЦСП по программному сбросу в режим работы БЕЗ НАЧАЛНОЙ ЗАГРУЗКИ (работа с внешней 16-ти битной памятью {с адреса 0x10000})????
bmf
уточню на примерах

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 - чистый Си наглядный и переносимый код
partsun
smile.gif a14.gif
Понятно,
а чего делает:
assert(sizeof(&abc)==2 && sizeof(&def)==1);

ТАМ много места жрЁТ... мне места даже не хватило
partsun
[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
Можно коментарий...?
Зарание СПАСИБО и СОРРИ
bmf
Цитата(partsun @ Jun 5 2007, 12:26) *
assert(sizeof(&abc)==2 && sizeof(&def)==1);

это только при первоначальной отладке (проверяется истинность выражения), в релизе не используется
можно везде убрать убрать с помощью
#define assert()
или использовать опцию компиляции для релиза -DNDEBUG

а для работы с внешней памятью общий смысл такой
- замена указателя на тип far (длина уже 32 бит)
и работа с ним как обычно в Си
для инициализации соответственно надо привести типы к одному
пример
int far * ptr=(int far *) 0x123456L;
0x12 - ляжет в DMPG
0x3456 - как смешение

все по правилам стандартного Си не более.
пример операций c указателями:
ptr++;
ptr+=5;
*ptr++==..
*(ptr+1)=..
*(ptr+100)=..
..=*ptr++;
..=(ptr+10);

возможны и другии вариации использования модификатора far
лучше сразу для проверки смотреть в сгенеренный ассемблерный листинг
и для эффективного кода оптимизация должна быть включена
partsun
beer.gif

Может ВЫ и про ПЗУ загрузки знаете?
Область 0xFF0000. Её самому определить и записать можно?
bmf
Цитата(partsun @ Jun 6 2007, 10:04) *
Может ВЫ и про ПЗУ загрузки знаете?
Область 0xFF0000. Её самому определить и записать можно?

не конечно, это масочное ПЗУ для загрузчика.
Это только в новых чипах Blackfin BF52x и BF54x уже есть 8кБ однократно программируемой памяти для кода, данных или закрытых ключей
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.