Zaawansowane funkcje Linkera. Sekcja 13



Podobne dokumenty
MS Visual Studio 2005 Team Suite - Performance Tool

Zarządzanie sieciami telekomunikacyjnymi

Programowanie niskopoziomowe

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Ćwiczenia 2 IBM DB2 Data Studio

Logika rozmyta typu 2

Sieciowa komunikacja procesów - XDR i RPC

Układy reprogramowalne i SoC Język VHDL (część 4)

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Instrukcja obsługi User s manual

Wykaz linii kolejowych, które są wyposażone w urządzenia systemu ETCS

Wykaz linii kolejowych, które są wyposażone w urzadzenia systemu ETCS

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Wykład 4. Środowisko programistyczne

Kompliator C/C++ Sekcja 14

KONFIGURACJA NOWEGO PROJEKTU W CODE COMPOSER STUDIO

Programowanie w asemblerze Linkowanie

Post-relacyjne bazy danych

Procedury i funkcje składowane

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

I.Wojnicki, Tech.Inter.

Tworzenie dokumentacji

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

Język PL/SQL Procedury i funkcje składowane

Co to jest Flexbox, zalety Wsparcie dla przeglądarek, wady Dostępność a Flexbox Przykłady, zastosowanie Test

Software package and information systems

SQL 4 Structured Query Lenguage

Komputery przemysłowe i systemy wbudowane

Oferta przetargu. Poland Tender. Nazwa. Miejscowość. Warszawa Numer ogłoszenia. Data zamieszczenia Typ ogłoszenia

TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty

Dynamiczny DNS dla usług typu Neostrada przykład konfiguracji

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Wonderware InTouch Machine Edition 2014 R2

Microsoft Foundation Classes

Wstęp do assemblera MA51

Projektowanie Urządzeń Cyfrowych

Modulacja i kodowanie. Labolatorium. Kodowanie źródłowe Kod Huffman a

Realizacja systemów wbudowanych (embeded systems) w strukturach PSoC (Programmable System on Chip)

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Kompilator języka C na procesor 8051 RC51 implementacja

Pobieranie argumentów wiersza polecenia

Programowanie Systemów Wbudowanych

Rev Źródło:

Zarządzanie pamięcią. Zarządzanie pamięcią. Podstawy. Podsystem zarządzania pamięcią. Zadania podsystemu: W systemie wielozadaniowym:

Engineering design services

Camspot 4.4 Camspot 4.5

Rys. 1.Okno główne serwera Cisco TFTP Server. Rys.2.Okno opcji serwera Cisco TFTP Server

1.Wstęp. 2.Generowanie systemu w EDK

Pakiety podprogramów Dynamiczny SQL

ten tekst jest pochyły

Application Layer Functionality and Protocols

PMiK Programowanie Mikrokontrolera 8051

Laboratorium Programowania Kart Elektronicznych

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

1. Dyrektywy asemblerowe

Mikroprocesor Operacje wejścia / wyjścia

PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Instructions for student teams

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Hard-Margin Support Vector Machines

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Przykład połączenie z bazą danych

LCD (Liquid Crystal Display)

dynamiczny przydział pamięci calloc() memset() memcpy( ) (wskaźniki!! )

Tworzenie raportów XML Publisher przy użyciu Data Templates

TTIC 31210: Advanced Natural Language Processing. Kevin Gimpel Spring Lecture 9: Inference in Structured Prediction

Pakiet HI-CROSS firmy Hiware

Jak się poruszać w świecie Java Plug-inów (JRE)

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Rev Źródło:

Struktura bazy danych

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Potwierdzenie zamówienia za pomocą metody przesyłania plików PL

deep learning for NLP (5 lectures)

Programowanie Współbieżne

architektura komputerów w 1 1

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Materiały dodatkowe. Raspberry Pi

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

15. Funkcje i procedury składowane PL/SQL

1. Ustanawianie ograniczeń na użycie zasobów

Optimizing Programs with Intended Semantics

Zarządzanie sieciami komputerowymi - wprowadzenie

INSTRUKCJE JAK AKTYWOWAĆ SWOJE KONTO PAYLUTION

Wstęp. do języka C na procesor (kompilator RC51)

Podstawy. Podsystem zarządzania pamięcią - zadania: Wiązanie (binding) rozkazów i danych z adresami pamięci. W systemie wielozadaniowym:

POLITYKA PRYWATNOŚCI / PRIVACY POLICY

Projektowanie z użyciem procesora programowego Nios II

PROMOTION - Flexible Ducts and Accessories - FLX-REKU P13.1/2013

Laboratorium Programowania Kart Elektronicznych

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Transkrypt:

Zaawansowane funkcje Linkera Sekcja 13

Zaawansowane funkcje linkera Linker "rozwiazuje" adresowanie absolutne i tworzy plik wykonywalny (.DXE) Advanced Linker Support dzielenie pamieci wszystkie 21161 s w klusterze uzyskac dostep do zalinkowanego symbola dzilonej pamieci zewnetrznej softwarowe overlays subroutine i dane moga 'zyc' w zewnetrznej pamieci byc przeslane do pamieci wewnetrznej by 'run' bardziej efektywnie

Shared Memory Shared Memory Support SHARC cluster sharing an external block of memory Data or subroutines can be accessed Software support for shared memory systems The same buffer in external memory is accessible by all SHARCs via a common symbol. Linker creates a.sm file that contains the resolved addresses for all the shared memory symbols in the project The programmer can link against.sm file/files to resolve the absolute addresses of shared memory symbols

Przyklad dzielenia pamieci dwa SHARC moga miec dostep do tego samego bufora danych w pamieci zewnetrznej linker bedzie rozwiazywac wszystkie symbole adresu dla obu plikow wykonywalnych SHARC. Linker korzysta z informacji z LDF, ktore zaimplementowal programista. SHARC 1.extern buf_1;.extern buf_2; SHARC 2.extern buf_1;.extern buf_2; Shared External Memory buf_1 buf_2

Przyklad dzielenia pamieci Shared.asm.global buf_1;.global buf_2;.section/dm sm_data;.var buf_1[100];.var buf_2[50]; SHARC1.asm.extern buf_1;.extern buf_2;.section/pm pm_code; r0=dm(buf_1); r1=dm(buf_2); Variables can be defined in a separate file or within a SHARC s source code. This example uses variables defined in a separate file. SHARC2.asm.extern buf_1;.extern buf_2; Or, If variables defined within SHARC2 s source code.global buf_1;.global buf_2;.section/dm sm_data;.var buf_1[100];.var buf_2[50];.section/pm pm_code; r0=dm(buf_1); r1=dm(buf_2);

Przyklad dzielenia pamieci LDF SHARED_MEMORY /* Global command */ { OUTPUT(common.sm) Object Section name (defined in source file) SECTIONS Assembled { SM_1 source { INPUT_SECTIONS( shared.doj(sm_data) ) } >Ext_dat } } /*end shared-memory*/ PROCESSOR px1 { LINK_AGAINST( common.sm ) OUTPUT( px1_fft.dxe ) SECTIONS { include Sections1.h } } /* end px1 */ PROCESSOR px2 { LINK_AGAINST( common.sm ) OUTPUT( px2_fft.dxe ) SECTIONS { include Sections2.h } } /* end px2 */ Memory-segment name ( defined in LDF )

Overlay softwarowy

Softwerowy Overlay Co jesli moj kod jest za duzy do pamieci wewnetrznej? bezposrednie wykonanie w pamieci zewnetrznej wykonalnosc pakietow jest wolniejsza zajmuje cluster bus Overlay (nalozenie w pamieci) kod/dana jest skladowana ( lives ) w pamieci zewnetrznej i, jesli potrzeba, jest transferowana (DMA) do pamieci wewnetrznej. "Sekwentyzator" programu nie wie o overlay wszystkie overlay musza byc zarzadzane przez oprogramowanie kazde overlay jest przydzielone do run space i live space poprzez LDF wielokrotne Run spaces sa mozliwe Run space moze byc dzielony przez wiele overlay (poprzez tylko jedno overlay moze byc w danym momencie umieszczone w Run space)

Podstawowe pytania gdzie w pamieci zewnetrznej "zyje" overlay? LDF mowi linkerowi zakres adresu dla live space gdzie w wewnetrznej pamieci overlay sie rozpocznie? LDF mowi linkerowi zakres adresu dla run space jak dostac sie z live space do run space? maly "subroutine" nazywany overlay-manager* ustawia DMA bazujac na informacji wygenerowanej przez linker jak okreslic "subroutine"? Overlay-manager wykorzystuje informacje zwracane przez linker jak otrzymac "subroutine", ktora chcemy uruchomic? Overlay-manager* wykonuje skok uzywajac informacji zwracanej przez linker * overlay manager jest kodem napisanym przez programujacego W SW tools zalaczamy przyklad overlay managers

Linker Generated Overlay Support wyszczegolnic overlay live space i run space (w LDF) wygenerowac stale dla overlay-manager Overlay begin and end live address Overlay Ids Overlay run size (bytes and words) Overlay live size Procedure Linkage Table (PLIT) prosta jump-table jest uzywana do konfigurowania overlay-manager zawiera definiowany przez uzytkownika kod do wykonania przy kazdym dostepie do symbolu w overlay. plik.ovl jest generowany dla kazdego overlay

Overlay External Memory (live space) Internal Memory Overlay 1 Overlay 2 FUNC_A FUNC_B FUNC_C (non-overlay) Interrupt Vector Table Main code PLIT overlay manager Overlay 3 Overlay 4 Overlay 5 FUNC_D FUNC_E DATA_A DATA_B FUNC_F FUNC_G Run Space for Overlays 1 and 2 Run Space for Overlays 3, 4 and 5

Overlay - kontynuacja przykladu MEMORY { int_vect { TYPE(PM RAM) START(0x00040000) END(0x000400ff) WIDTH(48) } pm_code { TYPE(PM RAM) START(0x00040100) END(0x00040fff) WIDTH(48) } pm_code1 { TYPE(PM RAM) START(0x00041000) END(0x000414ff) WIDTH(48) } pm_code2 { TYPE(PM RAM) START(0x00041500) END(0x000419ff) WIDTH(48) } pm_data { TYPE(PM RAM) START(0x00042a00) END(0x00043fff) WIDTH(32) } } dm_data { TYPE(DM RAM) START(0x00050000) END(0x00053fff) WIDTH(32) } ovl_code { TYPE(DM RAM) START(0x00200000) END(0x002001ff) WIDTH(32) } ovl1_code { TYPE(DM RAM) START(0x00200200) END(0x002007ff) WIDTH(32) }

Umiejscowienie overlay w pamieci Sections { sec_1 { INPUT_SECTIONS(main.doj(seg_pmco) ovl_mgr.doj(seg_pmco)) OVERLAY_INPUT /* create an overlay file called OVLY_one.ovl */ { OVERLAY_OUTPUT(OVLY_one.ovl) Memory segment where INPUT_SECTIONS( FUNC_A.doj(pm_code) ) the overlays will live } >ovl_code (placed first-come, first-served basis) OVERLAY_INPUT /* create an overlay file called OVLY_two.ovl */ { OVERLAY_OUTPUT(OVLY_two.ovl) INPUT_SECTIONS( FUNC_B.doj(pm_code) FUNC_C.doj(pm_code) ) } >ovl_code } >pm_code1 Memory segment where input-sections (including overlays) will run } sec_2 {INPUT_SECTIONS($OBJECTS(seg_dmda))}>mem_data // remaining input sections (PM data, etc.)

Stale Linker Overlay Linker automatycznie generuje stale dla kazdego symbolu overlay _ov_startaddress_n _ov_endaddress_n _ov_size_n ( N is replaced by _ov_word_run_size_n the overlay ID ) _ov_word_live_size_n _ov_runtimestartaddress_n Te stale sa zwykle zachowywane w pamieci i uzywanej przez nadzor overlay do ustawienia DMA dla overlay'a.

Overlay 1 ROM Overlay 2 RAM Overlay RunTime Memory Linker automatycznie generuje nastepujace symbole: _ov_startaddress_1 _ov_startaddress_2 _ov_endaddress_1 _ov_endaddress_2 _ov_size_1 _ov_size_2 _ov_word_live_size_1 _ov_word_live_size_2 _ov_word_run_size_1 _ov_word_run_size_2 _ov_runtimestartaddress_1 _ov_runtimestartaddress_2 13-15 Analog Devices Confidential a

Procedure Linkage Table (PLIT) PLIT jest jump-table (podobnie do Interrupt-Vector-Table) dla kazdego overlay istnieje wejscie PLIT kazdy PLIT ma identyczny kod kod w PLIT jest definiowany przez uzytkownika w LDF (jakakolwiek instrukcja asemblerowa moze byc uzyta w PLIT) Linker usuwa odwolania do funkcji overlay. Zastepuje bezposrednie odwolania, odwolaniami zwiazanymi z wejsciem PLIT call FUNC1; will be replaced with call.plt_func1; typowe entry PLITa: okresla Overlay-ID okresla Function s ddress wywoluje overlay-manager. Note: The PLIT must be place in internal (non-overlay) memory

Komendy PLIT definiowane przez USERa uzytkownik pisze instrukcje dla PLIT w LDF kod PLIT okreslony w LDF jest duplikowany dla kazdego overlay (PLIT entry) PLIT /* LDF Command */ { R0 = PLIT_SYMBOL_OVERLAYID; /* returns overlay ID in R0 */ R1 = PLIT_SYMBOL_ADDRESS; /* returns overlay function */ /* symbol address in R1 */ JUMP _OverlayManager; }

Przyklad PLIT Linker bedzie umieszczac zdefiniowany przez uzytkownika kod PLIT dla kazdego symbolu referencyjnego Overlay 1 FUNC_A Overlay 2 FUNC_B FUNC_C /* Main code */ Main: call.plt_func_a... call.plt_func_c call.plt_func_b.. /* PLIT */.plt_func_a:.plt_func_b:.plt_func_c: r0=0x00001; r1=0x41000; jump OverlayManager; r0=0x00002; r1=0x41000; jump OverlayManager; r0=0x00002; r1=0x41200; jump OverlayManager;

Umiejscowienie kodu PLIT programista umieszcza PLIT w segmencie pamieci wewnetrznej SECTIONS {.plit { } >seg_pmco } instruuje linker w przetwarzaniu kodu PLIT w segmencie pamieci seg_pmco. w celu uzyskania dalszych informacji o overlay i jego zarzadzaniu zobacz: EE-66, EE-180, and EE-230