mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-22 04:23:34 +08:00
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:
@@ -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",
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user