реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Jenya7
сообщение Dec 17 2015, 08:49
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



У меня есть внешняя память куда я логирую данные.
Данные с памяти я считываю функцией
Код
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);
}


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


Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 17 2015, 11:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Массив надо сначала где то создать. malloc (если на С) или new char[...] (если на С++) вам в помощь
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Dec 17 2015, 13:06
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(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?

Сообщение отредактировал Jenya7 - Dec 17 2015, 13:10
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Dec 17 2015, 16:07
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Можно в стеке если есть точка выполнения из которой существует дерево вызовов до заполнения и обработки, нужен c99 если не путаю.
Код
void blablabla(size_t size) {
   int array[size];
   ...
}


Сообщение отредактировал Kabdim - Dec 17 2015, 16:11
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 03:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016