Cześć,
Potrzebuje zamienić fragment kodu w "C" przypisujący wskaźnik do funkcji do tablicy funkcji i stworzyć w "C++" klasę w której będę miał tablicę funkcji.
typedef struct
{
uint16_t liczba;
uint32_t(*fcRead)(uint16_t zmienna);
}Tmod;
volatile Tmod tbl[5];
uint32_t funkcja1(uint16_t zmienna)
{
return (zmienna * 1);
}
uint32_t funkcja2(uint16_t zmienna)
{
return (zmienna * 2);
}
uint32_t funkcja3(uint16_t zmienna)
{
return (zmienna * 3);
}
volatile uint32_t test;
extern "C" void app_main(void)
{
tbl[0].fcRead = &funkcja1;
tbl[1].fcRead = &funkcja3;
tbl[2].fcRead = &funkcja2;
test = tbl[0].fcRead(2);
}
Niestety moja wiedzy jest zbyt mała w "C++" i wszelkie próby przypisania do tablicy zaznaczane są przez kompilator jako błąd (defTablicy).
Przykład klasy:
//Plik .hpp
class iofunc
{
public:
uint32_t(*fcRead[5])(uint16_t); //5 elementowa tablica funkcji
uint32_t mojaFunkcja1(uint16_t zmienna);
uint32_t mojaFunkcja2(uint16_t zmienna);
uint32_t mojaFunkcja3(uint16_t zmienna);
void defTablicy(void); // przypisanie funkcji do tablicy
void wywFunkcji(uint16_t fc); // wywolanie funkcji
iofunc(void)
{
defTablicy();
}
};
//Plik .cpp
uint32_t iofunc::mojaFunkcja1(uint16_t zmienna)
{
return (zmienna * 1);
}
uint32_t iofunc::mojaFunkcja2(uint16_t zmienna)
{
return (zmienna * 2);
}
uint32_t iofunc::mojaFunkcja3(uint16_t zmienna)
{
return (zmienna * 3);
}
void iofunc::defTablicy(void)
{
(*iofunc::fcRead[0]) = &iofunc::mojaFunkcja1;
(*iofunc::fcRead[1]) = &iofunc::mojaFunkcja3;
(*iofunc::fcRead[2]) = &iofunc::mojaFunkcja2;
}
void iofunc::wywFunkcji(uint16_t fc)
{
return((*iofunc::fcRead[0])(2));
}
W jaki sposób przypisać do tablicy fcRead funkcje "mojaFunkcja1", "mojaFunkcja2" i "mojaFunkcja3" ?