uORB: add bitset for faster orb_exists check and remove uORB::Subscription lazy subscribe hack/optimization

- add PX4 bitset and atomic_bitset with testing
 - add uORB::Subscription constructor to take ORB_ID enum
 - move orb test messages into msg/
This commit is contained in:
Daniel Agar
2020-03-11 09:06:33 -04:00
committed by GitHub
parent 88c9761f1f
commit 9585055e9e
38 changed files with 919 additions and 200 deletions
+3 -3
View File
@@ -36,7 +36,7 @@
#include <px4_platform_common/log.h>
#include <px4_platform_common/px4_config.h>
#include <uORB/uORBTopics.h>
#include <uORB/topics/uORBTopics.hpp>
#include <string.h>
@@ -297,9 +297,9 @@ bool LoggedTopics::add_topic(const orb_metadata *topic, uint16_t interval_ms, ui
}
RequestedSubscription &sub = _subscriptions.sub[_subscriptions.count++];
sub.topic = topic;
sub.interval_ms = interval_ms;
sub.instance = instance;
sub.id = static_cast<ORB_ID>(topic->o_id);
return true;
}
@@ -314,7 +314,7 @@ bool LoggedTopics::add_topic(const char *name, uint16_t interval_ms, uint8_t ins
// check if already added: if so, only update the interval
for (int j = 0; j < _subscriptions.count; ++j) {
if (_subscriptions.sub[j].topic == topics[i] &&
if (_subscriptions.sub[j].id == static_cast<ORB_ID>(topics[i]->o_id) &&
_subscriptions.sub[j].instance == instance) {
PX4_DEBUG("logging topic %s(%d), interval: %i, already added, only setting interval",
+2 -1
View File
@@ -36,6 +36,7 @@
#include <stdint.h>
#include <uORB/uORB.h>
#include <uORB/topics/uORBTopics.hpp>
namespace px4
{
@@ -74,9 +75,9 @@ public:
static constexpr int MAX_TOPICS_NUM = 200; /**< Maximum number of logged topics */
struct RequestedSubscription {
const orb_metadata *topic;
uint16_t interval_ms;
uint8_t instance;
ORB_ID id{ORB_ID::INVALID};
};
struct RequestedSubscriptionArray {
RequestedSubscription sub[MAX_TOPICS_NUM];
+2 -2
View File
@@ -46,7 +46,7 @@
#include <time.h>
#include <uORB/PublicationQueued.hpp>
#include <uORB/uORBTopics.h>
#include <uORB/topics/uORBTopics.hpp>
#include <uORB/topics/parameter_update.h>
#include <uORB/topics/vehicle_command_ack.h>
#include <uORB/topics/battery_status.h>
@@ -508,7 +508,7 @@ bool Logger::initialize_topics(MissionLogType mission_log_mode)
const LoggedTopics::RequestedSubscription &sub = logged_topics.subscriptions().sub[i];
// if we poll on a topic, we don't use the interval and let the polled topic define the maximum interval
uint16_t interval_ms = _polling_topic_meta ? 0 : sub.interval_ms;
_subscriptions[i] = LoggerSubscription(sub.topic, interval_ms, sub.instance);
_subscriptions[i] = LoggerSubscription(sub.id, interval_ms, sub.instance);
}
}
+2 -2
View File
@@ -71,8 +71,8 @@ struct LoggerSubscription : public uORB::SubscriptionInterval {
LoggerSubscription() = default;
LoggerSubscription(const orb_metadata *meta, uint32_t interval_ms = 0, uint8_t instance = 0) :
uORB::SubscriptionInterval(meta, interval_ms * 1000, instance)
LoggerSubscription(ORB_ID id, uint32_t interval_ms = 0, uint8_t instance = 0) :
uORB::SubscriptionInterval(id, interval_ms * 1000, instance)
{}
};