Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Считывание данных в глобальный массив.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Jenya7
У меня есть внешняя память куда я логирую данные.
Данные с памяти я считываю функцией
Код
uint32_t LOGGER_Read(uint32_t address, uint32_t lenght, uint8_t *buffer)

то есть передаю начальный адрес, размер и массив куда писать.
тестирую так
Код
void Test_SetLog(void)
{
    for (int i=0; i<180; i++)
    {
        LOGGER_WriteDayDelta(i);
    }
}

void Test_GetLog(void)
{
    uint32_t packet_size = 180;
    uint8_t deltas[packet_size];
    LOGGER_Read(START_LOG_ADRESS,packet_size,deltas);
}

все работает. все прекрасно. с локальным массивом фиксированной длины.

Теперь мне в одном месте данные нужно считать а в другом их обработать, поэтому мне нужен глобальный массив. причем массив переменной длины, так как количество считываемых записей меняется.
Код
uint8_t *deltas_log;
GetLog(deltas_log);

Где

void GetLog(uint8_t *deltas)
{
    uint32_t packet_size = 180; //for debug
    LOGGER_Read(START_LOG_ADRESS,packet_size,deltas);
}


указатель понятно дело не инициализируется и я получаю массив заполненный мусором.
как мне правильно передать массив (указатель) в функцию?


XVR
Массив надо сначала где то создать. malloc (если на С) или new char[...] (если на С++) вам в помощь
Jenya7
Цитата(XVR @ Dec 17 2015, 17:57) *
Массив надо сначала где то создать. malloc (если на С) или new char[...] (если на С++) вам в помощь

malloc не хочу ибо
Код
The dynamic allocation/creation of anything is fraught with problems in real time and deeply embedded systems, so, wherever possible, static alternatives should be considered.

The standard C library functions (and C++ operators) exhibit all the features that support the “dynamic = bad” rule. A normal malloc() implementation is not deterministic, which means that its use should be avoided in real time code.

какой выход? только статический массив в RAM?
Kabdim
Можно в стеке если есть точка выполнения из которой существует дерево вызовов до заполнения и обработки, нужен c99 если не путаю.
Код
void blablabla(size_t size) {
   int array[size];
   ...
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.