Jump to content
    

Методика поиска в Keil_e проблемы зависания процессора

12 минут назад, Юрий48 сказал:

Так понимаю, что в ОЗУ не влезаю. Картинок в интерфейсе много.  Можно ли что то в этом случае предпринять?

Телепаты как всегда - в отпуске. Что вы там добавляете и как - только они могут угадать.

Share this post


Link to post
Share on other sites

В 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 by Юрий48

Share this post


Link to post
Share on other sites

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-регистров.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

1 hour ago, Юрий48 said:

А с const программа не компилируется. Эту проблему в самом начале я замёл под ковёр, а сейчас поезд уже ушёл, чтобы её разматывать - нет на это ни сил не времени.

Если что то не компилируется, то компилятор пишет причину чёрным по белому.

Share this post


Link to post
Share on other sites

Бывают программы, которые работают не благодаря, а вопреки. В них главное - не спугнуть.

Share this post


Link to post
Share on other sites

Позволю и себе добавить "припарку" этому "мёртвому"
RW-data=10164 ZI-data=10268
Если не хватило прядка полукилобайта ОЗУ, то навеняка от ZI-data (это всё, что инициируется нулями) можно эти пол-килобайта отщипнуть (-;
Edited by Obam

Share this post


Link to post
Share on other sites

15 часов назад, Юрий48 сказал:

А с const программа не компилируется.

15 часов назад, Юрий48 сказал:

Очень бы хотелось разобраться с этой проблемой до конца, но, учитывая ранее сказанное и лимит времени

Учитывая вышенаписанное, любое изменение этой "программы" может привести как к её "работе", так и не работе. Сочуствую её пользователям...

16 часов назад, Юрий48 сказал:

Может, когда будет время

Никогда не будет.

И не времени у вас нет, а желания.  :unknw:  При желании, время всегда можно найти.

Share this post


Link to post
Share on other sites

В 27.05.2023 в 09:24, jcxz сказал:

И не времени у вас нет, а желания.

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

Share this post


Link to post
Share on other sites

В 26.05.2023 в 20:22, Юрий48 сказал:

А с const программа не компилируется.

Почему? Наверно потому, что пытаетесь эту переменную изменять в коде? Вообще, когда инициализуете переменную, её копия (вернее, список инициализаторов) уже и без того помещается во флеше. В процессе старта эти инициализаторы копируются из флеша в ОЗУ и далее переменная доступна в ОЗУ. 

Не объявляйте слишком много статических (static) массивов для хранения картинок, используйте хранение во флеше, а для изменяемых массивов используйте локальные переменные в функциях. Тогда они помещаются в стеке, а он динамический, при выходе из функции массив становится недействительным и занятая им память освобождается. 

В 26.05.2023 в 20:22, Юрий48 сказал:

ОЗУ = 20432 байта или 19.953125 килобайт, т. е. - влезает, но на самом, самом пределе.

Но расход стека наверняка не учитывается, отсюда и проблема - он выходит за границы и портит содержимое ОЗУ, предназначенное для статического хранения. Не храните слишком много статических массивов.

Share this post


Link to post
Share on other sites

В 27.05.2023 в 20:21, EdgeAligned сказал:

Наверно потому, что пытаетесь эту переменную изменять в коде?

Дело в том, что изначально была создана сложная структура указателей на эту переменную, которая (структура) на тот момент была удобна (несколько вложенных функций), но эта конструкция при const вызывала ошибку, с которой я не разобрался, и которая вот сейчас меня и ударила. Сейчас что либо менять смысла не вижу, но разбраться всё же надо. Но это уже в новом проекте.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...