Ukladani nastaveni v programu pro MCU

Admin HWnews hwnews na cncnet.info
Pátek Červen 3 08:11:37 CEST 2016


No tak to je teda neco....priznam se, ze ten Pascal pro PIC jsem dost 
podcenoval - respektive ja s nim pracuji uz od nejake verze 2.x a tam 
opravdu dost veci neslo.

Dik moc.

RV

Dne 2.6.2016 v 21:11 Zdeněk Aster napsal(a):
> Tak jsem si s tim jeste hral, a zjistil jsem, ze jdou legalne definovat
> promene pres sebe.
>   prom_byte: array[0..1] of byte;
>   prom_word: word at prom_byte;
>
> Mam pole dvou byte ke kterem muzu pristupovat jako k wordu.
>
> Tak pokud to necemu pomuze, jen bude nutne dodrzet ty recordy,
> stejne dlouhe jinak se to podela... A samozrejme dodrzet aby byte,wordove
> registry byly spravne tam kam patri;
>
> rv_d           : array[0..15] of Reg_dword;;
> rv_w           : array[0..15] of Reg_word at rv_d;
> rv_b           : array[0..15] of Reg_byte at rv_d;
>
>
> Zdenek Aster
>
> ---------- Původní zpráva ----------
> Od: Zdeněk Aster <Zdenek.Aster na seznam.cz>
> Komu: HW-news <hw-list na list.hw.cz>
> Datum: 2. 6. 2016 15:33:44
> Předmět: Re: Ukladani nastaveni v programu pro MCU
>
>
>     No pokud se nelíbí ty tři pole s ruznymy indexi co jsem psal dole
>     tak me napada jedna
>     hodne velka silenost, ale nevim jestli to prevazi nad prakticnosti.
>     Udelal bych tyto definice
>     samozrejme zalezi v jakym poradi uklada byte pic/kompilator to
>     netusim, ale to je detail.
>
>     type Reg_dword = record
>         modi           : boolean;
>         r0             : dword;
>         r1             : dword;
>         eeprom         : word;
>         delka          : byte;
>     end;
>
>     type Reg_word = record
>         modi           : boolean;
>         rez0           : word;
>         r0             : word;
>         rez1           : word;
>         r1             : word;
>         eeprom         : word;
>         delka          : byte;
>     end;
>
>     type Reg_byte = record
>         modi           : boolean;
>        rez0w    : word;
>        rez0b    : byte;
>        r0             : byte;
>        rez1w    : word;
>        rez1b    : byte;
>         r1             : byte;
>         eeprom         : word;
>         delka          : byte;
>     end;
>
>     rv_w           : array[0..15] of Reg_word; absolute 10;
>     rv_d           : array[0..15] of Reg_dword; absolute 10;
>     rv_b           : array[0..15] of Reg_byte; absolute 10;
>
>     Clovek by musel trosku zjistit jak se chova absolute jak to
>     prekladac vymezi a pouzije jine promene,
>     Ale tim docilim toho ze mam vsechny pole pres sebe, v idealnim
>     pripade pokud jsem se trefil bude
>     byte nizsi byte word a nejnizsi byte dword. V casti terminalu
>     pouziji 32bytovy prsitup mam jedno pole
>      a nemusim nic resit. No a v programu si vyberu kokretni pole, ktere
>     ma tu spravnou velikost.
>
>     Ale asi mi prijde jednodusi zabyvat se dle cisla indexu v terminalu
>     clovek nemusi vedet co to je jestli
>     byte,word, dword a v programu to neni az tak hrozne na osetreni....
>
>     Zdenek Aster
>
>     ---------- Původní zpráva ----------
>     Od: hwnews konference <hwnews na cncnet.info>
>     Komu: HW-news <hw-list na list.hw.cz>
>     Datum: 2. 6. 2016 15:18:04
>     Předmět: Re: Ukladani nastaveni v programu pro MCU
>
>
>         jde mi o to si co nejvic ulehcit praci pri praci s prikazy
>         terminalu - mam navrzene nejakou takovou syntaxi
>
>         // syntaxe
>         // r001*;  - vypise nastaveni registru r001 - jak run hodnotu
>         tak set
>         // r001$45; - zapise do r001 hodnotu 45 do set hodnoty
>         // r001#;   - prepise hodnotu z set do run
>         // c001!;   - vykonna prikaz c001
>
>         tedy pokud to mam ve trech polich tak to musim jeste v tom
>         prikazu nejak vyspecifikovat abych vedel do ktereho pole namirit
>         index (cisla za r)
>
>         samozrejme muzu to udelat tak, ze prikazy budou b001 nebo w001
>         nebo d001, ale musim to porad nekde drzet v hlave co je jakej
>         typ - hlavne uzivatelsky je to uplne mimo
>
>         nebo to muzu udelat tak ze 000 az 099 je byte , 100 az 199 je
>         word atd..
>
>         to proc se mi to nechce mit vsechno v dwordu je ze ty hodnoty v
>         pracovnich registrech chci pouzivat normalne v kodu a pocitat
>         vsechno ve 32b se mi moc nezamlouva
>
>         aspon tedy predpokladam, ze prekladac jakmile uvidi tohle
>
>           a  : dword;
>           b  :  byte;
>           c  : word;
>
>         c:=a*b;
>
>         to spocita jako 32b*32b a pretypuje na word
>
>
>         RV
>
>         Dne 2. června 2016 15:00 Zdeněk Aster <Zdenek.Aster na seznam.cz
>         <mailto:Zdenek.Aster na seznam.cz>> napsal(a):
>
>             Napadají mě samé šílenosti, podstata je, že netuším čemu je
>             potřeba se vyhnout a čeho docílit.
>             Nicméně pokud by člověk chtěl třeba přehlednost v definici
>             těch konstant,tak určitě by šlo definovat
>             pole takhle.
>
>             const
>                //word pole
>                 rUmaxBat       = 0;     //mV konecne nabijeci napeti
>             cyklicke - EEPROM A-B
>                 rUfloatBat     = 1;     //mV konecne nabijeci napeti
>             float - EEPROM C-D
>                 rOffsetMppt    = 2;     //OffsetMppt - mV offset
>             regulace mppt - EEPROM E-F
>                 rUchargOn      = 3;     //UchargOn - mV napeti pri
>             kterem zapinam dobijeni - EEPROM 12-13
>                 rUchargOff     = 4;     //UchargOff - mV napeti pri
>             kterem vypinam dobijeni - EEPROM 14-15
>                 rUzatezOn      = 5;     //UzatezOn - mV napeti pri
>             kterem zapinam zatez - EEPROM 16-17
>                 rUzatezOff     = 6;     //UzatezOff - mV napeti pri
>             kterem vypinam zatez - EEPROM 18-19
>                 rUpanic        = 7;     //Upanic - napeti pri kterem se
>             vse zastavi - bitove rozliseni - EEPROM 20-21
>                //dword pole
>                rNecoDword       = 8;
>                 ................
>               // byte pole
>                rNecoByte       = 16;
>                .......
>
>             rv_w           : array[0..7] of Reg_word;
>             rv_d           : array[8..15] of Reg_dword;
>             rv_b           : array[16..30] of Reg_byte;
>
>             Jsou to sice tri pole, ale index muzete resit krasne
>             postupne, a i kompilator by mel hlasit chybu,
>             pri pouziti blbeho indexu v blbem poli a pokud to
>             nadefinujete za sebou a nebude kompilator
>             blbnout tak by to slo do eeprom ulozit jednou funkci. Adresa
>             prvniho pole a secit delky vsech poli.
>
>             Writeeeprom(
>             PBytearray(@rv_w),sizeof(rv_w)+sizeof(rv_d)+sizeof(rv_b),
>             pozice_v_eprom);
>
>             Zdenek Aster
>
>
>         _______________________________________________
>         HW-list mailing list - sponsored by www.HW.cz
>         Hw-list na list.hw.cz
>         http://list.hw.cz/mailman/listinfo/hw-list
>
>     _______________________________________________
>     HW-list mailing list - sponsored by www.HW.cz
>     Hw-list na list.hw.cz
>     http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list