Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Считывание данных в глобальный массив. / 7 сообщений из 7, страница 1 из 1
17.12.2015, 11:15
    #39130570
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
Язык С.Пишу под камень.
У меня есть внешняя память куда я логирую данные.
Данные с памяти я считываю функцией
Код: c#
1.
uint32_t LOGGER_Read(uint32_t address, uint32_t lenght, uint8_t *buffer)


то есть передаю начальный адрес, размер и массив куда читать.
тестирую так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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);
}


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

Теперь мне в одном месте данные нужно считать а в другом их обработать, поэтому мне нужен глобальный массив. причем массив переменной длины, так как количество считываемых записей меняется.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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);
 }



указатель понятно дело не инициализируется и я получаю массив заполненный мусором.
как мне правильно передать массив (указатель) в функцию?
...
Рейтинг: 0 / 0
17.12.2015, 11:34
    #39130594
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
Выделяй память динамически.
malloc() realloc()
...
Рейтинг: 0 / 0
17.12.2015, 11:41
    #39130602
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
Dima TВыделяй память динамически.
malloc() realloc()

в ембедед это не есть хорошо.
...
Рейтинг: 0 / 0
17.12.2015, 11:47
    #39130610
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
тогда
Код: plaintext
1.
2.
#define MAX_LOG_LEN 100500 // Максимально необходимый размер
uint8_t deltas_log[MAX_LOG_LEN];


Целиком наполнять не обязательно, пользуй сколько надо, не забывай проверять превышение MAX_LOG_LEN
...
Рейтинг: 0 / 0
17.12.2015, 11:52
    #39130617
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
Dima Tтогда
Код: plaintext
1.
2.
#define MAX_LOG_LEN 100500 // Максимально необходимый размер
uint8_t deltas_log[MAX_LOG_LEN];


Целиком наполнять не обязательно, пользуй сколько надо, не забывай проверять превышение MAX_LOG_LEN
тогда мне нужна какя то заглушка в массиве, типа EOF? чтоб знать до куда читать.
...
Рейтинг: 0 / 0
17.12.2015, 11:57
    #39130621
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
EOF это из другой оперы.

Добавь переменную
Код: plaintext
1.
int deltas_log_size = 0;


Запись в конец так
Код: sql
1.
2.
deltas_log[deltas_log_size] = ...
deltas_log_size++;
...
Рейтинг: 0 / 0
17.12.2015, 12:01
    #39130629
jenya7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Считывание данных в глобальный массив.
Dima TEOF это из другой оперы.

Добавь переменную
Код: plaintext
1.
int deltas_log_size = 0;


Запись в конец так
Код: sql
1.
2.
deltas_log[deltas_log_size] = ...
deltas_log_size++;


да. точно. у меня же есть текущий номер записи. я всегда могу высчитать размер. спасибо.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Считывание данных в глобальный массив. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]