Ivan. 4 1 марта Опубликовано 1 марта · Жалоба 9 часов назад, Arlleex сказал: Аффтар, припаяй к свободным ногам I2C EEPROM-ку и не занимайся ерундой)) Как же я люблю форумчан за такие великие идеи. Осталось только найти свободные ножки и реализовать на них софтварный I2C. А потом к 1000+ платам приклеить на скочик EEPROM. Вопрос звучал КАК, а не ЗАЧЕМ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 1 марта Опубликовано 1 марта · Жалоба On 2/29/2024 at 12:22 PM, Ivan. said: Жаль, что нельзя сделать так: Почему нельзя? Вы же можете в программе явно указывать, какую функцию в каком сегменте кода размещать, и если линковщик будет знать о таком сегменте, то туда её и положит. Более того, можно указывать код из каких файлов с исходным текстом в какие сегменты помещать. Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 1 марта Опубликовано 1 марта · Жалоба 15 минут назад, tonyk_av сказал: Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К. При чем тут загрузчик? загрузчик от силы 6к занимает с интерфейсом, протоколом и шифрованием. Проблема в том, что где то нужно хранить настройки, а значит они будут занимать целую страницу, чтобы можно было стирать. Выделять последние 128к - жирно. Использовать нулевой сектор - нельзя, там обязательный старт программы (основной программы или загрузчика - не важно). По этому под настройки просится Sector1, 2 и/или 3. В моем случае это можно решить загрузчиком, размещенным в Sector0, затем настройки, затем основная программа. Но я хотел решить задачу, а не обойти. 20 минут назад, tonyk_av сказал: Вы же можете в программе явно указывать, какую функцию в каком сегменте кода размещать Могу, но это мне придется делать вручную. А так бы это линковщик сам сделал: не влезла по порядку идущая функция - перескакивает на следующий регион. никакой оптимизации, просто по порядку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 1 марта Опубликовано 1 марта · Жалоба 33 минуты назад, tonyk_av сказал: Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К. ТС указал и F4, и F7/H7. Вот, поглядите распределение памяти в H7 Если F4 - то да, мелкие сектора можно использовать по назначению. В H7 - все сектора жирные и их по пальцам пересчитать. 5 минут назад, Ivan. сказал: Проблема в том, что где то нужно хранить настройки, а значит они будут занимать целую страницу, чтобы можно было стирать. А для надежного хранения, чтобы залатать возможность похерить все настройки при сбое питания в момент их изменения, нужно 2 таких сектора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan. 4 1 марта Опубликовано 1 марта · Жалоба 2 минуты назад, Arlleex сказал: Если F4 - то да, мелкие сектора можно использовать по назначению. В H7 - все сектора жирные и их по пальцам пересчитать. Признаю, ошибся, на память формулировал. 5 минут назад, Arlleex сказал: А для надежного хранения, чтобы залатать возможность похерить все настройки при сбое питания в момент их изменения, нужно 2 таких сектора. Конечно же 2 сектора, и желательно на 2-х независимых носителях, например 25 серия и Embedded Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 1 марта Опубликовано 1 марта · Жалоба 6 минут назад, Ivan. сказал: Конечно же 2 сектора, и желательно на 2-х независимых носителях, например 25 серия и Embedded Это весьма опрометчивая попытка поязвить😉 Но дело Ваше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 1 марта Опубликовано 1 марта · Жалоба 4 hours ago, Arlleex said: Это весьма опрометчивая попытка поязвить😉 Зря хихикаешь, Arlleex. Я в итоге плюнул на неудобную организацию памяти в F4 и пожертвовал ногами МК, чтобы подключить W25Qxxx. В моём случае может прилететь команда на изменение одного байта- и что, держать для этого в ОЗУ 16К для буфера флэша? Для W25Q нужен буфер на 4К, что сразу дало экономию 12К в ОЗУ. Плюс подключил FATFS и получил массу удобств при работе с данными. Специально не стремился, но байт-код программы пользователя в контроллере теперь действительно хранится на двух относительно независимых носителях, на внешней флэш и во внутренней флэш МК, куда она загружается перед исполнением (ессно, предварительно проверятся, что содержимое внутреннего флэш МК отличается от содержимого файла во внешней). У контроллера есть режим создания файловой системы на внешней флэш, когда после создания файловой системы создаются файлы с содержимым внутренней флэш МК. В случае выхода из строя МК его можно перепаять, и при старте он прошьёт свой флэш с внешней. А если откажет микросхема внешней флэш, то можно войти в режим инициализации внешней флэш, на которую будет скопировано содержимое внутренней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 1 марта Опубликовано 1 марта · Жалоба 34 минуты назад, tonyk_av сказал: В моём случае может прилететь команда на изменение одного байта- и что, держать для этого в ОЗУ 16К для буфера флэша? Не знаю, зачем вы держите 16К флеша в ОЗУ, когда можно не держать. Я не держу и вам не советую. И в F4 нормальная организация памяти, не идеальная, но жить можно. 0 сектор под загузчик, 1-й и 2-й под настройки, 3-й еще даже свободный под прошивку вон остался. И разговор шел о надежном изменении настроек, а не о таком, что жмать на кнопку "записать настройки" можно только перекрестившись, чтоб электричество не отключили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 1 марта Опубликовано 1 марта · Жалоба 3 часа назад, tonyk_av сказал: Для W25Q нужен буфер на 4К Нужен?? Кому и зачем интересно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 2 марта Опубликовано 2 марта · Жалоба 11 hours ago, jcxz said: Нужен?? Кому и зачем интересно? FATFS 14 hours ago, Arlleex said: Не знаю, зачем вы держите 16К флеша в ОЗУ, когда можно не держать. Я не держу и вам не советую. Так и я его не держу. Но пришлось бы, когда внутри этих 16К нужно изменить один байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 2 марта Опубликовано 2 марта · Жалоба 1 час назад, tonyk_av сказал: Но пришлось бы, когда внутри этих 16К нужно изменить один байт. Объясните, зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 60 2 марта Опубликовано 2 марта · Жалоба On 3/2/2024 at 8:30 AM, tonyk_av said: Так и я его не держу. Но пришлось бы, когда внутри этих 16К нужно изменить один байт. Для временной буферизации достаточно иметь буфер размером равным объему настроек. При условии, что в этом секторе кроме настроек ничего не хранится. Неужели у вас настройки 16К занимают ? А если использовать динамическое выделение памяти (кучу) под буфер, то эта память не будет зря пропадать во время постоянной работы. Изменения настроек ведь носит эпизодический характер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 178 2 марта Опубликовано 2 марта · Жалоба 1 час назад, dimka76 сказал: Для временной буферизации достаточно иметь буфер размером равным объему настроек. Зачем их вообще буферизовать? Я имею в виду буферизовать для записи зачем? Я еще мог бы понять хранить слепок настроек в ОЗУ, при условии, что оригинал лежит во внешней флешке, к которой еще надо добраться через лес и три дороги. Для создания новой копии нужно просто налету копировать из одной области хранения в другую, хоть даже в этом же секторе, попутно изменяя нужные параметры, и в конце снабжая контрольной суммой. В этом случае минимальный объем буфера удержания будет равняться минимально допустимой порции записи конкретной флешки. Мы тут о STM32 говорим, вроде? Так там эта порция == 16 бит. И никаких десятков килобайт драгоценного ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 44 2 марта Опубликовано 2 марта · Жалоба 3 hours ago, dimka76 said: Неужели у вас настройки 16К занимают ? 3 hours ago, dimka76 said: Изменения настроек ведь носит эпизодический характер. Это не настройки, а программа пользователя, которая занимает 32К, для этого задействовано два сектора по 16К. 2 hours ago, Arlleex said: Для создания новой копии нужно просто налету копировать из одной области хранения в другую То есть нужно очистить сектор в 128К, скопировать туда сектор в 16К, очистить сектор в 16К, обратно скопировать сектор в 16К, налету заменяя нужный байт. Стирание 128К идёт несколько секунд, плюс стирание 16К, что тоже требует времени. Это не считая того, что придётся брать МК с памятью программ не 256К, а с 512К. Плюс время программирования два раза по 16К. А ещё есть данные программы пользователя, которые тоже хранятся во флэш... Ну и ресурс у внешней флэш W25Qxx на порядок больше, чем у флэш МК, 100К против 10К. Так что предложенный вариант хорош для настроек, которые не часто меняются, но для перепрограммирования флэш не пригоден. Вообще, сравнивая F4, F7 и Н7 с другими линейками, я пришёл к выводу, что их создатели не рассчитывали на то, что флэш МК будет активно использоваться программой пользователя, поэтому для МК из этих линеек разумно сразу закладывать внешний флэш, когда предполагается более-менее часто сохранение данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 2 марта Опубликовано 2 марта · Жалоба 39 минут назад, tonyk_av сказал: То есть нужно очистить сектор в 128К, скопировать туда сектор в 16К, очистить сектор в 16К, обратно скопировать сектор в 16К, налету заменяя нужный байт. Чтобы записать несколько байт, не нужно копировать сектора. Можно дописать в стёртое место сектора. И SPI-флешки позволяют дописывать и сектора флешь в МК тоже можно дописывать (хоть там бывает и не так гибко). А проблему с необходимостью тратить несколько КБ на какие-то буфера для FATFS - вы сами себе создали. Когда решили для хранения настроек зачем-то влепить FATFS. Вместо того, чтобы хранить в простом и надёжном кольцевом буфере. Использовать FS на встроенном неизвлекаемом носителе, да на микроконтроллере (в котором нет полноценной ОС) - сомнительная затея сама по себе. Трудно представить ситуацию, где это реально нужно. В 01.03.2024 в 16:08, tonyk_av сказал: Плюс подключил FATFS и получил массу удобств при работе с данными. В чём "удобства" то? В том, что при неосторожном выключении питания в момент модификации данных, вся FS может слететь вместе с настройками? Создали потенциальную кучу проблем своим пользователям на пустом месте. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться