Public Documentation
  • Introduction
  • Getting started
    • Introduction
    • 1. Welcome Page
    • 2. Introduction (Beginner's Guide)
  • Portal Tools
    • Blocko
      • Ůvod do blocka
      • Flip-flop
      • REST-API bloček
    • Grid
      • Úvod do GRID
      • Základní Tlačítko (základy GRID)
      • vylepšený Přepínač (stylování a pokročilé možnosti GRID)
      • text generátor button (messeage type, two elements one widget)
      • graf (pokročilé funkce GRID)
      • Slider (User class v GRIDu)
      • Styly a jejich použití
  • Cloud
    • Cloud
    • Instancies
    • Rest-Api
  • General
    • What we plan
  • Hardware a programování
    • Úvod
      • Nahrání prvního programu
    • Konektivita
      • Specifikace zdroje internetu
      • GSM
      • 6LowPAN
      • Komunikace s portálem
      • Přepínání mezi servery
    • Hardware
      • Základní jednotky
        • IODAG3E
          • Rozhraní a periférie
          • Konektor X a Y
          • Napájení
          • Připojení zdroje k VBAT
          • Paměti
          • Technické specifikace
          • Schémata
        • IODAG3L
      • Rozšiřující moduly
        • GSM shield
        • LED shield
        • Relay shield
        • RFID shield
        • Ultrasonic shield
        • Meteo shield
        • Movement shield
        • PIR shield
        • RGB Displej shield
        • Serial shield
      • Ostatní
        • DevKitG3
          • Schéma
        • TK3G
          • Schéma
        • ZPPG3
          • Schéma
        • WEXP
    • Programování HW
      • Architektura FW
        • Aktualizace FW
        • Autobackup
      • Struktura programu
      • Byzance API
        • Vstupy a výstupy do Portálu
        • Callback Busy
        • Odložený restart
        • Callbacky připojení
        • Uživatelská makra
      • MBED API
        • Vstupy a výstupy
        • Komunikační rozhraní
        • Časování
        • RTOS
      • Knihovny
        • DHT
        • DS1820
        • Dali
        • EdgeStruct
        • I2CWrapper
        • Knock
        • MFRC522
        • MFRC522::MIFARE_Key
        • MPU9150
        • ms5637
        • OneWire
        • PCA9536
        • RGB_matrix
        • RollerDrive
        • SHT21
        • ST7565
        • Servo
        • TCA6424A
        • TLC59116
        • TripleSevenSeg
        • MFRC522::Uid
        • WS2812
        • WakeUp
      • Offline programování
        • Vlastní IDE
        • Upload kódu z GUI
        • Upload kódu z konzole
        • Upload kódu Drag&drop
    • Tutoriály
      • Datum a čas (RTC)
      • Komunikace po sériové lince (UART) s PC
        • Konfigurace sériové linky v PC
        • Programování sériové linky
      • Základní tutoriály
        • Digital Read
        • Analog Read/Write
        • PWM Fade
        • Timer/Ticker
        • State Change Detection
        • Ovládání LED modulu
        • BusOut
        • HC-SR04 Senzor
      • Pokročilé
    • Správa a diagnostika
      • Zdroj restartu
      • LED modul
      • Identifikace zařízení
      • Monitoring parametrů
      • Vytížení zařízení
      • Webové rozhraní
        • Základní přehled
        • Správce firmware
        • Vlákna
        • Definované vstupy
        • Konfigurace MQTT
        • Nastavení
      • Bootloader
        • Režimy bootloaderu
        • Command mód
        • Další vlastnosti bootloaderu
      • Webová konzole
      • Konfigurace zařízení
        • Confighash
      • Omezení konfigurace
        • Konfigurace
        • Binárky
        • Omezení MQTT
        • Lowpan
    • Knowledge base
      • Náhodná čísla
      • Watchdog
      • Paměť RAM
Powered by GitBook
On this page
  • Volatilní paměť
  • RAM
  • CCM (Core Coupled Memory)
  • Rozložení paměti v C a linkování
  1. Hardware a programování
  2. Knowledge base

Paměť RAM

Volatilní paměť

Volatitní paměť je na v řídících jednotkách použitých mikrokontrolérech STM32 tvořena jedním či dvěma moduly a to jde o paměť RAM a paměť CCM.

RAM

Plnohodnotná paměť pro náhodný přístup, lze k ní přistupovat z programu mikrokontroléru (jádra) a z periferií vestavěných v mikrokontroléru (přes DMA). Z pohledu uživatele nemá tato paměť omezení při použití.

CCM (Core Coupled Memory)

Jedná se o neplnohodnotnou RAM, její omezení plyne především z toho, že není schopna pracovat s DMA; lze ji například použít pro různé překladové tabulky, jejichž výčet z paměti FLASH by byl časově náročný a je proto proveden jen jednou při startu procesoru

Rozložení paměti v C a linkování

Z hlediska programování v jazyce C je možné rozdělit proměnné dle platnosti:

  • globální - definice vně složeného příkazu

  • lokální - definice uvnitř složeného příkazu

  • statické - definice s klíčovým slovíčkem ''static''

  • dynamické - alokováno funkcí (např. malloc)

  • konstantní - definice s klíčovým slovíčkem ''const''

Z hlediska toho, zda jsou proměnné inicializované:

  • inicializované

  • neinicializované

C překladač využívá několik oblastí pro práci s pamětí:

  • .bss - RAM; má pevnou velikost, oblast je nulována

  • .data - RAM; má pevnou velikost, oblast je inicializována kopírováním z paměti FLASH

  • stack + heap - zbylé volné místo v RAM, přičemž oblast pro heap je zaplňována od nejnižší adresy výše a stack od nejvyyší adresy níže

  • .text - FLASH, oblast pouze pro čtení

Proměnné dle typu jsou přiřazeny do jednotlivých oblastí dle následující tabulky

globální

lokální

statická

konstantní

inicializovaná

.data+flash

stack

.data + flash

flash

neinicalizovaná

.bss

stack

.bss

flash

Do oblasti .bss tedy míří statické a globální neinicializované proměnné. Tyto proměnné musí být přístupné po celý běh programu a je znám jejich počet a datové typy a tedy i celková velikost. Vzhledem k faktu, že proměnné nejsou inicializované, není třeba nikde ukládat jejich inicializační hodnotu ve nevoalitní paměti (FLASH). Z hlediska využití paměti není prakticky rozdíl mezi globální a statickou proměnnou, přestože statická proměnná je platná pouze v použitém souboru.

Oblast .data je podobná oblasti .bss, s tím rozdílem, že jsou zde uloženy inicializované globální a statické proměnné. Bezprostředně po spuštění programu je tato oblast zaplněna svým inicializačním klonem z nevoalitní paměti (FLASH).

Oblast stack a heap vyplňuje zbytek paměti RAM. Stack je využíván pro lokální proměnné v jednotlivých složených příkazech - inicializací proměnných je stack postupně zvětšován, koncem složeného příkazu jsou jednotlivé funkce opět dealokovány ze stacku => dealokace probíhá ve opačném pořadí jako alokace, nezpůsobuje tedy fragmentaci paměti. Oblast heap je určena pro dynamickou alokaci (například pomocí ''malloc()''), její alokace i dealokace je plně v režii programátora a nevhodnou skladbou alokací/dealokací může způsobit rozsáhlou fragmentaci paměti.

Oblast .text je určená pro read-only (nebo alespoň read-mostly) operace. Čtení z této paměti může být pomalejší.

PreviousWatchdog

Last updated 7 years ago