Nejste přihlášen/a.

Přihlásit se do poradny

 

Arduino IDE deklarace proměnné

Od: ladefeto* odpovědí: 2 změna:

Zdravím, doufám že mi někdo dokáže poradit.

Potřebuji v Arduini IDE napsat nějakým jednodušším způsobem deklarovat pole proměnných s velikostí nastavitelnou v main, přičemž proměnná je deklarována v knihovně. V main se nastavuje velikost pole (nikoli hodnota)

Stávající funkční řešení:

main.cpp:

extern const int POCET_ZARIZENI = 3;

extern int zarizeni_id[POCET_ZARIZENI]={};
extern byte zarizeni_kategorie[POCET_ZARIZENI]={};

void setup(){}

void loop(){}

knihovna.cpp:

extern const int POCET_HODNOT;

extern int zarizeni_id[];
extern byte zarizeni_kategorie[];

Ideálně bych potřeboval, abych v main "zarizeni_id" a "zarizeni_kategorie" deklarovat vůbec nemusel

 

 

2 odpovědi na otázku
Řazeno dle hodnocení

 

 

tenspatny*
hodnocení

3x

Zdravím, v Arduinu jsem nedělal a nejsem ani profesionální programátor, ale všiml jsem si, že soubory mají koncovku cpp, tudíž mě napadlo, že asi používáte c++. Co to udělat přes třídu? Trochu jsem to pozměnil, abych věděl, jestli to bude fungovat. V main deklarujete jen POCET a potom ho nastavíte přes funkci z třídy.

knihovna.h

#ifndef KNIHOVNA_H

#define KNIHOVNA_H

#include

#include

#include

class Zarizeni {

public:

int *zarizeni_id;

void nastavPocet(int POCET);

void nastavHodnotu(int poradi, int hodnota);

};

#endif

knihovna.cpp

#include "knihovna.h"

Zarizeni zarizeni;

void Zarizeni::nastavPocet(int POCET) {

zarizeni_id = new int[POCET];

}

void Zarizeni::nastavHodnotu(int poradi, int hodnota) {

zarizeni_id[poradi] = hodnota;

}

main.cpp

#include "knihovna.h"

const int POCET = 3;

extern Zarizeni zarizeni;

int main() {

zarizeni.nastavPocet(POCET);

zarizeni.nastavHodnotu(0, 1);

zarizeni.nastavHodnotu(1, 2);

zarizeni.nastavHodnotu(2, 3);

for (int i = 0; i < POCET; i++) {

printf("%d
", zarizeni.zarizeni_id[i]);

}

delete[] zarizeni.zarizeni_id;

system("PAUSE");

return 0;

}

ladefeto*
hodnocení

Ano, přes třídu by to zřejmě šlo realizovat a v konečném důsledku je to i vhodnější řešení, pokud bych zakládal projekt. Bohužel se ale jedná o už existující rozsáhlejší projekt se společnou knihovnou pro mnoho zařízení. Kvůli optimalizaci využití paměti (protože jsem se už tak blížil její maximální využitelné hranice) jsem už od začátku třídu nevyužíval.

Osobně jsem doufal, že můj problém by se například dal vyřešit ve fázi kompilace, pokud si totiž definuji hodnotu "POCET" v jiné knihovně, tak to pro kompilátor problém není. V součastnosti je to tak, že každé zařízení má jeden svůj vlastní textový soubor a všechny společně využívají další knihovny.

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]