Ukladani nastaveni v programu pro MCU
Zdeněk Aster
Zdenek.Aster na seznam.cz
Čtvrtek Červen 2 21:11:56 CEST 2016
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 32
bytovy 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"
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20160602/a06a6ebe/attachment-0001.html>
Další informace o konferenci Hw-list