Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Expert Linker в VDSP
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Itch
Программирую Blackfin'ы в VDSP 5.0 и задался вопросом. Можно ли как-то автоматизированно поместить часть кода во внешнюю SDRAM, а часть - куда получится? Т.е. например есть у меня в проекте какая-нибудь большая библиотечка типа ucGUI, и хочу я, чтобы она не занимала место в быстрой набортной памяти а спокойно лежала себе в SDRAM. Вроде можно в исходниках перед объявлениями переменных и функций писать section ("sdram0"), но делать это для всей ucGUI, в которой очень много функций, мягко говоря, геморно. Так вот, можно ли как-то задать в ldf файле или еще где сразу список файлов, подлежащих депортации на внешние просторы SDRAM? Ну или другой подход - может просто задать критичным участком кода жесткую привязку к внутренней памяти, а все остальное пойдет куда получится?

И еще, у кого-нибудь он вообще работает нормально, этот гребаный Expert Linker? Сначала он открывал ldf файл в режиме read-only, т.е. ничего не мог поменять, теперь вообще студия виснет и падает из-за него (5 студия + 2 апдейта).
fontp
Цитата(Itch @ Apr 1 2008, 18:25) *
Программирую Blackfin'ы в VDSP 5.0 и задался вопросом. Можно ли как-то автоматизированно поместить часть кода во внешнюю SDRAM, а часть - куда получится? Т.е. например есть у меня в проекте какая-нибудь большая библиотечка типа ucGUI, и хочу я, чтобы она не занимала место в быстрой набортной памяти а спокойно лежала себе в SDRAM. Вроде можно в исходниках перед объявлениями переменных и функций писать section ("sdram0"), но делать это для всей ucGUI, в которой очень много функций, мягко говоря, геморно. Так вот, можно ли как-то задать в ldf файле или еще где сразу список файлов, подлежащих депортации на внешние просторы SDRAM? Ну или другой подход - может просто задать критичным участком кода жесткую привязку к внутренней памяти, а все остальное пойдет куда получится?


Analog использует такую фигню: пишет файл priority.asm
и включает его в проект. Каждый модуль, получает приоритет в отношении
размещения во внутренней памяти. В первую очередь во внутрь размещаются модули
с высоким приоритетом - с малыми числами priority

Пример:

/* #######################################################
*
* Critical C-Runtimes Execution Blocks used by the stack
*
* #######################################################
*/
.extern ___memcpy;
.priority ___memcpy, "..\..\..\..\..\libc\runtime\_memcpy.s", 4000;

.extern ___memcpy2;
.priority ___memcpy2, "..\..\..\..\..\libc\runtime\_memcpy2.s", 4000;

.extern ___float32_div;
.priority ___float32_div, 3999;

.extern ___float32_to_unsigned_int32;
.priority ___float32_to_unsigned_int32, 2022;

.extern ___float32_mul;
.priority ___float32_mul, 2304;

/* #######################################################
*
* Critical VDK Execution Blocks used by the stack
*
* #######################################################
*/

.extern _tmk_TimerISR;
.priority _tmk_TimerISR , 2397;

.extern _tmk_DispatchDPCs;
.priority _tmk_DispatchDPCs, 2391;

.extern _TMK_AcquireMasterKernelLock;
.priority _TMK_AcquireMasterKernelLock, 2406;

.extern _TMK_ReleaseMasterKernelLock;
.priority _TMK_ReleaseMasterKernelLock, 2403;

.extern _tmk_ExceptionHandler;
.priority _tmk_ExceptionHandler, 2262;

.extern _tmk_SwitchContext_ISR;
.priority _tmk_SwitchContext_ISR, 2220;

.extern _tmk_SwitchContext_Runtime;
.priority _tmk_SwitchContext_Runtime, 2286;

.extern _PostSemaphore__3VDKF11SemaphoreID;
.priority _PostSemaphore__3VDKF11SemaphoreID, 2274;

.extern _PendSemaphore__3VDKF11SemaphoreIDUi;
.priority _PendSemaphore__3VDKF11SemaphoreIDUi, 2256;

.extern _GetThreadID__3VDKFv;
.priority _GetThreadID__3VDKFv, 2367;

.extern TMK_GetUptime;
.priority TMK_GetUptime , "..\..\..\Timer_BF.asm" , 2370;


/* ##########################################################
*
* Critical Device Driver Execution Blocks used by the stack
* This is applicable only for the BF537 on-chip MAC driver.
*
* ##########################################################
*/

#ifdef __ADSPBF537__
.extern _EnterCriticalRegion;
.priority _EnterCriticalRegion, "ADI_ETHER_BF537.c", 2337;

.extern _FlushInvArea;
.priority _FlushInvArea, "ADI_ETHER_BF537.c", 720;

.extern _QueueNewFrames;
.priority _QueueNewFrames, "ADI_ETHER_BF537.c", 2280;

.extern _EtherInterruptHandler;
.priority _EtherInterruptHandler, "ADI_ETHER_BF537.c", 729;

.extern _DmaErrorInterruptHandler;
.priority _DmaErrorInterruptHandler, "ADI_ETHER_BF537.c", 732;

.extern _QueueFrames;
.priority _QueueFrames, "ADI_ETHER_BF537.c", 2202;

.extern _ProcessCompletion;
.priority _ProcessCompletion, "ADI_ETHER_BF537.c", 2094;

.extern _FlushArea;
.priority _FlushArea, "ADI_ETHER_BF537.c", 2292;

.extern _RdPHYReg;
.priority _RdPHYReg, "ADI_ETHER_BF537.c", 2334;

.extern _AppendPending;
.priority _AppendPending, "ADI_ETHER_BF537.c", 2199;

.extern _RxInterruptHandler;
.priority _RxInterruptHandler, "ADI_ETHER_BF537.c", 2163;

.extern _TxInterruptHandler;
.priority _TxInterruptHandler , "ADI_ETHER_BF537.c", 2085;

.extern _adi_pdd_Read;
.priority _adi_pdd_Read, "ADI_ETHER_BF537.c",1929;

.extern _adi_pdd_Write;
.priority _adi_pdd_Write, "ADI_ETHER_BF537.c", 2151;

#endif /* __ADSPBF537__ */

и т.д. и т.п.
Itch
fontp, спасибо, очень полезная информация!
http://bfinternals.blogspot.com/ - здесь описано подробнее и на английском.
Приведенный выше файл был набит ручками или же его можно как-то сгенерить, профайлером например?
fontp
Цитата(Itch @ Apr 1 2008, 19:04) *
fontp, спасибо, очень полезная информация!
http://bfinternals.blogspot.com/ - здесь описано подробнее и на английском.
Приведенный выше файл был набит ручками или же его можно как-то сгенерить, профайлером например?


Как-то что-то похожее можно сгенерить статистическим профайлером в эмуляторе. Но набивать всё равно нужно руками, ведь требуется полный путь к библиотечным модулям

Для полной автоматизации процесса у AD есть специальный command-line тул PGO Linker
Application Note EE-306
fontp
Про грёбаный эксперт линкер здесь
http://www.blackfin.org/phorum/read.php?6,10147

и около. Там смысл в том, что эти файлы регенерируются VDSP
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.