jcxz 81 Friday at 12:41 PM Posted Friday at 12:41 PM · Report post 12 минут назад, Юрий48 сказал: Так понимаю, что в ОЗУ не влезаю. Картинок в интерфейсе много. Можно ли что то в этом случае предпринять? Телепаты как всегда - в отпуске. Что вы там добавляете и как - только они могут угадать. Quote Share this post Link to post Share on other sites More sharing options...
Юрий48 0 Friday at 01:26 PM Posted Friday at 01:26 PM (edited) · Report post В 26.05.2023 в 15:41, jcxz сказал: Телепаты как всегда - в отпуске. Что вы там добавляете и как - только они могут угадать. Процессор STM32F103C8T6, память - 64 Кб Flash, 20 Кб SRAM. Первый случай: программа работает без замечаний, расклад памяти такой - "Program Size: Code=43824 RO-data=3524 RW-data=9520 ZI-data=10272". Второй случай: помимо прочего в программе есть "static uint16_t Win2_Ric [] = {...}". Добавляю туда 644 байт и программа зависает. Расклад памяти при этом такой - "Program Size: Code=43816 RO-data=3524 RW-data=10164 ZI-data=10268". Вот я и пишу: "Так понимаю, что в ОЗУ не влезаю. Картинок в интерфейсе много. Можно ли что то в этом случае предпринять?" Edited Friday at 01:27 PM by Юрий48 Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 Friday at 01:30 PM Posted Friday at 01:30 PM · Report post 6 минут назад, Юрий48 сказал: Второй случай: помимо прочего в программе есть "static uint16_t Win2_Ric [] = {...}". Добавляю туда 644 байт и программа зависает. Расклад памяти при этом такой - "Program Size: Code=43816 RO-data=3524 RW-data=10164 ZI-data=10268". Вот я и пишу: "Так понимаю, что в ОЗУ не влезаю. Картинок в интерфейсе много. А зачем картинку пихать в ОЗУ? Вроде ей самое место - во флеши. "static uint16_t const Win2_Ric [] = {...}; 6 минут назад, Юрий48 сказал: Так понимаю, что в ОЗУ не влезаю. Если бы это было так, то компилятор выдал бы ошибку компиляции. Проблема у вас в чём-то другом. Но без кода - не угадать. И без расшифровки содержимого HardFault-регистров. Quote Share this post Link to post Share on other sites More sharing options...
Юрий48 0 Friday at 02:22 PM Posted Friday at 02:22 PM · Report post В 26.05.2023 в 16:30, jcxz сказал: А зачем картинку пихать в ОЗУ? Вроде ей самое место - во флеши. "static uint16_t const Win2_Ric [] = {...}; А с const программа не компилируется. Эту проблему в самом начале я замёл под ковёр, а сейчас поезд уже ушёл, чтобы её разматывать - нет на это ни сил не времени. В 26.05.2023 в 16:30, jcxz сказал: Если бы это было так, то компилятор выдал бы ошибку компиляции. Действительно, если подсчитать, то получается, что в ОЗУ = 20432 байта или 19.953125 килобайт, т. е. - влезает, но на самом, самом пределе. И это получается как то влияет, поскольку кроме добавления 644 байт ничего более не делается. В 26.05.2023 в 16:30, jcxz сказал: И без расшифровки содержимого HardFault-регистров. Очень бы хотелось разобраться с этой проблемой до конца, но, учитывая ранее сказанное и лимит времени, решаю рисунок сделать программно - всего 12 линий. Может, когда будет время или всё совсем развалится придётся вернуться к этой проблемме. Quote Share this post Link to post Share on other sites More sharing options...
x893 6 Friday at 04:09 PM Posted Friday at 04:09 PM · Report post 1 hour ago, Юрий48 said: А с const программа не компилируется. Эту проблему в самом начале я замёл под ковёр, а сейчас поезд уже ушёл, чтобы её разматывать - нет на это ни сил не времени. Если что то не компилируется, то компилятор пишет причину чёрным по белому. Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 20 Friday at 04:15 PM Posted Friday at 04:15 PM · Report post Бывают программы, которые работают не благодаря, а вопреки. В них главное - не спугнуть. 1 1 Quote Share this post Link to post Share on other sites More sharing options...
Obam 13 Friday at 09:58 PM Posted Friday at 09:58 PM (edited) · Report post Позволю и себе добавить "припарку" этому "мёртвому" RW-data=10164 ZI-data=10268 Если не хватило прядка полукилобайта ОЗУ, то навеняка от ZI-data (это всё, что инициируется нулями) можно эти пол-килобайта отщипнуть (-; Edited Friday at 09:58 PM by Obam Quote Share this post Link to post Share on other sites More sharing options...
jcxz 81 Saturday at 06:24 AM Posted Saturday at 06:24 AM · Report post 15 часов назад, Юрий48 сказал: А с const программа не компилируется. 15 часов назад, Юрий48 сказал: Очень бы хотелось разобраться с этой проблемой до конца, но, учитывая ранее сказанное и лимит времени Учитывая вышенаписанное, любое изменение этой "программы" может привести как к её "работе", так и не работе. Сочуствую её пользователям... 16 часов назад, Юрий48 сказал: Может, когда будет время Никогда не будет. И не времени у вас нет, а желания. При желании, время всегда можно найти. Quote Share this post Link to post Share on other sites More sharing options...
Юрий48 0 Saturday at 09:09 AM Posted Saturday at 09:09 AM · Report post В 27.05.2023 в 09:24, jcxz сказал: И не времени у вас нет, а желания. Согласен, поскольку при удовлетворении этого желания угрохаю столько времени, что вообще все желания отпадут. А сечас уже сделал, как наметил и даже освободил немного памяти и иду дальше до момента, когда опять что ни будь не обрушится и придётся обращатся к Вам. Вот тогда то Вы и припомните мне всё. Ну, да ладно, главное, что бы в конце какой ни будь толк из этого вышел. Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 13 Saturday at 05:21 PM Posted Saturday at 05:21 PM · Report post В 26.05.2023 в 20:22, Юрий48 сказал: А с const программа не компилируется. Почему? Наверно потому, что пытаетесь эту переменную изменять в коде? Вообще, когда инициализуете переменную, её копия (вернее, список инициализаторов) уже и без того помещается во флеше. В процессе старта эти инициализаторы копируются из флеша в ОЗУ и далее переменная доступна в ОЗУ. Не объявляйте слишком много статических (static) массивов для хранения картинок, используйте хранение во флеше, а для изменяемых массивов используйте локальные переменные в функциях. Тогда они помещаются в стеке, а он динамический, при выходе из функции массив становится недействительным и занятая им память освобождается. В 26.05.2023 в 20:22, Юрий48 сказал: ОЗУ = 20432 байта или 19.953125 килобайт, т. е. - влезает, но на самом, самом пределе. Но расход стека наверняка не учитывается, отсюда и проблема - он выходит за границы и портит содержимое ОЗУ, предназначенное для статического хранения. Не храните слишком много статических массивов. Quote Share this post Link to post Share on other sites More sharing options...
Юрий48 0 Sunday at 04:38 PM Posted Sunday at 04:38 PM · Report post В 27.05.2023 в 20:21, EdgeAligned сказал: Наверно потому, что пытаетесь эту переменную изменять в коде? Дело в том, что изначально была создана сложная структура указателей на эту переменную, которая (структура) на тот момент была удобна (несколько вложенных функций), но эта конструкция при const вызывала ошибку, с которой я не разобрался, и которая вот сейчас меня и ударила. Сейчас что либо менять смысла не вижу, но разбраться всё же надо. Но это уже в новом проекте. Quote Share this post Link to post Share on other sites More sharing options...