KLOP - Ogólny kanał licznikowy - Działający przykład

iM@rek
Posts: 349
Joined: Thu Feb 09, 2023 1:25 pm

Post

Mam 3 kanały KLOP: klop0, klop1 i klop2
Aktualnie mam trzy bloki obsługujące zapis stanu liczników do FRAM.
Chciałbym te identyczne kawałki kodu włożyć do funkcji, ale nie potrafię...

Tak jest obecnie, 3x dla każdego Klop0, Klop1 i Klop2:

Code: Select all

/ Zmiana stanu KLOP0 - przykład:
      if (nIC0_State < oIC0_State) {

        klop0->setValue(IC0_Val);         // ustawia nową wartość dla klop0 za zmiennej IC0_Val 
        				// (tak samo dla IC1_Val i IC2_Val)

        memcpy(tKlop0, (void *)&IC0_Val, 4); // kopiuje bloki pamięci do tabl. tKlop0[4], 
        				// wartość spod adr. IC0_Val
        i2ceeprom.write(IC0_Offset, tKlop0, 4);  // zapis do FRAM (adr, nazwa tablicy, 4 bajty)
 
Czyli miałoby być jakoś tak:

Code: Select all

/ Zmiana stanu KLOP0 - przykład:
      if (nIC0_State < oIC0_State) {
	Zapis_FRAM(tKlop0,&IC0_Val, IC0_Offset)  // => ta nowa funkcja
 
a w tej funkcji:

Code: Select all

	Zapis_FRAM(tKlopX,&ICX_Val, ICX_Offset)  // => to ma być ta nowa funkcja.  "X" przyjmuje wartości 0-2

	        klopX->setValue(ICX_Val);         // ustawia nową wartość dla klop od 0 do 2

	        memcpy(tKlopX, (void *)&ICx0_Val, 4); // kopiuje bloki pamięci spod adr. ICx_Val do tablicy dla klop 0-2
	        i2ceeprom.write(ICx_Offset, tKlopx, 4);  // zapis z tablicy do FRAM dla klop 0-2
	        return (ICX_Val)  // zwraca tylko nową wartość ICx_Val
 
Nie umiem przekazać obiektu klopX, wskaźnika adresu ICX_Val...
Proszę o pomoc, jak to zrobić.
User avatar
klew
Posts: 9413
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Zrób klasę, która dziedziczy po klop i zaimplementuj jej onLoadState i onSaveState. Wtedy adresami się nie musisz przejmować, bo to obsłuży klasa Storage
Kiedy będzie Supla Offline Party / SOP#2025 ?
iM@rek
Posts: 349
Joined: Thu Feb 09, 2023 1:25 pm

Post

klew wrote: Wed May 15, 2024 2:08 pm
Dzięki.
Mniej więcej rozumiem, co piszesz.
Ale praktycznie nie jestem w stanie tego wykonać.

Return to “Ogólna dyskusja”