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