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

 
 
 
Reply to this topicStart new topic
> Хоть кто-н-дь работает с ВНЕШНЕЙ ПАМЯТЬЮ на 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
bmf
сообщение Jun 1 2007, 08:37
Сообщение #2


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

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



опишите как far тогда будет понимать
Go to the top of the page
 
+Quote Post
partsun
сообщение Jun 1 2007, 09:58
Сообщение #3


Участник
*

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



А при чём тут far???? 07.gif
Go to the top of the page
 
+Quote Post
bmf
сообщение Jun 1 2007, 11:39
Сообщение #4


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

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



вы же хотите чтобы код c DMPG генерился
Go to the top of the page
 
+Quote Post
novlev
сообщение Jun 2 2007, 08:38
Сообщение #5


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

Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645



работаю и с озу и с пзу....но вопроса не понял
Go to the top of the page
 
+Quote Post
partsun
сообщение Jun 4 2007, 06:05
Сообщение #6


Участник
*

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



Может не правильно обЪясняю...
Щас попробую ...
Я, обращаюсь к переменным, находящимся во внешней области (прога на Си) и, компилятор не вырабатывает адрес страницы DMPG - Это очень напрягает. Иногда в процедурках невозможно заранее определить в asm DMPG1.
Большая проблема!!!!

И ещё вопрос: ВАМ приходилось переходить в режим работы ЦСП по программному сбросу в режим работы БЕЗ НАЧАЛНОЙ ЗАГРУЗКИ (работа с внешней 16-ти битной памятью {с адреса 0x10000})????
Go to the top of the page
 
+Quote Post
bmf
сообщение Jun 5 2007, 07:39
Сообщение #7


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

Группа: Свой
Сообщений: 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, 09:26
Сообщение #8


Участник
*

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



smile.gif a14.gif
Понятно,
а чего делает:
assert(sizeof(&abc)==2 && sizeof(&def)==1);

ТАМ много места жрЁТ... мне места даже не хватило

Сообщение отредактировал partsun - Jun 5 2007, 10:04
Go to the top of the page
 
+Quote Post
partsun
сообщение Jun 5 2007, 10:31
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 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
bmf
сообщение Jun 5 2007, 12:24
Сообщение #10


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

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



Цитата(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
лучше сразу для проверки смотреть в сгенеренный ассемблерный листинг
и для эффективного кода оптимизация должна быть включена
Go to the top of the page
 
+Quote Post
partsun
сообщение Jun 6 2007, 07:04
Сообщение #11


Участник
*

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



beer.gif

Может ВЫ и про ПЗУ загрузки знаете?
Область 0xFF0000. Её самому определить и записать можно?

Сообщение отредактировал partsun - Jun 6 2007, 07:05
Go to the top of the page
 
+Quote Post
bmf
сообщение Jun 6 2007, 09:57
Сообщение #12


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

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



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

не конечно, это масочное ПЗУ для загрузчика.
Это только в новых чипах Blackfin BF52x и BF54x уже есть 8кБ однократно программируемой памяти для кода, данных или закрытых ключей
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 7th July 2025 - 09:50
Рейтинг@Mail.ru


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