Здравствуйте всем, У меня вопрос такой имеется плата stm32f407zgt6 и дисплей ili9488 без тача. Не могу подружить. Использую софт 1. Стм32кубеМХ 2. Touchgfx 3. Stm32cubeIDE
Никто не подскажет попроще путь? Я только начинаю разбираться с этим со всем)
Помогите люди добрые Работают в Keil, отладка/прошивка через ST-LINK V2. В какой-то момент, прошивать стало всю флешь, от начала и до конца, а не только то, что использовано в программе. После чего так стало не помню, точно менял .sct чтобы распихать стек и мелкие переменные в CCRAM, а большой массив в остальную RAM. Каждый раз при прошивке перетирать всю память тоскливо, сама программа пока чуть больше 4кБ из 500. Не пойму куда копать, то ли в sct, то ли в настройках самого ST-LINK, то ли в компилятор (чтобы он в конце HEX-файла нули не писал)...
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Массив 120к, я заметил что вроде после его добавления такое стало, сейчас попробовал убрать +ZI из scatter файла, но это не повлияло, да и пишет во флешку явно больше 120к, там прямо до конца идет. И в Target поставил галки Noinit, не влияет.
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Легло вроде все верно, но смущает что регионы RW_IRAM в скаттере как бы включены в LR_IROM1 судя по скобкам, и в map файле такая строчка получилась: " Load Region LR_IROM1 (Base: 0x08000000, Size: 0x0001f05c, Max: 0x00080000, ABSOLUTE)", т.е. там и код и все переменные и массив 120к. И в конце в итоге: Total RO Size (Code + RO Data) 4720 ( 4.61kB) Total RW Size (RW Data + ZI Data) 122348 ( 119.48kB) Total ROM Size (Code + RO Data + RW Data) 127068 ( 124.09kB) т.е. получается весь образ 127к, углядел адрес в момент конца загрузки, похоже на правду +-
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
... Каждый раз при прошивке перетирать всю память тосклив ...
Keil, STM32G. Tо же самое произошло, когда ввел одну константу в эмулированной флэш как EEPROM (в данном случае: double).
Код:
#define EEPROM_BASE_ADDR 0x0801F800 // start address of the last FLASH page (page 63) #define EEPROM_FREQ_CALIB_COEFF_ADDR 0x00 const double EEPROM_FREQ_CALIBR_COEFF_DOUBLE __attribute__((section(".ARM.__at_0x0801F800"))) = 0.0;
и
Код:
Program Size: Code=6090 RO-data=522 RW-data=416 ZI-data=1648
Из-за медленной записи МК по всей памяти (и невозможности найти быстрого решения) зaменил метод: (проверка пуста ли ячейка, если да, то запись по умолчанию, если нет: прочитать содержимое). Но сама причина интересная.
Последний раз редактировалось veso74 Ср дек 03, 2025 15:28:05, всего редактировалось 1 раз.
#define EEPROM_BASE_ADDR 0x0801F800 // start address of the last FLASH page (page 63)
Тут я бы понял, даже если программа мелкая и кончается адресом 0x08000100, то программатор наверно прошьет все от 0х80000000 до 0x0801F800, хоть там и нули с 100го адреса, но в 0x0801F800 - ячейка EEPROM, т.е. та же флешь. Но у меня-то кода 4к а дальше только чистый RAM, я даже в скаттере его вынул из LR_IROM1, теперь в map файле строчка поменялась на: Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00001270, Max: 0x00080000, ABSOLUTE), но все равно есть вторая: Load Region ER_IRAM (Base: 0x20000000, Size: 0x0001ddec, Max: 0x00020000, ABSOLUTE) и в итоге весь образ опять 127к, надо как-то указать что этот кусок в образ ROM не входит, но я никак не могу найти где и как это делается.
Пока ехал домой, подумал, может косяк в том что я память под переменные резервирую через space?
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Что может быть не так? АЦП-ДМА после завершения передачи зависает в прерывании, это я так понял. По переводу-"получено неожиданное прерывание", но так и не понял что это значит. В описаниях режимов у F407 и F103 для моего случая не нашел. Но 407-й работает, а 103-й виснет.
надо как-то указать что этот кусок в образ ROM не входит, но я никак не могу найти где и как это делается.
Блин, нашел, просто в директиву AREA надо было NOINIT вписать Вопросов не возникало пока я большой массив не задействовал, раньше переменные не сильно объема добавляли и я не замечал что прошивка долго идет...
_________________ Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
В прерывании я изменял переменную и использовал в обработке данных. Но проблема для меня в том, почему виснет при разрешении прерывания. И не важно пустая функция или нет.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения