completed 02
This commit is contained in:
parent
96106f096c
commit
535840a831
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit 6f562e5f3ed6ff971cad6e95f3f689f0a9c6e953
|
Subproject commit fd46784d0dada73a97983700d6428aada377e911
|
5
main.cpp
5
main.cpp
@ -13,10 +13,11 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
auto* mySysObj = new MySystemObject();
|
new MySystemObject();
|
||||||
auto* objManager = ObjectManager::instance();
|
auto* objManager = ObjectManager::instance();
|
||||||
|
objManager->initialize();
|
||||||
|
auto* mySysObj = objManager->get<MySystemObject>(0x10101010);
|
||||||
cout << "Object ID: " << setfill('0') << hex << "0x" << setw(8) <<
|
cout << "Object ID: " << setfill('0') << hex << "0x" << setw(8) <<
|
||||||
mySysObj->getObjectId() << endl;
|
mySysObj->getObjectId() << endl;
|
||||||
objManager->initialize();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -66,9 +66,12 @@ when inserting new entries.
|
|||||||
|
|
||||||
The `SystemObject` base class will take care of automatically registering the object at the
|
The `SystemObject` base class will take care of automatically registering the object at the
|
||||||
global object manager as part of its constructor. The object manager stores all inserted objects
|
global object manager as part of its constructor. The object manager stores all inserted objects
|
||||||
by the `SystemObject` base class pointer inside a hash map, so all inserted objects can be
|
by the `SystemObjectIF` base class pointer inside a hash map, so all inserted objects can be
|
||||||
retrieved at a later stage. The object manager is also able to call the `initialize` method of
|
retrieved at a later stage. The object manager is also able to call the `initialize` method of
|
||||||
all its registered objects.
|
all its registered objects. The initialize method allows to return an explicit returnvalue
|
||||||
|
for failed object initialization. This is generally not possible for object constructors.
|
||||||
|
The usual way to have an object construction fail is to use exceptions, which might or might not
|
||||||
|
be available to your project.
|
||||||
|
|
||||||
## Subtasks
|
## Subtasks
|
||||||
|
|
||||||
@ -78,3 +81,21 @@ all its registered objects.
|
|||||||
automatically in its own destructor
|
automatically in its own destructor
|
||||||
3. Retrieve the global instance of the object manager using its static `instance` method
|
3. Retrieve the global instance of the object manager using its static `instance` method
|
||||||
and use it to initialize all system objects including your custom system object.
|
and use it to initialize all system objects including your custom system object.
|
||||||
|
4. Retrieve the concrete instance of your object using the `ObjectManager` `get` method.
|
||||||
|
Please note that you explicitely have to specify the target type you want to retrieve
|
||||||
|
using a template argument to `get`. Use that instance to retrieve and print the object ID
|
||||||
|
instead of using the instance returned by `new`
|
||||||
|
|
||||||
|
# 3. Schedule your object using its object ID
|
||||||
|
|
||||||
|
The object ID is now an addressing unit which can be used at various places in the framework.
|
||||||
|
One example is to schedule the object. This means that instead of passing the concrete instance
|
||||||
|
of the object, you can also add units to schedule by using their object ID
|
||||||
|
|
||||||
|
## Subtasks
|
||||||
|
|
||||||
|
1. Retrieve the global instance of the `TaskFactory` using its static `instance` method.
|
||||||
|
2. Create a new enum called `ObjectIds` and make your object ID an enum number
|
||||||
|
if it. If this is not the case already, refactor your `MySystemObject` to expect
|
||||||
|
the Object ID via constructor argument.
|
||||||
|
2. Create a `PeriodicTask` and add your custom system object using its object ID
|
||||||
|
23
ws-objects-tmtc/objects-tmtc-solutions/main-02.cpp
Normal file
23
ws-objects-tmtc/objects-tmtc-solutions/main-02.cpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include "fsfw/objectmanager.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class MySystemObject: public SystemObject {
|
||||||
|
public:
|
||||||
|
MySystemObject(): SystemObject(0x10101010) {}
|
||||||
|
ReturnValue_t initialize() override {
|
||||||
|
cout << "MySystemObject::initialize: Custom init" << endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
new MySystemObject();
|
||||||
|
auto* objManager = ObjectManager::instance();
|
||||||
|
objManager->initialize();
|
||||||
|
auto* mySysObj = objManager->get<MySystemObject>(0x10101010);
|
||||||
|
cout << "Object ID: " << setfill('0') << hex << "0x" << setw(8) <<
|
||||||
|
mySysObj->getObjectId() << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user