Форум: Техническая поддержка

Тема: Особенности одновременного доступа к памяти DSP из

Вы не вошли.

 Поиск | Регистрация | Вход 

Evgeny
19.05.2001 13:51:40
#1

Гость

Особенности одновременного доступа к памяти DSP из

Итак, есть две программы - одна на DSP (L780, ADSP2185), другая на PC.
Программа на PC читает слова из памяти данных DSP и пишет в некоторые,
Программа на DSP обращается к этим словам "на чтение" и к некоторым - "на запись",
причем в DSP программе используются пара прерываний - от таймера и IRQ2 (командное),
в обработчиках которых изменяются некоторые из этих слов (одновременно в dsp программе переменные не меняются )

И вот когда все это начинает работать, изредка проиходят непонятные вещи,
а именно - иногда программа на PC читает совсем не то, что должно быть, иногда перестает работать прерывание IRQ2, иногда - оба прерывания....
Если в последнем случае сделать дамп памяти программ, то обнаруживаются некоторые изменения по сравнению с дампом после инициализации.

Поэтому позвольте поинтересоваться - нет ли каких особенностей при одновременном доступе к памяти DSP из PC и DSP ?

Vlad
19.05.2001 14:00:59
#2

Гость

Re: Особенности одновременного доступа к памяти DSP из

Насколько мне известно, никаких особенностей нет. Скорее всего какой-то программный глюк типа порчи регистров в прерываниях или т.п. Для разумного ответа надо бы побольше информации.

Evgeny
19.05.2001 23:16:08
#3

Гость

Re: Особенности одновременного доступа к памяти DSP из

... а все таки, нечем не чревато одновременная запись в одно слово ? или оно как-то аппаратно разделяется ?
------
Да, действительно, похоже на проблемы со стеком и вложенностью прерываний...
Вот решил поэкспериментировать с периодом таймера, - получается, что при переоде таймера > 2000 глюки пропадают, но как-то это уж очень много!
Кроме всего прочего, для:

static int TIMElevel=0
static int flag=0,cntTimerInt=0;

void hndlTimer ( int fignia)
{
   TIMElevel++;
    switch (flag)
    {
    case 0:
        flag=1; break;
    case 1:
        flag=0; break;
    }
    cntTimerInt++;

   --TIMElevel;
}
================
Получается, что TIMElevel может менятся от -1(!) до 2, что, впрочем вполне можно понять при изучении ассемблерного кода...

В связи с этим возникает несколько вопросов -
- есть ли средства для контроля переполнения сишного стека ?
- есть ли средства для организации семафоров/атомарных операций (аналог xchange на PC) или надо все делать через запрет-разрешение прерываний ?

- (немного из другой области вопрос) какова длительность одного цикла процессора ? 1/14.7MГц, 1/(14.7MГц*2) или 1/33MГц ?

SY,
EK

Evgeny
20.05.2001 15:32:53
#4

Гость

Re: Особенности одновременного доступа к памяти DSP из

Как оказалось, это были последствия предыдущих экспериментов с заголовочными файлами -
VisualDSP помнил, что его не просили в проекте, а для 5.1 я сам забыл.
Между прочим, предыдущие эксперименты заключались в чтении и использовании "Руководства программирования на С для семейства процессоров ADSP-2100", раздел 4.6 "Использование прерываний с С программами для ADSP-2100" - этот раздел точно написан "для врагов".

SY,
EK.

PS: в общем я добился чего хотел (писать на понятном мне языке с использованием одних и тех же заголовочных файлов с описанием структур данных для IBM PC и DSP), хотя несколько смущает время обработки прерываний - порядка 150 циклов, но для начала хватит, а там может и какую ассемберную часть можно будет сделать.

Vlad
22.05.2001 11:13:57
#5

Гость

Re: Особенности одновременного доступа к памяти DSP из

Искренне за Вас рад. Может, Вы теперь напишите маленькое пособие - "Visual DSP для чайников" (страничек на 5-6)? Многие люди Вам были бы благодарны smile

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2

Многоканальный телефон:
+7 (495) 785-95-25
Факс: +7 (495) 785-95-14

Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск