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

 
 
> Перемещение функции в памяти ..., Нужен совет
3.14
сообщение Mar 24 2005, 09:35
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Как в C коректнее скопировать функцию из одной области памяти в другую и затем вызвать из нового местоположения.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3.14
сообщение Mar 24 2005, 13:06
Сообщение #2


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



2 maks
<1. Для решения этой проблемы вводится функция source_f_end(), которая будет лежать после копируемой функции...>
В VDSP такая фишка не проходит, он в памяти располагает не по объявлению а по вызову.
Еще имеется специфика ADSP, регистры имеют разрядность 40 бит, ширина инструкций 48 бит. В моем случае копируемая функция находится в SDRAM, разрядность данных 32 разряда, надо упаковывать в 48 бит.

<Есть стандартный способ передачи параметров в подпрограмму>
А в чем он заключается?
Я решил сделать так, фунции которые будут копироваться в место исполнения общатся с внешней (програмной) средой будут посредством глобального массива аргументов, элементы которого для определенных функций будут являться входными и выходными параметрами.

2 olefil
В общем, взял пример fft_ovly2
Вот кусок менеджера оверлеев отвечающий за DMA передачу
Код
 i8 = runAddresses;
 i0 = liveAddresses;
 r0=0;      
//   Disable DMA
 dm(DMAC0) = r0;  
//   Set DMA external pointer to overlay live address
 r0=dm(m0,i0);
 dm(EIEP0)=r0;\
// Set DMA internal pointer to overlay run address  
 r0=pm(m8,i8);
 dm(IIEP0)=r0;\
 i0=runWordSize;  //  Number of words stored in internal memory  
//                   Most likely the word size will be 48 bits  
//                   for instructions.        
//   Set DMA external modifier
 r0=1;
 dm(EMEP0)=r0;
 i8=liveWordSize; //  Number of words stored in external memory
//                   Most likely the word size will be 32 or16  
//                   bits for external storage.    
//   Set DMA internal modify to 1
 dm(IMEP0)=r0;
//   Set DMA internal count to Overlay run size.    
 r0=dm(m0,i0);
 dm(CEP0)=r0;
//   Set DMA external count to Overlay live size.    
 r0=pm(m8,i8);
 dm(ECEP0)=r0;
//   DMA enabled, instruction word, Master, 48-32 packing    
 r0=0x2e1;
 dm(DMAC0)=r0;


Переписал это на C

Код
 *pDMAC0=0;
 *pEIEP0=pointerDest;
 *pIIEP0=pointerTarget;
 *pEMEP0=1;
 *pIMEP0=1;
 *pCEP0=0x20;
 *pECEP0=0x20;
 *pDMAC0=0x2e1;

Размер функции в которую копируется 1kword.
Копируемая функция размером 10word.

Разместил копируемую функцию во внутренней памяти, содержимое первых шести слов :
Код
043ff8000000 0f0200000008 ad02fffffffe
10010000c009 013e00001012 11000000c009


Далее разместил копируемую функцию в SDRAM, после завершения работы DMA, содержимое скопированной функции:
Код
00000000F800 00000008043F 0F020000FFFE
AD02FFFF0000 0000C0090000 000010121001


???


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 3.14   Перемещение функции в памяти ...   Mar 24 2005, 09:35
- - alex_k   Размышления вслух... Если после компиляции си-комп...   Mar 24 2005, 10:01
- - makc   Цитата(3.14 @ Mar 24 2005, 12:35)Как в C коре...   Mar 24 2005, 10:05
- - olefil   От части этот механизм представлен в оверлеях, ког...   Mar 24 2005, 11:18
- - 3.14   2 max Я правильно понял Ваш пример? Копируемая фун...   Mar 24 2005, 11:20
|- - olefil   Компилятор в VDSP может не понимать того, что вы д...   Mar 24 2005, 11:24
|- - makc   Цитата(3.14 @ Mar 24 2005, 14:20)2 max Я прав...   Mar 24 2005, 11:53
- - 3.14   2 olefil Я по большому счету, пытаюсь перенести as...   Mar 24 2005, 11:25
|- - olefil   А вчем конкретная проблема? Может чем помогу?   Mar 24 2005, 11:27
|- - bve   Есть еще одна проблема, зависящая от компилятора и...   Mar 24 2005, 11:51
|- - makc   Цитата(bve @ Mar 24 2005, 14:51)Есть еще одна...   Mar 24 2005, 11:57
|- - olefil   Скорее это так, проблем с передачей параметров дей...   Mar 24 2005, 12:03
|- - sweetin   Цитата(3.14 @ Mar 24 2005, 16:06)<Есть ста...   Mar 24 2005, 13:20
|- - olefil   У меня ща все платы в доработке не фига не попробо...   Mar 24 2005, 13:47
- - 3.14   2 olefil <А че показывает VDSP...> Листинг м...   Mar 24 2005, 13:58
|- - olefil   Если disasm показывает фигню, то функция паковки 4...   Mar 24 2005, 14:01
- - 3.14   Кстати, а как из С обратиться к PX регистру?   Mar 24 2005, 14:52
|- - olefil   Плату мне так и не подогнали. А на счет PX, глянул...   Mar 25 2005, 09:52
- - 3.14   Спасибо, разобрался, заменил DMA на самодельную пе...   Mar 25 2005, 10:09
|- - olefil   Хороший вопрос. Конечно можно провести поиск конца...   Mar 25 2005, 10:21
- - 3.14   <Если еще интресно почему DMA не пашет я гляну?...   Mar 25 2005, 10:40
- - olefil   Очень странно... потому как я их там только и держ...   Mar 25 2005, 10:51


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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 00:05
Рейтинг@Mail.ru


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