Перейти к содержанию
    

Как зарезервировать страницу памяти в середине кода

9 часов назад, Arlleex сказал:

Аффтар, припаяй к свободным ногам I2C EEPROM-ку и не занимайся ерундой))

Как же я люблю форумчан за такие великие идеи.
Осталось только найти свободные ножки и реализовать на них софтварный I2C. А потом к 1000+ платам приклеить на скочик EEPROM.
Вопрос звучал КАК, а не ЗАЧЕМ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 2/29/2024 at 12:22 PM, Ivan. said:

Жаль, что нельзя сделать так:

Почему нельзя? Вы же можете в программе явно указывать, какую функцию в каком сегменте кода размещать, и если линковщик будет знать о таком сегменте, то туда её и положит. Более того, можно указывать код из каких файлов с исходным текстом в какие сегменты помещать.

Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К.

image.thumb.png.48a950caf9635da21aca4ff504bbbae4.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 минут назад, tonyk_av сказал:

Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К.

При чем тут загрузчик? загрузчик от силы 6к занимает с интерфейсом, протоколом и шифрованием.
Проблема в том, что где то нужно хранить настройки, а значит они будут занимать целую страницу, чтобы можно было стирать.
Выделять последние 128к - жирно.
Использовать нулевой сектор - нельзя, там обязательный старт программы (основной программы или загрузчика - не важно).
По этому под настройки просится Sector1, 2 и/или 3.

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

 

20 минут назад, tonyk_av сказал:

Вы же можете в программе явно указывать, какую функцию в каком сегменте кода размещать

Могу, но это мне придется делать вручную. А так бы это линковщик сам сделал: не влезла по порядку идущая функция - перескакивает на следующий регион. никакой оптимизации, просто по порядку. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, tonyk_av сказал:

Признаюсь, я не могу понять целей этой свистопляски с дыркой в середине памяти программы. Если нужно место под загрузчик, то сюда просятся или 64К из середины, или последние 128К.

ТС указал и F4, и F7/H7. Вот, поглядите распределение памяти в H7

image.thumb.png.67a2643e6166e14c5ee1bd217e8d050e.png


Если F4 - то да, мелкие сектора можно использовать по назначению. В H7 - все сектора жирные и их по пальцам пересчитать.
 

5 минут назад, Ivan. сказал:

Проблема в том, что где то нужно хранить настройки, а значит они будут занимать целую страницу, чтобы можно было стирать.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Arlleex сказал:

Если F4 - то да, мелкие сектора можно использовать по назначению. В H7 - все сектора жирные и их по пальцам пересчитать.

Признаю, ошибся, на память формулировал.

5 минут назад, Arlleex сказал:

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

Конечно же 2 сектора, и желательно на 2-х независимых носителях, например 25 серия и Embedded

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, Ivan. сказал:

Конечно же 2 сектора, и желательно на 2-х независимых носителях, например 25 серия и Embedded

Это весьма опрометчивая попытка поязвить😉 Но дело Ваше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

4 hours ago, Arlleex said:

Это весьма опрометчивая попытка поязвить😉

Зря хихикаешь, Arlleex.

Я в итоге плюнул на неудобную организацию памяти в F4 и пожертвовал ногами МК, чтобы подключить W25Qxxx. В моём случае может прилететь команда на изменение одного байта- и что, держать для этого в ОЗУ 16К для буфера флэша? Для W25Q нужен буфер на 4К, что сразу дало экономию 12К в ОЗУ. Плюс подключил FATFS и получил массу удобств при работе с данными.

Специально не стремился, но байт-код программы пользователя в контроллере теперь действительно хранится на двух относительно независимых носителях, на внешней флэш и во внутренней флэш МК, куда она загружается перед исполнением (ессно, предварительно проверятся, что содержимое внутреннего флэш МК отличается от содержимого файла во внешней). У контроллера есть режим создания файловой системы на внешней флэш, когда после создания файловой системы создаются файлы с содержимым внутренней флэш МК. В случае выхода из строя МК его можно перепаять, и при старте он прошьёт свой флэш с внешней. А если откажет микросхема внешней флэш, то можно войти в режим инициализации внешней флэш, на которую будет скопировано содержимое внутренней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 минуты назад, tonyk_av сказал:

В моём случае может прилететь команда на изменение одного байта- и что, держать для этого в ОЗУ 16К для буфера флэша?

Не знаю, зачем вы держите 16К флеша в ОЗУ, когда можно не держать. Я не держу и вам не советую.

И в F4 нормальная организация памяти, не идеальная, но жить можно. 0 сектор под загузчик, 1-й и 2-й под настройки, 3-й еще даже свободный под прошивку вон остался.

И разговор шел о надежном изменении настроек, а не о таком, что жмать на кнопку "записать настройки" можно только перекрестившись, чтоб электричество не отключили.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, tonyk_av сказал:

Для W25Q нужен буфер на 4К

Нужен?? Кому и зачем интересно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 hours ago, jcxz said:

Нужен?? Кому и зачем интересно?

FATFS

14 hours ago, Arlleex said:

Не знаю, зачем вы держите 16К флеша в ОЗУ, когда можно не держать. Я не держу и вам не советую.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, tonyk_av сказал:

Но пришлось бы, когда внутри этих 16К нужно изменить один байт.

Объясните, зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/2/2024 at 8:30 AM, tonyk_av said:

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

Для временной буферизации достаточно иметь буфер размером равным объему настроек.

При условии, что в этом секторе кроме настроек ничего не хранится.
Неужели у вас настройки 16К занимают ?

А если использовать динамическое выделение памяти (кучу) под буфер, то эта память не будет зря пропадать во время постоянной работы.
Изменения настроек ведь носит эпизодический характер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, dimka76 сказал:

Для временной буферизации достаточно иметь буфер размером равным объему настроек.

Зачем их вообще буферизовать? Я имею в виду буферизовать для записи зачем? Я еще мог бы понять хранить слепок настроек в ОЗУ, при условии, что оригинал лежит во внешней флешке, к которой еще надо добраться через лес и три дороги.

Для создания новой копии нужно просто налету копировать из одной области хранения в другую, хоть даже в этом же секторе, попутно изменяя нужные параметры, и в конце снабжая контрольной суммой. В этом случае минимальный объем буфера удержания будет равняться минимально допустимой порции записи конкретной флешки. Мы тут о STM32 говорим, вроде? Так там эта порция == 16 бит. И никаких десятков килобайт драгоценного ОЗУ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 с другими линейками, я пришёл к выводу, что их создатели не рассчитывали на то, что флэш МК будет активно использоваться программой пользователя, поэтому для МК из этих линеек разумно сразу закладывать внешний флэш, когда предполагается более-менее часто сохранение данных.

 

image.thumb.png.876f3072b53c25093d473850efe0818c.png

image.png.3e7efab0ccf6dd1b1dbbdbcedb13abb7.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 минут назад, tonyk_av сказал:

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

Чтобы записать несколько байт, не нужно копировать сектора. Можно дописать в стёртое место сектора. И SPI-флешки позволяют дописывать и сектора флешь в МК тоже можно дописывать (хоть там бывает и не так гибко).

А проблему с необходимостью тратить несколько КБ на какие-то буфера для FATFS - вы сами себе создали. Когда решили для хранения настроек зачем-то влепить FATFS. Вместо того, чтобы хранить в простом и надёжном кольцевом буфере.

Использовать FS на встроенном неизвлекаемом носителе, да на микроконтроллере (в котором нет полноценной ОС) - сомнительная затея сама по себе. Трудно представить ситуацию, где это реально нужно.

В 01.03.2024 в 16:08, tonyk_av сказал:

Плюс подключил FATFS и получил массу удобств при работе с данными.

В чём "удобства" то? В том, что при неосторожном выключении питания в момент модификации данных, вся FS может слететь вместе с настройками?

Создали потенциальную кучу проблем своим пользователям на пустом месте.  :fool:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...