Ukladani nastaveni v programu pro MCU
Zdeněk Aster
Zdenek.Aster na seznam.cz
Čtvrtek Červen 2 15:00:21 CEST 2016
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
---------- Původní zpráva ----------
Od: hwnews konference <hwnews na cncnet.info>
Komu: HW-news <hw-list na list.hw.cz>
Datum: 2. 6. 2016 13:04:15
Předmět: Re: Ukladani nastaveni v programu pro MCU
"
diky obema zda se ze to opravdu uklada jak ma, ale zatim jsem nevyresil
integraci vsech typu promennych do jedne struktury
rekapitulace mam tri ruzne typy registru co se tyka velikosti (ta polozka
eeprom bude zbytecna);
type Reg_dword = record
modi : boolean;
r0 : dword;
r1 : dword;
eeprom : word;
delka : byte;
end;
type Reg_word = record
modi : boolean;
r0 : word;
r1 : word;
eeprom : word;
delka : byte;
end;
type Reg_byte = record
modi : boolean;
r0 : byte;
r1 : byte;
eeprom : word;
delka : byte;
end;
jsem schopny nadefinovat pole rekordu, ale jen od jednoho typu:
var
rv_w : array[0..7] of Reg_word;
vyresil jsem i to, aby to bylo prehledne v kodu:
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
takze pristup k polozkam je takto:
rv_w[rUmaxBat].r0 := 14200; //mV konecne nabijeci napeti
cyklicke - EEPROM A-B
rv_w[rUfloatBat].r0 := 13700; //mV konecne nabijeci napeti float -
EEPROM C-D
rv_w[rOffsetMppt].r0 := 50; //OffsetMppt - mV offset regulace
mppt - EEPROM E-F
rv_w[rUchargOn].r0 := 12000; //UchargOn - mV napeti pri kterem
zapinam dobijeni - EEPROM 12-13
coz se bude dobre resit i v parsovani prikazu z terminalu, kde mohu snadno
pristupovat na konfiguracni polozky
jen me krka, ze ty pole budu muset mit tri pro kazdej typ rekordu - nebyl by
nejakej napad? pretypovavat to pri kazdem pouziti je trochu pres ruku
RV
Dne 1. června 2016 21:23 Zdeněk Aster <Zdenek.Aster na seznam.cz
(mailto:Zdenek.Aster na seznam.cz)> napsal(a):
"
">"S tym volatile som to prehnal, to asi v tom Pascale nie je, alebo je? Ako
>ste to dosiahli, co ste zmenili?
>
>wek
>
>"
>Dosahnul jsem toho takhle :-)
>
> x: byte as volatile;
Hm, hm, tak to bolo necakane... Kolko minut vravite ze v tom robite? :-)
Dakujem.
wek"
No asi těch 5 minut co jsem to nainstaloval, ale pascal jsem měl vždy rád,
a kdysi měl zaujal od nemeckeho elabu pascal pro atmel tak jsem chtel
videt jak vypada od mikroe. Ja uz jsem si zvyknul na cecko pro jednocipy,
pascal pouzivam jen kdyz neco potrebuji ve windowsech nebot tak nejak
v tom neco i udelam.
Navíc jsem si říkal, že volatile by to tam mělo být, protože se bez toho
občas většinou žít nedá tak jsem to zkusil. Je tam implementováno i
absolute u promene, ale jen na adresu nikoliv neprimo na promenou,
pritom by to pro kompilator nebyl problem a pak by slo pole nadefinovat
klidne pres strukturu, ale to uz je taky pekna prasecina.
var
x;byte; absolute 10; // tohle jde
a: byte;
b:byte; absolute a; // tohle nejde
Zdeněk Aster
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz(http://www.HW.cz)
Hw-list na list.hw.cz(mailto:Hw-list na list.hw.cz)
http://list.hw.cz/mailman/listinfo/hw-list
(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/8df6bd70/attachment-0001.html>
Další informace o konferenci Hw-list