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

 
 
> В какой тип читать байты с файла
xmailer
сообщение Oct 24 2017, 19:31
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 11-09-16
Пользователь №: 93 305



Люди с опытом в С в keil, подскажите, есть файл на sd (размер может быть различным), нужно его читать в самом старте и куда-то писать, потом эти данные активно используются.
Если бы разговор был о каком нить C#,Delphi,VB,... я бы однозначно читал бы в динамический массив, но вот в случае C на stm32 камне возникли сомнения.
Имеет ли право следующий код считаться рабочим, код работает, проверял в отладчике. Но вот как отследить - хватит ли свободной памяти под массив, если допустить, что файлов может быть несколько, то это может быть проблемой. Или может есть другие варианты, без массивные. Можно конечно постоянно держать открытым файл и читать из него данные, но файл на sd, и если sd слетит по разным причинам, то все - приехали. Поэтому sd хотел задействовать на начальном этапе - при старте, потом можно вообще sd отмонтировать, и уже работать со считанными данными.
Спасибо!

Код
uint8_t *adata;
adata = (uint8_t *) malloc(РазмерМассива*sizeof(uint8_t));
adata[0] = 9;
adata[1] = 8;
adata[2] = 7;
adata[3] = 6;
...
//
for(i=0;i<10;i++){
uint8_t x = adata[i];
}

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Oct 25 2017, 09:04
Сообщение #2


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

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



Цитата(xmailer @ Oct 25 2017, 01:31) *
Но вот как отследить - хватит ли свободной памяти под массив, если допустить, что файлов может быть несколько, то это может быть проблемой.


можете посчитать сумарный размер всех файлов вначале и зная сколько у вас свободного RAM принять решение - выделить массив или читать с карты. и можно выделить статический массив. не вижу смысла в динамической алокации.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 25 2017, 09:45
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Jenya7 @ Oct 25 2017, 12:04) *
не вижу смысла в динамической алокации.
Сегодня у вас один файл 200 байтов, второй 1000. Завтра первый 1500, второй 300. Какого размера статический массив выделять?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 25 2017, 10:19
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Сергей Борщ @ Oct 25 2017, 12:45) *
Сегодня у вас один файл 200 байтов, второй 1000. Завтра первый 1500, второй 300. Какого размера статический массив выделять?

При создании этих файлов надо одновременно генерить и код на С для выделения статического массива, а лучше структуры.
Я везде так делаю.
Потому как в микроконтроллерах не так напрягают изменения размера файлов сколько вопрос о занимаемом им объёме.
Поэтому любое изменение размера файла читаемого в RAM это работа, так что подкрутить там размер массива чистая мелочь.
Штатный malloc для выделения места для файла в RAM только потому что не хочется писать его размер - плохая идея.
Это все равно что разложить грабли на будущее.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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