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

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

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

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

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

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


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

В 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". Вот я и пишу: "Так понимаю, что в ОЗУ не влезаю. Картинок в интерфейсе много.  Можно ли что то в этом случае предпринять?

Изменено пользователем Юрий48

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


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

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

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


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

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

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


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

1 hour ago, Юрий48 said:

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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