Źródła not katalogowych
-
Strona producenta
- aktualna
- wszystkie dokumenty w jednym miejscu
- biblioteki, kompilatory, programatory
-
ALLDATASHEET.COM
-
Google (zaskoczeni?)
Liczba stron podstawowej dokumentacji
Liczba stron podstawowej dokumentacji
Liczba stron podstawowej dokumentacji
Liczba stron podstawowej dokumentacji
Dokumentacja dodatkowa
-
zalecenia dla elektroników
-
sposób programowania
-
opis bootloadera
-
opis kompilatora
-
dokumentacja złożonych peryferiałów
-
rozwiązania znanych problemów
Podstawowe sekcje w nocie µC
Korzystanie z rejestrów procesora
Przypisanie wartości do rejestru
Przypisanie wartości do rejestru
0x7A = 196; // ❌ Błąd!
Przypisanie wartości do rejestru
(uint8*)0x7A = 196; // ❌ Błąd!
Przypisanie wartości do rejestru
(*(uint8*))0x7A = 196; // 🤔 Nie zawsze zadziała.
Przypisanie wartości do rejestru
(*(volatile uint8*))0x7A = 196; // 🧐
Przypisanie wartości do rejestru
(*(volatile uint8*))0x7A = (1 << 7) | (1 << 6) | (1 << 2);
Przypisanie wartości do rejestru
#define ADCSRA (*(volatile uint8*))0x7A
ADCSRA = (1 << 7) | (1 << 6) | (1 << 2);
Przypisanie wartości do rejestru
#define ADCSRA ((*(volatile uint8*))0x7A)
#define _BV(bit) (1 << (bit))
ADCSRA = _BV(7) | _BV(6) | _BV(2);
Przypisanie wartości do rejestru
#define ADCSRA ((*(volatile uint8*))0x7A)
#define _BV(bit) (1 << (bit))
#define ADEN 7
#define ADSC 6
#define ADPS2 2
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS2);
Przypisanie wartości do rejestru
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADSC) | _BV(ADPS2); // 🥳
Ustawianie bitów
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADPS2);
ADCSRA = _BV(ADSC); // Nie o to nam chodziło (╯°□°)╯︵ ┻━┻
Ustawianie bitów
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADPS2);
ADCSRA = ADCSRA | _BV(ADSC);
Ustawianie bitów
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADPS2);
ADCSRA |= _BV(ADSC);
Zerowanie bitów
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADPS2);
ADCSRA = ADCSRA & ~(_BV(ADSC));
Zerowanie bitów
#include <avr/io.h>
ADCSRA = _BV(ADEN) | _BV(ADPS2);
ADCSRA &= ~(_BV(ADSC));
Miary wydajności
Stałoprzecinkowe
-
MIPS (Million Instructions per Second)
-
MIPS (Meaningless Indicator of Processor Speed)
-
BogoMIPS (Bogus MIPS)
-
MOPS (Million Operations per Second)
-
TOPS (Tera Operations per Second lub Trillion Operations per Second)
Miary wydajności
Zmiennoprzecinkowe
-
FLOPS (Floating point Operations per Second)
-
MFLOPS
-
GFLOPS
-
TFLOPS
Oszukujo?
SIMD
Taksonomia Flynna
- SISD (Single Instruction, Single Data)
- zwykły komputer
- SIMD (Single Instruction, Multiple Data)
- operacje wektorowe
- MISD (Multiple Instruction, Single Data)
- redundancja w systemach krytycznych
- MIMD (Multiple Instruction, Multiple Data)
- komputery wieloprocesorowe, klastry obliczeniowe, karty graficzne, koparki kryptowalut
Technical Reference Manual
\(128\text{ op} \cdot 1\text{ GHz}\)
\(128\text{ op} \cdot 1\text{ GHz} = 128 \text{ op} \cdot 10^{9} \cdot \frac{1}{s}\)
\(128\text{ op} \cdot 1\text{ GHz} = \frac{128 \text{ op} \cdot 10^{9}}{s}\)
\(128\text{ op} \cdot 1\text{ GHz} = 128\text{ GOPS}\)
\(128\text{ op} \cdot 1\text{ GHz} = 128\text{ GOPS} \neq 256\text{ GOPS}\)
Gdzie moje GOPS-y? 😠
MAC (Multiply-accumulate)
\(128\text{ MAC} \cdot 1\text{ GHz}\)
\(128\text{ MAC} \cdot 1\text{ GHz} = 128 \cdot 2 \text{ op} \cdot 1\text{ GHz}\)
\(128\text{ MAC} \cdot 1\text{ GHz} = 256\text{ GOPS}\) ✅
TMS320C6000 DSP
for (i = 0; i < count; i++) {
prod = m[i] * n[i];
sum += prod;
}
/*
Loop: ldw .D1 *A4++,A5
|| ldw .D2 *B4++,B5
|| [B0] sub .S2 B0,1,B0
|| [B0] b .S1 loop
|| mpy .M1 A5,B5,A6
|| mpyh .M2 A5,B5,B6
|| add .L1 A7,A6,A7
|| add .L2 B7,B6,B7
*/
Zastosowania MAC
-
FFT (Fast Fourier Transform)
-
DSP (Digital Signal Processing)
-
CNN (Convolutional Neural Network)
MMA (Matrix Multiplication Accelerator)
\(64 \cdot 64\text{ MAC} \cdot 1\text{ GHz}\)
\(64 \cdot 64\text{ MAC} \cdot 1\text{ GHz} = 4096\text{ MAC} \cdot 1\text{ GHz}\)
\(64 \cdot 64\text{ MAC} \cdot 1\text{ GHz} = 8192\text{ op} \cdot 1\text{ GHz}\)
\(64 \cdot 64\text{ MAC} \cdot 1\text{ GHz} = 8\text{ TOPS}\) ✅
Zastosowania MMA
-
CNN (Convolutional Neural Network)
-
FFT (Fast Fourier Transform)
-
DSP (Digital Signal Processing)
-
algebra liniowa
GPT
Liczba neuronów w mózgu ~ 100 miliardów
Liczba synaps (połączeń) w mózgu ~ 100 bilionów
Liczba współczynników Chat GPT 3 ~ 175 miliardów
\(\frac{175\cdot10^9 \cdot 2\text{ op}}{8\text{ TOPS}}\)
\(\frac{175\cdot10^9 \cdot 2\text{ op}}{8\text{ TOPS}} = \frac{350\cdot10^9\text{ op}}{8 \cdot10^{12}\text{ op}\cdot s^{-1}}\)
\(\frac{175\cdot10^9 \cdot 2\text{ op}}{8\text{ TOPS}} = \frac{350\cdot10^9\text{ op}}{8 \cdot10^{12}\text{ op}\cdot \text{s}^{-1}} = 0{,}04375\text{ s}\)
Ale to MMA jest stałoprzecinkowe i 8-bitowe… 🧐