Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:storage [2012/02/19 20:21] heikopikneret:examples:storage [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== Andmesalvestus ====== ====== Andmesalvestus ======
-<note important>Koostamisel</note>+{{ :et:examples:storage:andmesalvestus.png?380 |}}
  
-===== Teooria =====+Nii nagu ka arvutitel on mikrokontrollerite kasutamisel olukordi, kus on vaja säilitada muutuvaid andmeid ka pärast kontrolleri taaskäivitamist või pikemat aega ilma toiteta olekut. Kontrolleri töömälu, ehk RAM sisu säilib ainult kontrolleri töö ajal ja muutujatesse salvestatud andmed kontrolleri taaskäivitamisel kustuvad. Andmete säilitamiseks on mikrokontrolleritel mitmeid võimalusi ja need on analoogsed tavaliste arvutite võimalustega. Andmete salvestamise moodus ja füüsilise andmekandja valik sõltub eelkõige andmete iseloomust (formaat ja maht) ning andmesalvestusseadmete ja liideste olemasolust.
  
-[{{  :et:examples:storage:dscn0633.jpg?220|Standardsuuruses SD kaart altvaates (Sinine).  Lisaks mikro SD kaart ja selle standardsuuruses adapter.}}] +Kui on vaja salvestada lihtsaid parameetreidnäiteks kasutaja valikud jms, mis on tavalisel tekstilisel kujul ja väikese mahugasiis sobiks selleks hästi EEPROM mäluSee on mugav ka selle tõttuet enamusel mikrokontrolleritel on EEPROM mälu juba kiipi sisse ehitatud ja eraldi välist seadet ei pea kasutamaLoomulikult on olemas ka eraldiseisvaid EEPROM kiipe, mida võib kasutada täiendavalt andmete salvestamiseksKui on aga vajadus säilitada või kasutada suuremamahulisi andmeidnäiteks pildidmuusikafailid või suures mahus tekstilist infot on mõistlik kasutada välist mäluseadetmillest lihtsam lahendus on SD kaartVälise SD kaardi kasutamise eeliseks on ka selle lihtne süsteemist eemaldamine ja andmete transportimine arvutisse. Lisaks kontrolleriga vahetult seotud andmesalvestuslahendustele on võimalik andmeid salvestada ka pilveSee on natuke keerulisem ja vajab kindlasti ka interneti liidese olemasolu (Ethernet või Wi-Fi). Samas aga võimaldab selline lahendus turvalist andmete säilitamist ja andmete kohest juurdepääsu ka teiste rakenduste pooltLõpuks jääb andmete salvestamise meetod ja vahendid ikka arendaja otsustada ja otsustuskriteeriume võib olla mitmeid muidki.
- +
-Secure Digital (SD) on mälukaardi formaatmille töötas välja SD Card Association (SDA) kasutamiseks kaasaskantavates seadmetes. SD kaart töötab 3,3 V tööpingega. Kaartiga suhtlemiseks saab kasutada kaarti enda SD nimelist liidest ja ka SPI siini. Viimane on hea võimalus kasutada SD kaarti lihtsamates süsteemides.  +
- +
-SD kaart on iseenesest suur hulk mälupitte, mida saab küll muuta, aga muud seadmed ei oska salvestatud andmetega seljuhul midagi peale hakata. Probleemi lahendamiseks kasutatakse failisüsteemi, mis annab võimaluse töötada kogu kaardi mälumaatriksi asemel failidega. Failisüsteemi üks tähtsamaid ülesandeid on organiseerida loogilisi faile füüsilisel salvestusseadmel. Salvestusseadmel olev ruum on jaotatud sektoriteksmille suurus on enamasti 512 baitiKuna failisüsteemil on otstarbekas töötada suuremate üksustegagrupeeritakse sektoreid klastriteks. Klaster on mingi täisarvuline hulk järjestikuliselt asuvaid sektoreidSuurema klastri kasutamisel väheneb suuremate failide puhul fragmentatsioon, kuid väiksemate failide puhul suureneb raisatud ruum, kuna osa klastreid jääb ainult osaliselt täidetuks. +
- +
-Portatiivsetel mäluseadmetel ja mälukaartidel on laialt levinud FAT (File Allocation Table) failisüsteem, mida toetavad kõik enamlevinud operatsioonisüsteemidFAT failisüsteemi failipaigutustabel sisaldab iga kettal oleva faili algusklastri kannetmis omakorda sisaldab viita järgmisele failiga seotud klastrile ja nii edasikuni faililõpu klastrini. FAT-i koral on klastrid adresseeritud n-bitiste kannetega aadressiruumi tabelissekus n on sõltuvalt FAT-i versioonist 12 (FAT12), 16 (FAT16) või 32 bitti (FAT32). Seega vanemate FAT versioonide korral muutusid suurte kettamahtude korral klastrid mahult suureks ja seega kettamahu kasutamine ebaeffektiivseks. +
- +
-===== Praktika ===== +
- +
-Kodulabori Kontrollermooduli plaadil on pesa Micro SD mälukaardi sisestamiseksÜhendatud on  see samale SPI siinile koos etherneti kontrolleriga.  +
- +
-Kodulabori teegis on SD kaardiga suhtlemiseks kaks kihti. Esimene ketta kiht on seotud otseselt kettaga suhtlemise ja initsialiseerimisega. Lisaks paiknevad seal otse kettale kirjutamise ja lugemisega seotud funktsioonid. Teine failisüsteemi kiht suhtleb otse esimese kihiga ja võimaldab failidega seotud toiminguid. Toetatud ja testitud on FAT12, FAT16  ja FAT32 failisüsteemid. +
-  +
-Kodulabori teegis oleva FatFs failisüsteemi paketiga on võimalik lähemalt tutvuda [[http://elm-chan.org/fsw/ff/00index_e.html|siit]]. +
- +
-Järgmine näide demonstreerib tekstifaili lugemist ja kirjutamist. Nupule S1 vajutades initsialiseeritakse ketas ja failissüsteem. Nupu S3 vajutamine loob kettale kausta, kuhu omakorda luuakse fail. Faili kirjutatakse ka sisu. Nupp S2 kuvab tekitatud faili sisu ekraanile. +
- +
-~~PB~~ +
- +
- +
-<code c> +
-#include <stdio.h> +
-#include <homelab/module/ff.h> +
-#include <homelab/module/diskio.h> +
-#include <homelab/delay.h> +
-#include <homelab/pin.h> +
-#include <homelab/module/lcd_gfx.h> +
- +
- +
-// LEDide viigud +
-pin led_red    = PIN(C, 5); +
-pin led_yellow = PIN(C, 4); +
-pin led_green  = PIN(C, 3); +
- +
-// Nuppude viigud +
-pin button1 = PIN(C, 0); +
-pin button2 = PIN(C, 1); +
-pin button3 = PIN(C, 2); +
- +
-  +
-int main (void) +
-+
- int f_err_flag = -1; //Ketta vea lipp +
- int d_err_flag = -1; //Failisüsteemi vea lipp +
- char f_err_buf[16]; +
- char d_err_buf[16]; +
-  +
- int variableName = 0; +
- +
- static FATFS FATFS_Obj; +
-        FIL fil_obj; +
- +
- char read_buf[20]; +
- +
- unsigned char new_value1, old_value1 = 0; +
- unsigned char new_value2, old_value2 = 0; +
- unsigned char new_value3, old_value3 = 0; +
- +
-  +
- // Seab LEDid töökorda +
- pin_setup_output(led_red)+
- pin_setup_output(led_yellow); +
- pin_setup_output(led_green); +
-  +
- // Seab nupud töökorda +
- pin_setup_input_with_pullup(button1); +
- pin_setup_input_with_pullup(button2); +
- pin_setup_input_with_pullup(button3); +
-  +
- // Lülitab LEDid välja +
- pin_set(led_green); +
- pin_set(led_yellow); +
- pin_set(led_red); +
- +
- // Ekraani seadistamine +
- lcd_gfx_init(); +
-  +
- // LCD ekraani puhastamine +
- lcd_gfx_clear(); +
- +
- lcd_gfx_backlight(true);  +
-  +
- // Kursori (nähtamatu) ekraani keskele viimine +
- lcd_gfx_goto_char_xy(3, 2); +
-  +
- // Programmi nime kuvamine +
- lcd_gfx_write_string("SD Card"); +
- +
-  +
- while (1)  +
-+
- // Loeb nuppude väärtused. +
-    new_value1 = pin_get_debounced_value(button1); +
- new_value2 = pin_get_debounced_value(button2); +
- new_value3 = pin_get_debounced_value(button3); +
-  +
- // Nupp S1 alla vajutatudRegistreeritakse ainult üks vajutus. +
- if((!new_value1) && (old_value1)) +
-+
- // SD kaardi initsialiseerimine. Ebaõnnestumise korral seatakse vealipp. +
- d_err_flag = disk_initialize(0); +
- +
- // Viide +
- sw_delay_ms(2); +
- +
- // Failisüsteemi initsialiseerimine. Ebaõnnestumise korral seatakse vealipp. +
- f_err_flag = f_mount(0, &FATFS_Obj); +
- +
- // Viide +
- sw_delay_ms(2); +
-  +
-  +
- }  +
-  +
-     // Nupp S2 vajutatud. Registreeritakse ainult üks vajutus. +
- if((!new_value2) && (old_value2)) +
-+
- // Faili "fail.txt" avamine lugemisreziimis. +
- f_open(&fil_obj, "/Homelab/fail.txt", FA_READ); +
- +
- // Failist esimese 14 tähemärgi lugemine. +
- f_gets (read_buf,14, &fil_obj); +
- f_close(&fil_obj); +
- +
- // Faili esimese 14 tähemärgi ekraanile kirjutamine. +
- lcd_gfx_goto_char_xy(0, 0); +
- lcd_gfx_write_string(read_buf); +
- +
-+
-  +
- // Nupp S3 vajutatud. Registreeritakse ainult üks vajutus +
- if((!new_value3) && (old_value3)) +
-+
- // Suvaline muutuja, mis salvestatakse faili. +
- variableName = 4;  +
- +
- // Kettale luuakse kaust "Homelab"+
- f_mkdir("Homelab");  +
-  +
- // Loodud kausta tekitatakse tekstifail "fail.txt"+
- f_open(&fil_obj, "/Homelab/fail.txt", FA_CREATE_NEW); +
- +
- // Fail avatakse kirjutusreziimis. +
- f_open(&fil_obj, "/Homelab/fail.txt", FA_WRITE);  +
- +
- // Faili kirjutamine. +
- f_printf(&fil_obj, "Variable: %d", variableName); +
-  +
-  // Faili sulgemine +
- f_close(&fil_obj); +
-+
-  +
-  +
- // Jätab eelmise nupu väärtuse meelde +
- old_value1 = new_value1; +
- old_value2 = new_value2; +
- old_value3 = new_value3;  +
- +
-  +
- // Kui SD-kaart on initsialisseritud ja töökorras, siis põleb roheline LED +
- // ja vastupidisel juhul punane LED. +
- if((f_err_flag == 0) && (d_err_flag == 0)) +
-+
- pin_clear(led_green); +
- pin_set(led_red);  +
-+
- else +
- {  +
- pin_set(led_green); +
- pin_clear(led_red); +
-+
- +
- // Ekraanile kuvatakse vealippude olekud. Need on järgnevad: +
- // -1 initsialiseerimata +
- //  0 viga ei ole +
- //  1 (või suurem) viga  +
- sprintf(f_err_buf, "Error_f: %02d", f_err_flag ); +
- sprintf(d_err_buf, "Error_d: %02d", d_err_flag ); +
- +
- lcd_gfx_goto_char_xy(0, 4); +
- lcd_gfx_write_string(f_err_buf); +
- lcd_gfx_goto_char_xy(0, 5); +
- lcd_gfx_write_string(d_err_buf); +
-  +
- // Viide +
- sw_delay_ms(2);  +
-+
- +
-+
-</code>+
  
et/examples/storage.1329682912.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0