STM32F103ZE - Программы провалов больше 150 тыс

Gasparobr
Чт 13 сентября 2018 г., 17:20
Привет.

У меня проблема с использованием программы, которая превышает 150 тыс. В STM32F103ZE (у которых 500K).

Когда я компилируюсь и отправляю программу, она запускается идеально (загрузка 0 в режиме загрузки). Когда я помещаю загрузку 0 в режим запуска, он перестает работать.

Если я сокращаю свою программу программы до менее чем 150 тыс., Это работает в обоих режимах.

Может кто -нибудь мне помочь?

Эта работа:
O Sketch USA 148828 байт (28%) de espaço de armazenamento para. O Máxixo Säo 524288 байт.
Variáveis ​​globais usam 14016 Bytes de Memória Dinâmica.

Это не работает
O Sketch USA 150150 байт (29%) de espaço de armazenamento para. O Máxixo Säo 524288 байт.
Variáveis ​​globais usam 14016 Bytes de Memória Dinâmica.

AG123
Чт 13 сентября 2018 г. 18:03
Это звучит немного странно, как будто вы устанавливаете Boot0 и перезагрузите доску, он должен просто ждать ввода на UART (я.эн. он ждет загрузки программы)

Gasparobr
Чт 13 сентября 2018 г. 18:26
Да. Но после загрузки автоматического запуска программы. И в этом забеге, после загрузки, это работает.

Но если я вставлю в режим запуска (загрузка 0) и сбрось его прекратить работу.

AG123
Чт 13 сентября 2018 г., 19:03
Что ж, из этого невозможно сказать, но есть такие инструменты, как Arm-None-Eabi-objdump (это должно быть в ваших каталогах компилятора Arm-GCC-None-Eabi).

Вы можете попытаться запустить objdump в файле ELF, используя различные параметры E.глин. -h или -t и т. Д. И взгляните на то, где сегменты отображаются, E.глин. Вместо этого в Flash составлены некоторые глобальные переменные в Flash?

Глобальные / статические переменные обычно должны жить в .сегмент BSS и должен быть сопоставлен с областями SRAM. Если переменные нанесены на карту, скажем в .Текст, который является памятью программы, и это Flash, любая попытка записать в переменную сбой программы

(Кстати, я подозреваю, что перемычка или булавка могут не быть в конце концов, если вы устанавливаете Boot0 каждый раз, когда перезагружаете доску.)

Эдогальдо
Чт 13 сентября 2018 г., 19:12
Вы уверены, что компилируете и установите программу для запуска @0x08000000?

Gasparobr
Чт 13 сентября 2018 г., 19:57
Дело в том, что если программа меньше 150 тыс.

Да.

Загрузка кода до 0x08000100 zip -FF Corrupted.zip --out New.zip

Gasparobr
Чт 13 сентября 2018 г., 20:01
[AG123 - Чт 13 сентября 2018 г., 19:03] - Что ж, из этого невозможно сказать, но есть такие инструменты, как Arm-None-Eabi-objdump (это должно быть в ваших каталогах компилятора Arm-GCC-None-Eabi).

Вы можете попытаться запустить objdump в файле ELF, используя различные параметры E.глин. -h или -t и т. Д. И взгляните на то, где сегменты отображаются, E.глин. Вместо этого в Flash составлены некоторые глобальные переменные в Flash?

Глобальные / статические переменные обычно должны жить в .сегмент BSS и должен быть сопоставлен с областями SRAM. Если переменные нанесены на карту, скажем в .Текст, который является памятью программы, и это Flash, любая попытка записать в переменную сбой программы

(Кстати, я подозреваю, что перемычка или булавка могут не быть в конце концов, если вы устанавливаете Boot0 каждый раз, когда перезагружаете доску.)
Когда я перезагружаюсь, и Boot0 "включен", он просто ждет uart, это нормально. Но после того, как я загрузил код (без сброса нашего изменения Boot0).

Ошибка происходит только когда я ставлю загрузку 0 в режим запуска и сброс после этого, и программа больше 150 тыс.

Эдогальдо
Чт 13 сентября 2018 г. 20:07
Нет, то есть то, что в «режиме« запустить »MCU ожидает эскиза @ 0x08000000 (или 0x20000000, если загрузка из оперативной памяти), любой другой адрес не поддерживается.
Таким образом, аномалия заключается в том, что <150K Sketch работает @0x08000100 в «Режим запуска»...

Gasparobr
Чт 13 сентября 2018 г., 20:23
[AG123 - Чт 13 сентября 2018 г., 19:03] - Что ж, из этого невозможно сказать, но есть такие инструменты, как Arm-None-Eabi-objdump (это должно быть в ваших каталогах компилятора Arm-GCC-None-Eabi).

Вы можете попытаться запустить objdump в файле ELF, используя различные параметры E.глин. -h или -t и т. Д. И взгляните на то, где сегменты отображаются, E.глин. Вместо этого в Flash составлены некоторые глобальные переменные в Flash?

Глобальные / статические переменные обычно должны жить в .сегмент BSS и должен быть сопоставлен с областями SRAM. Если переменные нанесены на карту, скажем в .Текст, который является памятью программы, и это Flash, любая попытка записать в переменную сбой программы

(Кстати, я подозреваю, что перемычка или булавка могут не быть в конце концов, если вы устанавливаете Boot0 каждый раз, когда перезагружаете доску.)

Этот код не работает => -rw-r--r--@ 1 jcw staff 625504584 Nov 15 12:22 4.zip -rw------- 1 jcw staff 625505305 Nov 15 12:22 New.zip

Gasparobr
Чт 13 сентября 2018 г., 20:33
[Эдогальдо - Чт 13 сентября 2018 г., 20:07] - Нет, то есть то, что в «режиме« запустить »MCU ожидает эскиза @ 0x08000000 (или 0x20000000, если загрузка из оперативной памяти), любой другой адрес не поддерживается.
Таким образом, аномалия заключается в том, что <150K Sketch работает @0x08000100 в «Режим запуска»...
Я получил это! Но я думаю, что при загрузке программного обеспечения напишите 0x08000100 ("Написал адрес 0x08000100 (0.17%) " ) загружается до 0x08000000. Я думаю, что написал неправильно о адресе, было установлено на 0x08000100. Он был установлен на 0x08000000.

Эдогальдо
Чт 13 сентября 2018 г., 20:44
Большая путаница..
Убедитесь, что вы компилируете и устанавливаете для адреса 0x08000000, он должен работать в зависимости от своей длины.

AG123
Чт 13 сентября 2018 г., 20:47
AN2586 Примечание к примечанию Начало работы с разработкой оборудования STM32F 10xxx
https: // www.ул.com/content/ccc/resource ... 164185.PDF
Page 15 Раздел 3.1 Выбор режима загрузки
-rw-r--r--@ 1 jcw staff 625504584 Nov 15 12:22 4.zip -rw------- 1 jcw staff 625505305 Nov 15 12:22 New.zip

Стивестронг
Пт 14 сентября 2018 12:12
Я скорее предполагаю, что это что -то не так с вашим кодом.
Что именно означает «это не работает»? Вы выводите данные в любом последовательном порту?
Какой IDE вы используете? На какую ОС?

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