Hallo zusammen
Ich stosse bis jetzt immer wieder an die gleichen Probleme und möchte
etwas effizienter werden.
Die Basis meiner Devices ist immer die selbe. Nur die Funktion variiert.
Damit die Basis und die Hardware Abstraktion nicht jedes mal neu codiert
werden muss, würde ich das ganze gerne mit DLLs umgehen.
Die Basis Hardware Abstraktion sieht in etwa so aus.
1 | ///////////////////////////////////////////////////////////////
|
2 | /// This class contains all informations about the ident
|
3 | /// structure (Unit version, interface version, article number...)
|
4 | ///////////////////////////////////////////////////////////////
|
5 | class CIdent
|
6 | {
|
7 | private:
|
8 | CModbusMaster& m_roModbusMaster;
|
9 |
|
10 | public:
|
11 | static const uint8_t c__u8ArticleNumberLength = 20;
|
12 |
|
13 | CIdent(CModbusMaster& p_roModbusMaster);
|
14 | ~CIdent();
|
15 |
|
16 | bool bGetArticleNumber(char* p_pcarticleNumber, const uint8_t p__u8BufferSize);
|
17 | };
|
18 |
|
19 | ///////////////////////////////////////////////////////////////
|
20 | /// This class contains all informations about the standard
|
21 | /// components on the device.
|
22 | ///////////////////////////////////////////////////////////////
|
23 | class CNumberOfComponents
|
24 | {
|
25 | private:
|
26 | CModbusMaster& m_roModbusMaster;
|
27 |
|
28 | public:
|
29 | CNumberOfComponents(CModbusMaster& p_roModbusMaster);
|
30 | ~CNumberOfComponents();
|
31 |
|
32 | bool bGetNumberOfInputs(uint8& p_ru8NumberOfInputs);
|
33 | };
|
34 |
|
35 |
|
36 | ///////////////////////////////////////////////////////////////
|
37 | /// Base Class for any devcies
|
38 | ///////////////////////////////////////////////////////////////
|
39 | class CDevice
|
40 | {
|
41 | private:
|
42 | CModbusMaster& m_roModbusMaster;
|
43 |
|
44 | public:
|
45 | CDevice(CModbusMaster& p_roModbusMaster);
|
46 | ~CDevice();
|
47 |
|
48 | CIdent m__oBootloader;
|
49 | CIdent m__oMainApplication;
|
50 |
|
51 | CNumberOfComponents m__oNumberOfComponents;
|
52 | };
|
Die "richtigen" Devices würden dann von dieser Basis aus spezialisiert
werden. Das könnte in etwa so aussehen:
1 | ///////////////////////////////////////////////////////////////
|
2 | /// Device 1
|
3 | ///////////////////////////////////////////////////////////////
|
4 | class CDevice1 : public CDevice
|
5 | {
|
6 | private:
|
7 | CModbusMaster& m_roModbusMaster;
|
8 |
|
9 | public:
|
10 | CDevice1(CModbusMaster& p_roModbusMaster);
|
11 | ~CDevice1();
|
12 |
|
13 | void vFunction1();
|
14 | void vFunction2();
|
15 | };
|
16 |
|
17 | ///////////////////////////////////////////////////////////////
|
18 | /// Device 2
|
19 | ///////////////////////////////////////////////////////////////
|
20 | class CDevice2 : public CDevice
|
21 | {
|
22 | private:
|
23 | CModbusMaster& m_roModbusMaster;
|
24 |
|
25 | public:
|
26 | CDevice2(CModbusMaster& p_roModbusMaster);
|
27 | ~CDevice2();
|
28 |
|
29 | void vFunction1();
|
30 | void vFunction2();
|
31 | };
|
Da ich bis jetzt nur DLLs benutzt, diese aber nie selber erstellt habe
bin ich etwas ratlos.
Wie kann/muss ich das nun lösen?
- Eine DLL für die Basis und für jedes Device eine, die von der Basis
"erbt" (geht das überhaupt?)
- Eine einzelne DLL für die Kombination Basis+Device
Gruss
P51D