Architektura von Neumanna, przykładowe procesory[3]


AGH, Katedra Automatyki
PROCESORY SYGNAAOWE I
MIKROKONTROLERY
Mariusz Pauluk
Wykład IV Mikrokontrolery
Kierunek: Automatyka i Robotyka
Architektura Von Neumanna
Rozwinął ją węgierski matematyk: John von Neumann.
Koncepcja ta została po raz pierwszy opublikowana w 1946 roku
wspólnie przez: Burk a, Goldstine a i Von Neumanna. Zdominowała
budowę komputerów na następne dziesięciolecia. J. von Neumann
był jednym z konsultantów przy budowie komputera ENIAC.
Podstawowym układem jest ALU (ang. Arithemtic Logic Unit),
wykonuje w kilku cyklach podstawowe operacje, takie jak:
dodawanie, odejmowanie, przesuwanie, zapisywanie do rejestrów.
Bardziej skomplikowane operacje, takie jak: mnożenie i dodawanie
realizowane są za pomocą operacji dodawania, odejmowania i
przesunięcia. Sa to tak zwane urządzenia typu CISC (ang. Complex
Instruction Set Computers), gdzie operacja mnożenia polega na
wykonania kilku mikrokodów zapisanych w pamięci ROM. Dlatego
operacje takie trwają nawet kilkanaście cykli procesora
Cechy charakterystyczne
Architektura von Neumanna
program i dane przechowywane są w tej samej pamięci,
dostęp do programu i danych jest sekwencyjny,
jedna magistrala obsługująca pamięć programu i danych
architektura ta jest łatwiejsza do zrealizowania,
ograniczenia wynikające z niej nie stanowiły poważnego problemu,
przedstawicielami tej technologii są produkty np. Motorola serii
68000, Intel seria i86.
Komputer IAS
W 1951 roku zbudowano w Institute for Advanced Studies w Prinston
komputer wg koncepcji Johna von Neumanna, w którym nie wyróżnia się
danych, tylko umieszcza się je razem z programem we wspólnej pamięci i
odczytuje sekwencyjnie.
Schemat blokowy komputera IAS
URZDZENIA
ALU
WEJŚCIA WYJŚCIA
DANE I ROZKAZY
UKAAD
ADRES
ZARZDZAJCY
WSPÓLNA PAMIĆ
PROGRAMEM
DANYCH I PROGRAMU
Mikroprocesor - architektura
Zespół rejestrów:
dedykowane rejestry  szybsze rozwiązanie (np. Z80)
rejestry stanowią część pamięci RAM  wolniejsze
rozwiązanie (np. ST52x420G2)
Jednostka arytmetyczno - logiczna:
dodawanie, odejmowanie, porównanie dwóch liczb
operacje logiczne AND, OR, EXOR, przesuwanie o n bitów
w lewo lub prawo
operacje na bitach: ustawianie, zerowanie i negowanie bitu
operace wykonywane na liczbach typu : NKB, BCD i U2
Mikroprocesor - architektura
Układ sterowania z dekoderem rozkazów:
faza pobrania kodu operacji,
faza wykonania operacji.
Magistrala adresowa
Magistrala danych
Magistrala sterująca
Mikroprocesor - schemat blokowy
REJESTRY
SZYNA DANYCH
ALU
SZYNA STER.
SZYNA ADRES.
UKAAD
STERUJCY
Mikrokontroler
Jest to mikroprocesor ze zintegrowanymi w jednym układzie
scalonym urządzeniami wejścia wyjścia (I/O). Integracja
realizowana jest zarówno na poziomie sprzętowym
(elektrycznym) jak i logicznym (ingerencja w wewnętrzną
strukturę mikroprocesora.)
Najczęściej mikrokontrolery wyposażane są w:
porty równoległe,
porty szeregowe,
pamięć programu i pamięć danych,
przetworniki A/D i D/A,
moduły komunikacji szeregowej: SPI, I2C, RS485,
kontrolery chip-kart,
kontrolery wyświetlacza LCD,
Mikrokontroler - schemat blokowy
SZ. ADR.
A/D PRZ.
REJESTRY
SZ. DANYCH
D/A PRZ.
ALU
SZ. STER.
UKAAD
STERUJCY
RÓWN. PORTY I/O
PAMIĆ
PROGRAMU
PAMIĆ
DANYCH
SZEREGOWE
KONTROLERY
PORTY I/O
URZDZEC
ZINTEGROWAN.
MAGISTRALE
SZEREGOWE I/0
LCD, 7SEG.
WYŚWIETLACZE
Adresowanie
Adresowanie za pomocą wskazników: MOV A,@R0
KOD ROZKAZU
PC
.
uK
.
.
R0
KOMÓRKA Z DAN
R0 jest wskaznikiem
PAMIĆ
Adresowanie natychmiastowe: MOV A,#13h
KOD ROZKAZU
PC
KOMÓRKA Z DAN
uK
PAMIĆ
Adresowanie
Adresowanie bezpośrednie: MOV A,12h
KOD ROZKAZU
PC
ADRES = 12h
uK
.
.
.
12h DANA
PAMIĆ
Adresowanie
Adresowanie indeksowe: MOVX A,@(A+DPTR)
KOD ROZKAZU
PC
ADRES = 12h
uK
.
.
.
12h DANA
PAMIĆ
Adresowanie
Adresowanie względne: JP 16H
KOD ROZKAZU
PC
PRZESUNICIE = 16h
"
uK
.
.
.
PC=PC+16h
PAMIĆ
Procesory serii AT80, 83, 87
10-bit
Mask A/D
Flash EEPROM ROM OTP F.max 16-bit (chann Watchd
Device (Kbytes) Vcc (V) (Kbytes) (Kbytes) (Kbytes) Pins (MHz) TWI Timer SPI els) ISP UART og
AT80C5112 2,7-5.5 60 2 1 Yes
AT83C5103 2.7-5.5 12 16, 24 16 2 Yes
AT83C5111 2,7-5.5 66 2 Yes 8 1 Yes
AT83C5112 2,7-5.5 66 2 Yes 1 Yes
AT83C51RB2 2,7-5.5 16 40, 44 60 3 1 Yes
AT83C51RC2 2,7-5.5 32 40, 44 60 3 1 Yes
AT87C5103 2.7-5.5 12 16 2 Yes
AT87C5111 2,7-5.5 66 2 Yes 8 1 Yes
AT87C5112 2,7-5.5 60 2 Yes 8 1 Yes
AT87F51 5.0 4 40, 44 33 3 1 Yes
AT87F51RC 5.0 32 40, 44 33 3 1 Yes
AT87F52 5.0 8 40, 44 33 3 1 Yes
DANE ZE STRONY www.atmel.com
Procesory serii AT89
10-bit
Mask A/D
Flash EEPROM ROM OTP F.max 16-bit (chann Watchd
Device (Kbytes) Vcc (V) (Kbytes) (Kbytes) (Kbytes) Pins (MHz) TWI Timer SPI els) ISP UART og
AT89C1051U 1 2,7-6.0 20 24 2 1
AT89C2051 2 2,7-6.0 20 24 2 1
AT89C2051x2 2 2.7-6.0 20 16 2 1
AT89C4051 4 2,7-6.0 20 24 2 1
AT89C51 4 4.0-6.0 40, 44 33 2 1
AT89C51ED2 64 2.7-5.5 2 40 3 Yes Yes 1 Yes
AT89C51ID2 64 2.7-5.5 2 60 Yes 3 Yes Yes Yes Yes
AT89C51RB2 16 2.7-5.5 40 3 Yes Yes 1 Yes
AT89C51RC 32 4.0-6.0 40, 44 33 3 1 Yes
AT89C51RC2 32 2.7-5.5 40 3 Yes Yes 1 Yes
AT89C51RD2 64 2.7-5.5 40 3 Yes Yes 1 Yes
AT89C52 8 4.0-6.0 40, 44 33 3 1
AT89C55WD 20 4.0-6.0 40, 44 33 3 1 Yes
AT89LS51 4 2,7-6.0 40, 44 16 2 Yes 1 Yes
AT89LS52 8 2,7-6.0 40, 44 16 3 Yes 1 Yes
AT89LS53 12 2,7-6.0 40, 44 12 3 Yes Yes 1 Yes
AT89LS8252 8 2,7-6.0 2 40, 44 12 3 Yes Yes 1 Yes
AT89LV51 4 2,7-6.0 40, 44 16 2 1
AT89LV52 8 2,7-6.0 40, 44 16 3 1
AT89LV55 20 2,7-6.0 44 12 3 1
AT89S51 4 4,0-6.0 40, 44 33 2 Yes 1 Yes
AT89S52 8 4,0-6.0 40, 44 33 3 Yes 1 Yes
AT89S53 12 4,0-6.0 40, 44 24 3 Yes Yes 1 Yes
DANE ZE STRONY www.atmel.com
Procesory serii T83, 87, 89
10-bit
Mask A/D
Flash EEPROM ROM OTP F.max 16-bit (chann Watchd
Device (Kbytes) Vcc (V) (Kbytes) (Kbytes) (Kbytes) Pins (MHz) TWI Timer SPI els) ISP UART og
T83C5101 2,7-5.5 16 24, 28 60 3 1
T83C5102 2,7-5.5 8 24, 28 66 3 1
T87C5101 2,7-5.5 16 24, 28 60 3 1
T89C5115 16 ### 2 24, 28 40 2 8 Yes 1 Yes
T89C51AC2 32 ### 2 44, 64 40 3 8 Yes 1 Yes
T89C51IC2 32 2,7-5.5 44 40 Yes 3 Yes Yes 1 Yes
TS80C31X2 2,7-5.5 40, 44 60 2 1
TS80C32X2 2,7-5.5 40, 44 60 3 1
TS80C51U2 2,7-5.5 40, 44 60 3 2 Yes
TS80C52X2 2,7-5.5 8 40, 44 60 3 1
TS80C54X2 2,7-5.5 16 40, 44 60 3 1 Yes
TS80C58X2 2,7-5.5 32 40, 44 60 3 1 Yes
TS83C51RB2 2,7-5.5 16 40, 44 60 3 1 Yes
TS83C51RC2 2,7-5.5 32 40, 44 60 3 1 Yes
TS83C51RD2 2,7-5.5 64 40, 44, 64, 68 60 3 1 Yes
TS83C51U2 2,7-5.5 16 40, 44 60 3 2 Yes
TS87C51RB2 2,7-5.5 16 40, 44 60 3 1 Yes
TS87C51RC2 2,7-5.5 32 40, 44 60 3 1 Yes
TS87C51RD2 2,7-5.5 64 40, 44, 64, 68 40 3 1 Yes
TS87C51U2 2,7-5.5 16 60 3 2 Yes
TS87C52X2 2,7-5.5 8 40, 44 60 3 1
TS87C54X2 2,7-5.5 16 40, 44 60 3 1 Yes
TS87C58X2 2,7-5.5 32 40, 44 60 3 1 Yes
TSC80251G2D 2,7-5.5 40, 44 24 Yes 3 Yes 1 Yes
TSC83251G2D 2,7-5.5 32 40, 44 24 Yes 3 Yes 1 Yes
DANE ZE STRONY www.atmel.com
Sprzętowa realizacja układu  watchdog
T<
VCC P3.0
Q
IMP
555
=kRC
RESET
AT89C51RB2/RC2 - Watchdog
Watchdog - jest to układ mający na celu nadzorowanie poprawności
wykonywanego przez procesor programu. W przypadku  zawieszenia się
procesora układ watchdoga powinien podać aktywny sygnał RESET.
W procesorze Atmela funkcję WD a pełni 14 bitowy licznik oraz rejestr
typu SFR - WDTRST (0A6H). Po uruchomieniu procesora WD jest
wyłączony. Uruchamia się go wpisując do rejestru WDTRST kolejno
wartości: 01Eh i 0E1h. Od tej chwili licznik WD a zlicza cykle maszynowe.
Nie ma możliwości wyłączenia WD a, za wyjątkiem podania sygnału
RESET.
Gdy licznik się przepełni (po 16383 cyklach) nastąpi podanie sygnału
RESET i procesor wyzeruje się. Jedyną możliwością, aby zapobiec temu, jest
zerowanie licznika zanim się przepełni. Licznik WD a zeruje się tak samo jak
uruchamia. Ponowne wpisanie do rejestru WDTRST wartości 01Eh i 0E1h,
wyzeruje licznik. Rozakaz zerujący WD należy umieścić w krytycznym
fragmencie programu. Zawieszenie się programu spowoduje najpózniej po
16,3 ms (XTAL 12MHz) wyzerowanie procesora.
Auto-programowanie
W aplikacjach typu  stand alone , bardzo praktycznym i przydatnym jest mechanizm
samo-programowania się mikrokontrolera. Jest to funkcja pozwalająca na zdalne wpisanie
do mikrokontrolera nowego programu. Po tej operacji mikrokontroler powinien sam się
wyzerować.
Podstawowe problemy przy projektowaniu układu autoprogramującego:
Długi czas zapisu danych do pamięci
ROM powoduje zawieszenie procesora
w takiej konfiguracji
ROM
EEPROM
Pamięć programu
Program obsługujący funkcję
autoprogramowania
K
RAM
Program do podmiany
Pamięć danych
AT89C51RB2/RC2 - autoprogramowanie
Podstawowe własności Flash EEPROM a
pamięć programu,
możliwość zdefiniowania adresu  bootloadera ,
domyślny  bootloader ,
programowanie 5V,
programownaie bajtu - 10ms,
programowanie 32kB - ok.. 10s,
10 000 cykli zapisu,
okres podtrzymania danych - 10 lat
programowanie po 1 bajcie lub po stronach 128 bajtowych,
nie jest wymagane wymazanie pamięci przed zaprogramowaniem,
wbudowana biblioteka API do programowania pamięci z poziomu
aplikacji
API - AT89C51RB2/RC2
W procesorze ATMELA dodano drugi rejestr DPTR. Program operuje na rejestrze
DPTR0 lub DPTR1 w zależności od ustawienia bitu DPS.
DPS = AUXR1.0 (adres SFR = 0A2h). DPS = 0 wskazuje na DPTR0 jako aktywny,
DPS = 1 wskazuje na DPTR1.
Funkcje API wywołuje się zawsze poprzez tę samą procedurę PGM_MTP
umieszczoną w pamięci pod adresem FFF0h. Numer wywoływanej funkcji ustawia
się w rejestrze R1.
Wybrane funkcje API:
Komenda R1 A DPTR0 DPTR1 Wartość zwrotna Opis funkcji
Wymaż blok 0000h - 1FFFh,
DPH = 00h, DPH =
WYMAŻ BLOK 01h xxh 00h ACC = DPH Wymaż blok 2000h - 3FFFh,
20h, DPH = 40h
Wymaż blok 4000h - 7FFFh
wartość do
ACC = 0 - Zaprogramowanie jednego
ZAPISZ BAJT 02h zaprogram Adres bajtu
arealizowano bajtu w pamięci programu
owania
Liczba Adres pierwszego Adres pierwszego
PROGRMAUJ bajtów do bajtu do bajtu do ACC = 0 - Programowanie do 128 bajtów
09h
STRON DANYCH zaprogram zaprogramowania w zaprogramowania arealizowano w pamięci programu.
owania pamięci programu w XRAM
Kompilator C  SDCC
SDCC jest to kompilator ANSI C
Produkt dystrybuowany jest w wersji opensource i freeware
Kompilator przenaczony jest m.inn. dla procesorów z rodziny
Intel MCS51 (8031,8032,8051,8052)
Kompilator wykorzystuje assembler i linker dla powy`zszych
procesorów dostęnych także w wersji freeware.
Typy danych:
Char 8 bitów (1 bajt)
Short i Int 16 bitów (2 bajty)
Long 32 bity (4 bajty)
Float 32 bity zgodnie ze standardem IEEE
SDCC - ang. Small Device C Compiler,
przedrostki typów danych
Kompilacje wykonuje się komendą sdcc plik.c
Kompilacja gdy projekt zajmuje kilka plików:
sdcc -c plik1.c plik z funkcjami
sdcc -c plik2.c plik z funkcjami
sdcc -c main.c plik z funkcją main
sdcc main.rel plik1.rel plik2.rel  plik główny powinien być na pierwszym
miejscu
Przedrostki dla typów zmiennych dla procesorów z rodziny MCS51
data  jest to domyślny przeddrotek dla zmiennych, określa miejsce
umieszczenia zmiennej w wewnętrznej pamięci RAM, bezpośrednio adresowanej,
np. data unsigned char x
xdata  przedrostek wskazujący, że dana powinna być przechowywana w
zewnętrznej pamięci RAM, np. xdata int y, po takiej deklaracji dwa bajty zostaną
zarezerwowane w zewnętrznej pamięci RAM
SDCC  przedrostki typów danych
idata  zmienna zadeklarowana z takim przedrostkiem zostanie przechowana w
wewnetrznej pamięci RAM adresowanej pośrednio, np. idata unsigned char ala,
zapis jakiejś wartości do takiej zmiennej zostanie wykonany przez dwie instrukcje
assemblerowe:
Przykład:
mov R0, #_ala
mov @R0,#nowa_wartosc
code  zmienna z takim przedrostkiem zostanie ulokowana w pamięci programu.
Na ogół taką zmienną można wyłącznie odczytywać
pdata  przedrostek definiujący pamięć stronicowaną, dla rodziny MCS51
zawsze jest to kontakt z zewnętrzną pamięcią danych, np. pdata unsigned char
*wskaznik
Przykład:
pdata unsigned char *wskaznik
wskaznik = (pdata *)0x00ff;
*wskaznik = 23;
SDCC  przedrostki typów danych
bit  przdrostek określa, że deklarowana zmienna jest bitem i należy ją
umieścić w wewnętrznym obszarze pamięći RAM procesora adresowanej bitowo,
np. bit zmienna_bitowa
sfr lub sbit  przedrostki określają zarówno typ zmiennej jak również miejsce
ich skjładowania, pierwszy definiuje Special Function Register, a drugi Special
Bit, przedrostki pomocne przy dostosowywaniu kompilatora do procesorów
pochodnych rodziny MCS51, np. ADuC812, ADuC831, AT89C51RC2,
Przykład:
sfr at 0xC8 T2CON;
sbit at 0xCF TF2;
SDCC, wskazniki
Istnieje kilka sposobów deklaracji wskazników:
xdata unsigned char * data wskażnik  wskaznik do zmiennej w xdata, wskaznik
przechowywany w pamięci wewnętrznej RAM
data unsigned char * xdata wskażnik  wskaznik do zmiennej w wewnętrznej
pamięci danych, wskaznik przechowywany w zewnętrznej pamięci RAM
data unsigned char * code wskażnik  wskaznik do zmiennej w wewnętrznej
pamięci RAM, wskaznik przechowywany w pamięci programu
code unsigned char * code wskażnik  wskaznik do zmiennej w pamięci programu,
wskaznik przechowywany w pamięci programu
Wskazniki dla których nie została określona pamięć mają długość
3 bajtową
SDCC, adresowanie bezwzględne
Można narzucić kompilatorowi adres, pod którym zmienna
ma być przechowywana, np.
xdata at 0x01aa int zmienna
Zmienna będzie przechowywana w dwóch bajtach, o adresach
0x01aa i 0x01ab
Kompilator nie rezerwuje tego adresu, tzn. że może wystąpić
konflikt z innymi zmiennymi, programista sam musi to kontrolawać.
Adresy przydzielone poszczególnym zmiennym można sprawdzić
w plikach .rst, .lst i .map
Adresowanie bezwzględne dostęne jest dla każdego typu zmiennej
i każdej pamięci, także dla zmiennej bitowej
SDCC - Zmienne lokalne i parametry funkcji
Zmienne lokalne i parametry funkcji są przechowywane w pamięci
wewnętrznej lub zewnętrznej w zależności o opcji kompilatora (small
model i large model)  domyślna działalnośc kompilatora, takie
funkcje określane są jako non-reentrant
Powyższe zmienne mogą być także przechowywane na stosie
(funkcje takie określa się jako reentrant), zamiast w pamięci, w tym
celu na końcu nagłówka funkcji należy umieścić słowo kluczowe
reentrant np.
void funkcja_przykladowa (param1 int) reentrant
Jeżel parametry funkcji mają zdefiniowaną pamięć gdzie powinny być
przechowywane, to zostanie to zignorowane, a parametry funkcji zostaną i tak
umieszczone na stosie,
Na stosie zostaną umieszczone tylko te zmienne lokalne, które nie mają
zdefiniowanych jawnie pamięci, w których maja być przechowywane
SDCC - Nakładanie się zmiennych
Kompilator ma wbudowany mechanizm optymalizacji ilości
zużywanej pamięci wewnętrznej, w tym celu wyodrębnia w niej
fragment na zmienne, które mogą zajmować ten sam adres fizyczny,
obszar ten określa się jako overlayable segment
Zmienne i parametry funkcji umieszczane są w overlayable segment
jeżeli:
Funkcja nie ma w sobie wywołań do innych funkcji
Funkcja jest non-reentrant
Model pamięci jest small  domyślny
Jeżeli zmienna lokalna funkcji ma jawnie określoną pamięć, w której
ma być przechowywana, taka zmienna nie zostanie umieszczona w
segmencie overlayable
Mechanizm umieszczania zmiennych w segmencie overlayable jest
domyślny, w kilku przypadkach może spowodować błędy
SDCC - Overlayable segment
Kompilator decyduje o umieszczeniu zmiennych we wspólnym
segmencie pamięci jeżeli wykluczy ich równoczesne wykorzystanie, nie
zawsze jednak potrafi to trafnie ocenić
Kompilator nie analizuje pod tym względem zawartośći programu po
słowie kluczowym inline (czyli nie analizuje assemblera umieszczonego w
ciele funkcji), jeżeli z poziomu assemblera wywołana jest inna funkcja, to
może się okazać, że funkcja wywołująca i wywoływana ma pewne zmienne
przechowywane we wspólnym obszarze pamięci
Aby uniknąć możliwośći wystąpienia takiej kolizji, funkcja wywoływana z
poziomu assemblera powinna być skompilowana jako reentrant, w tym
celu wykorzystuje się komenndę preprocesora #pragma NOOVERLAY,
którą umieszczaja się przed funkcją wywoływaną
Podobna sytuacja zachodzi dla funkcji wywoływanych z poziomu funkcji
obsługujących przerwania
SDCC - Overlayable segment
Przykład:
#pragma SAVE //zachowanie dotychczasowych ustawień
#pragma NOOVERLAY // ustawienie opcji, nie umiesczania we wspólnej pamięci
void ustaw_adres(int adres) {
int adres_koncowy;
adres_koncowy = adres*32;
}
#pragma RESTORE //przywrócenie początkowych ustawień
void obsluga_przerwania() interrupt 2 {
ustaw_adres(16);
}
SDCC - Przerwania
Funkcję obsługującą przerwanie defiunuje się następująco:
void funkcja(void) interrupt 1 {...;}
Nie jest zalecane wywoływanie innych funkcji z procedury
obsługi przerwań
Nie należy używać w procedurach obsługi przerwań bilblioteki z
funkcjami mnożenia,dzielenia itp. na liczbach typu int i long.
Chyba, że zostaną przekompilowane z opcją:
--stack-auto, i ponownie z opcją
--int-long-rent
Jeżeli procedura obslugująca przerwania modyfikują zmienną,
która dostępna jest także dla innych procedur, to taką zmienną
należy zadeklarować z przedrostkiem volatile
SDCC - Assembler
Wewnątrz funkcji możnba Pomocną i niebezpieczną
umieszczać kod napisany w dyrektywą do umieszczania kodu w
assemblerze, służą do tego assemblerze jest: _naked, która
przedrostki _asm i _end asm, powoduje, że kompilator nie
pomiędzy którymi należy umieścić zabezpiecza zmiennych przed
kod (linijka pod linijką) w wywołaniem funkcji, nie umieszcza
assemblerze także na jej końcu instrukcji ret
Przykład 1: Przykład 2:
void przyklad(void) void f_przyklad(void) interrupt 1 _naked
{ {
DPTR = 132; _asm
_asm M?OV DPTR,#132
MOV DPTR,#132 reti
_endasm _endasm
} }


Wyszukiwarka

Podobne podstrony:
Struktura komputera wg John von Neumana
Jad głowonogów jako przykład procesu ewolucyjnego
Łuczak, Andrzej Cloning by positive maps in von Neumann algebras (2014)
C Coding Techniques for Intel Architecture Processors
KSZTAŁTOWANIE PROCESÓW W OBSZARZE DYSTRYBUCJI NA PRZYKŁADZIE BROWARU XYZ
Nowe a tradycyjne technologie budowlane w procesie edukacji architektów krajobrazu
06 Procesy przyklady
architektura procesora [1] materialy?86 1
15 Sprzezenie procesow na przykladzie rekacji biochemicznych
03 Procesor i jego architektura
Jakubczak Marzenna Architektura stupy buddyjskiej jako przykład projektu sakralnego
The Object Oriented Modeling Process Process Patterns For An Architecture Driven Approach
Rozdział 01 Komunikacja procesora z innymi elementami architektury komputera
CUDA w przykladach Wprowadzenie do ogolnego programowania procesorow GPU cudawp

więcej podobnych podstron