|
Чтение строк из флэш. |
|
|
|
Nov 6 2016, 10:00
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(rx3apf @ Nov 6 2016, 15:40)  А как же иначе ? А если предполагается, что там еще могут быть какие-то данные между строками, то перед строкой сохранять еще и смещение до следующей (т.е. длину строки и что там еще может лежать). а если так. принял строку Код typedef struct TESTS_S { char *text; }TESTS;
TESTS tests[MAX_TESTS]; unsigned char test_idx = 0;
void TESTER_AddTest(const char *test) { if (test_idx < MAX_TESTS) memcpy (tests[test_idx++].text, test, strlen(test)); else test_idx = 0; } и записал ее Код void TESTER_SaveTest(uint32_t user_page) { FLASH_PageErase(user_page); FLASH_PageProgram(user_page,(uint8_t *) tests, sizeof (tests)); } так будет работать?
|
|
|
|
|
Nov 6 2016, 12:04
|
Гуру
     
Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925

|
Цитата(Jenya7 @ Nov 6 2016, 15:48)  я не уверен что конец строки указывает на начало следующей. в этом случае мне нужно сохранять строки строго одна после другой. А как вы их сохраняете? Можно как-то по другому? Если строки приходят по терминалу, то в конце всяко будет или 0x0D или 0x0A. А, так как чистый flash читается как 0xFF, то можно по ним искать начало строки. Цитата(Jenya7) FLASH_PageProgram(user_page,(uint8_t *) tests, sizeof (tests)); т.е. вы на одну страницу записываете одно сообщение?
|
|
|
|
|
Nov 6 2016, 12:49
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(rx3apf @ Nov 6 2016, 17:25)  А почему не стирать страницы заранее, и писать данные уже в стертые ? флеш пишется постранично. нельзя дописать на страницу. пишется вся страница. суть вопроса как организовать алгоритм записи/чтения строк на флеш страницу. Цитата(iosifk @ Nov 6 2016, 17:38)  У меня на сайте есть статья про микроконтроллеры НЕК - эмуляция электрического ПЗУ на флэшь. Только учтите, что циклов перезаписи на страницу не более 10 тыс, а ввовсе не 100 тыс, как в рекламе... А вообще то - мелкая фрам и никаких проблем... у STM есть EEPROM Emulator. я с ним работал как то. но сейчас я работаю с Kinetis. но даже с EEPROM нужен алгоритм записи/чтения.
Сообщение отредактировал Jenya7 - Nov 6 2016, 12:46
|
|
|
|
|
Nov 6 2016, 12:56
|
Знающий
   
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088

|
Цитата(Jenya7 @ Nov 6 2016, 15:43)  суть вопроса как организовать алгоритм записи/чтения строк на флеш страницу. В конце каждой строки ставите нулевой байт, после которого стразу начинается новая строка. В последней строке на странице ставите 2 нулевых байта. Таким образом, последняя считанная строка будет всегда пустая. Считывать можно хотя бы даже с помощью sscanf.
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
Nov 6 2016, 13:02
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Dog Pawlowa @ Nov 6 2016, 17:53)  Как только вы сформулируете проблему, не затрагивая программирование, флэш, и проч, то проблема и решится. Строки - как клубни картошки - их можно ссыпать в мешки одинакового размера (чтобы заведомо поместилась), и запоминать номер мешка. Или высыпать на длинный конвейер, и завести тетрадку на каком удалении находится начало каждой строки. Перевожу. Или создать массивы фиксированного размера с таблицей индексов, или таблицу указателей. это сойдет за массив указателей? Код typedef struct TESTS_S { char *text; }TESTS;
TESTS tests[MAX_TESTS];
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|