Browse Source

uorb: fix constness for _uorb_topics_list

_uorb_topics_list was marked as 'const char *' array, which means the data
of the array was not actually const and thus landed in the data section
(so in RAM instead of FLASH).
The size of the array is 436 bytes.
sbg
Beat Küng 7 years ago committed by Daniel Agar
parent
commit
0038a5e755
  1. 4
      msg/templates/uorb/uORBTopics.cpp.template
  2. 6
      src/modules/logger/logger.cpp
  3. 2
      src/modules/replay/replay_main.cpp
  4. 2
      src/modules/uORB/uORBTopics.h

4
msg/templates/uorb/uORBTopics.cpp.template

@ -56,7 +56,7 @@ msgs_count_all = len(msg_names_all) @@ -56,7 +56,7 @@ msgs_count_all = len(msg_names_all)
@[end for]
const size_t _uorb_topics_count = @(msgs_count_all);
const struct orb_metadata* _uorb_topics_list[_uorb_topics_count] = {
const constexpr struct orb_metadata* const _uorb_topics_list[_uorb_topics_count] = {
@[for idx, msg_name in enumerate(msg_names_all, 1)]@
ORB_ID(@(msg_name))@[if idx != msgs_count_all],@[end if]
@[end for]
@ -67,7 +67,7 @@ size_t orb_topics_count() @@ -67,7 +67,7 @@ size_t orb_topics_count()
return _uorb_topics_count;
}
const struct orb_metadata **orb_get_topics()
const struct orb_metadata *const*orb_get_topics()
{
return _uorb_topics_list;
}

6
src/modules/logger/logger.cpp

@ -402,7 +402,7 @@ Logger::Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_inte @@ -402,7 +402,7 @@ Logger::Logger(LogWriter::Backend backend, size_t buffer_size, uint32_t log_inte
_sdlog_profile_handle = param_find("SDLOG_PROFILE");
if (poll_topic_name) {
const orb_metadata **topics = orb_get_topics();
const orb_metadata *const*topics = orb_get_topics();
for (size_t i = 0; i < orb_topics_count(); i++) {
if (strcmp(poll_topic_name, topics[i]->o_name) == 0) {
@ -478,7 +478,7 @@ LoggerSubscription* Logger::add_topic(const orb_metadata *topic) @@ -478,7 +478,7 @@ LoggerSubscription* Logger::add_topic(const orb_metadata *topic)
bool Logger::add_topic(const char *name, unsigned interval)
{
const orb_metadata **topics = orb_get_topics();
const orb_metadata *const*topics = orb_get_topics();
LoggerSubscription *subscription = nullptr;
for (size_t i = 0; i < orb_topics_count(); i++) {
@ -1625,7 +1625,7 @@ void Logger::write_formats() @@ -1625,7 +1625,7 @@ void Logger::write_formats()
{
_writer.lock();
ulog_message_format_s msg = {};
const orb_metadata **topics = orb_get_topics();
const orb_metadata *const*topics = orb_get_topics();
//write all known formats
for (size_t i = 0; i < orb_topics_count(); i++) {

2
src/modules/replay/replay_main.cpp

@ -631,7 +631,7 @@ bool Replay::nextDataMessage(std::ifstream &file, Subscription &subscription, in @@ -631,7 +631,7 @@ bool Replay::nextDataMessage(std::ifstream &file, Subscription &subscription, in
const orb_metadata *Replay::findTopic(const std::string &name)
{
const orb_metadata **topics = orb_get_topics();
const orb_metadata *const *topics = orb_get_topics();
for (size_t i = 0; i < orb_topics_count(); i++) {
if (name == topics[i]->o_name) {

2
src/modules/uORB/uORBTopics.h

@ -45,6 +45,6 @@ extern size_t orb_topics_count() __EXPORT; @@ -45,6 +45,6 @@ extern size_t orb_topics_count() __EXPORT;
/*
* Returns array of topics metadata
*/
extern const struct orb_metadata **orb_get_topics() __EXPORT;
extern const struct orb_metadata *const *orb_get_topics() __EXPORT;
#endif /* MODULES_UORB_UORBTOPICS_H_ */

Loading…
Cancel
Save