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

 
 
> В какой тип читать байты с файла
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
Ответов
xmailer
сообщение Oct 25 2017, 10:50
Сообщение #2





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



Поясню алгоритм работы, почему возник данный вопрос:
1. пользователь в win приложении ведет список, состоящий из нескольких полей (достаточно разный по объему данных);
2. пользователь в приложении имеет возможность скинуть данные списка в файл на sd, данные пишу в бинарный файл;
3. sd карта вставляется в устройство на stm32, потом reset или power on, при запуске читается данные этого списка, что определяет алгоритмику работы.

Рассматривались попытки организовать все по usb, через virtual port com, запись данных списка в eeprom, но было решено что с sd будет проще и мобильнее (устройство с собой не потаскаешь, с ноутбуком тоже не всегда удобно).
Мне кажется ситуация достаточно типичная для работы устройства на stm32.
Кто как поступает в таких случаях?

Цитата(AlexandrY @ Oct 25 2017, 14:19) *
При создании этих файлов надо одновременно генерить и код на С для выделения статического массива, а лучше структуры.

Данный подход требует ребилда hex-а и его прошивка в камень. Мы сейчас так делаем, задумали как временное решение, поэтому сейчас пытаемся уйти от этого решения.

Цитата(AlexandrY @ Oct 25 2017, 14:19) *
Штатный malloc для выделения места для файла в RAM только потому что не хочется писать его размер - плохая идея.
Это все равно что разложить грабли на будущее.

Именно от сомнений использования malloc возник вопрос.

Цитата(Jenya7 @ Oct 25 2017, 14:17) *
вобще то можно выделить общий массив. все равно нужно хранить все файлы.

общий массив какого размера? по максималке, но может быть и 100байт, а может 100Кбт. Этим рулит пользователь. И можно попасть в ситуацию что выделенный массив мал по размеру или просто живет, отъедает память.
это можно использовать на относительно статичных данных.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 25 2017, 10:59
Сообщение #3


Ally
******

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



Цитата(xmailer @ Oct 25 2017, 13:50) *
Поясню алгоритм работы, почему возник данный вопрос:
1. пользователь в win приложении ведет список, состоящий из нескольких полей (достаточно разный по объему данных);

Вот это - "достаточно разный по объему данных" и есть основная проблема.
Нужно ввести в вашей программе на PC контроль точного размера.
Вам самим определится сколько же вы максимум можете отдать под это RAM-а и выделить наконец окончательный статический массив максимального размера.
И вас перестанет мучать постоянная неизвестность сколько RAM-а есть в вашем распоряжении.
А имеено эта неизвестность раздувает программы, которые в сотнях случаев должны предусматриваить реакцию на ситуации нехватки памяти.
Go to the top of the page
 
+Quote Post

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


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

 


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


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