forked from Archive/PX4-Autopilot
Reduced the amount of memory used by params to only that that is needed
Conflicts: src/modules/systemlib/param/param.c
This commit is contained in:
parent
6b285a73bb
commit
dc4d5619ea
|
@ -57,6 +57,7 @@
|
||||||
#include "systemlib/param/param.h"
|
#include "systemlib/param/param.h"
|
||||||
#include "systemlib/uthash/utarray.h"
|
#include "systemlib/uthash/utarray.h"
|
||||||
#include "systemlib/bson/tinybson.h"
|
#include "systemlib/bson/tinybson.h"
|
||||||
|
#include <systemlib/px4_macros.h>
|
||||||
|
|
||||||
#include "uORB/uORB.h"
|
#include "uORB/uORB.h"
|
||||||
#include "uORB/topics/parameter_update.h"
|
#include "uORB/topics/parameter_update.h"
|
||||||
|
@ -91,8 +92,23 @@ struct param_wbuf_s {
|
||||||
bool unsaved;
|
bool unsaved;
|
||||||
};
|
};
|
||||||
|
|
||||||
// XXX this should be param_info_count, but need to work out linking
|
|
||||||
uint8_t param_changed_storage[(700 / sizeof(uint8_t)) + 1] = {};
|
uint8_t *param_changed_storage = 0;
|
||||||
|
int size_param_changed_storage_bytes = 0;
|
||||||
|
const int bits_per_allocation_unit = (sizeof(*param_changed_storage) * 8);
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned
|
||||||
|
get_param_info_count(void)
|
||||||
|
{
|
||||||
|
// Singleton
|
||||||
|
if (!param_changed_storage)
|
||||||
|
{
|
||||||
|
size_param_changed_storage_bytes = (param_info_count / bits_per_allocation_unit ) + 1;
|
||||||
|
param_changed_storage = zalloc(size_param_changed_storage_bytes);
|
||||||
|
}
|
||||||
|
return param_info_count;
|
||||||
|
}
|
||||||
|
|
||||||
/** flexible array holding modified parameter values */
|
/** flexible array holding modified parameter values */
|
||||||
UT_array *param_values;
|
UT_array *param_values;
|
||||||
|
@ -140,7 +156,7 @@ param_assert_locked(void)
|
||||||
static bool
|
static bool
|
||||||
handle_in_range(param_t param)
|
handle_in_range(param_t param)
|
||||||
{
|
{
|
||||||
return (param < param_info_count);
|
return (param < get_param_info_count());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -245,15 +261,17 @@ param_find_no_notification(const char *name)
|
||||||
unsigned
|
unsigned
|
||||||
param_count(void)
|
param_count(void)
|
||||||
{
|
{
|
||||||
return param_info_count;
|
return get_param_info_count();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
param_count_used(void)
|
param_count_used(void)
|
||||||
{
|
{
|
||||||
|
// ensure the allocation has been done
|
||||||
|
get_param_info_count();
|
||||||
unsigned count = 0;
|
unsigned count = 0;
|
||||||
for (unsigned i = 0; i < sizeof(param_changed_storage) / sizeof(param_changed_storage[0]); i++) {
|
for (unsigned i = 0; i < size_param_changed_storage_bytes; i++) {
|
||||||
for (unsigned j = 0; j < 8; j++) {
|
for (unsigned j = 0; j < bits_per_allocation_unit; j++) {
|
||||||
if (param_changed_storage[i] & (1 << j)) {
|
if (param_changed_storage[i] & (1 << j)) {
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -265,7 +283,7 @@ param_count_used(void)
|
||||||
param_t
|
param_t
|
||||||
param_for_index(unsigned index)
|
param_for_index(unsigned index)
|
||||||
{
|
{
|
||||||
if (index < param_info_count) {
|
if (index < get_param_info_count())
|
||||||
return (param_t)index;
|
return (param_t)index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -323,7 +341,7 @@ param_get_used_index(param_t param)
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for (unsigned i = 0; i < (unsigned)param + 1; i++) {
|
for (unsigned i = 0; i < (unsigned)param + 1; i++) {
|
||||||
for (unsigned j = 0; j < 8; j++) {
|
for (unsigned j = 0; j < bits_per_allocation_unit; j++) {
|
||||||
if (param_changed_storage[i] & (1 << j)) {
|
if (param_changed_storage[i] & (1 << j)) {
|
||||||
|
|
||||||
if (param_storage_index == i) {
|
if (param_storage_index == i) {
|
||||||
|
@ -559,8 +577,8 @@ param_used(param_t param)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned bitindex = param_index - (param_index / sizeof(param_changed_storage[0]));
|
unsigned bitindex = param_index - (param_index / bits_per_allocation_unit);
|
||||||
return param_changed_storage[param_index / sizeof(param_changed_storage[0])] & (1 << bitindex);
|
return param_changed_storage[param_index / bits_per_allocation_unit] & (1 << bitindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void param_set_used_internal(param_t param)
|
void param_set_used_internal(param_t param)
|
||||||
|
@ -570,8 +588,8 @@ void param_set_used_internal(param_t param)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned bitindex = param_index - (param_index / sizeof(param_changed_storage[0]));
|
unsigned bitindex = param_index - (param_index / bits_per_allocation_unit);
|
||||||
param_changed_storage[param_index / sizeof(param_changed_storage[0])] |= (1 << bitindex);
|
param_changed_storage[param_index / bits_per_allocation_unit] |= (1 << bitindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in New Issue