Поместить адрес статичного метода в флешку тоже никаких проблем не вызовет. Память SRAM сама по себе не портится, а если случилось страшное и она поломалась - не важно, что там было вектора прерываний или просто ваши переменные - в подавляющем большинстве случаев дорога в hard_fault.
В какой hard_fault??? У вас таблица прерываний порушилась, где прописаны все вектора в том числе и вектор hard_fault-а. А значит дорога лежит не в обработчик HF, а в зависон. Причём глухой зависон - без признаков жизни и причины ошибки.
Невозможность диагностирования - тоже дудки, стек все равно останется на месте.
И какой толк от этого стека если при разрушенной таблице прерываний там будет 100500 входов в обработчик HF и переполнение этого самого стека из-за этих входов?
Чтобы похерить таблицу векторов во флеше достаточно 4 строк кода. Если у вас есть бутлодер, эмуляция eeprom или любая другая работа с флешкой - достаточно ошибиться в одной переменной. Так что нет, не несет.
Если у вас код свободно пишет туда, куда писать не должен - пора осваивать memory protection unit. Это будет надежнее. Вы так говорите, будто у вас в контроллере живут демоны, которые только и ждут, чтобы вам программу искалечить. Нет такого, каждая инструкция попадает по вашей воле и с вашего разрешения. Если стреляют в ногу - то это вы стреляете, а не кто-то другой. Если вы не контролируете стрельбу себе в ногу и поэтому боитесь играть с памятью - вы прикладной программист, что вы делаете в baremetal?
_________________ После нас - хоть потоп (с) Лойсо
Чтобы похерить таблицу векторов во флеше достаточно 4 строк кода. Если у вас есть бутлодер, эмуляция eeprom или любая другая работа с флешкой - достаточно ошибиться в одной переменной. Так что нет, не несет.
Ну да - рассказывать сказки Вы - мастер. Как будто тут никто никогда не отлаживал код в микроконтроллере. А теперь напрягаем память и вспоминаем: сколько раз за свою практику встречали такие ошибки, которые разрушали содержимое ОЗУ? А сколько раз встречали ошибки, разрушающие флешь МК? И перестаём высасывать из пальца небылицы лишь бы только поспорить....
Я к чему это, половина получается регистров забивается по волшебному а половина в лоб?
Почему "по волшебному"? Должно забиваться в соответствии с характеристиками памяти. Я FSMC правда вроде не программировал, но FMC - пользовал. Если разобраться - там всё понятно. Правда пользовал по мануалу, без всяких кубов.
Вот и я пытаюсь без библиотек реализовать в этом и запара. Что то странно не?
Добавлено after 1 minute 46 seconds: По волшебному. потому что эти две строки летают по дефайнам в кругаля библиотек HAL, кажутся абсолютно пустыми но без них не работает ни чего.
Добавлено after 23 minutes 48 seconds: MWID равен 0х3 в табличке, но по рефенсу нет у него таких значений
Bits 5:4 MWID[1:0]: Memory data bus width. Defines the external memory device width, valid for all type of memories. 00: 8 bits 01: 16 bits (default after reset) 10: reserved 11: reserved
Добавлено after 20 minutes 29 seconds: Я в своем проекте пытаюсь посмотреть регистры, он говорит что таких регистров нет, как так может быть?
Я в своем проекте пытаюсь посмотреть регистры, он говорит что таких регистров нет, как так может быть?
Каких конкретно регистров нет? BCRx и BTRx на картинке видно. BWTRx наверняка чуть ниже должны быть.
Добавлено after 4 minutes 29 seconds: Раз у тебя через HAL заработала шина, то запусти программу, дай ей поработать и останови. Сними показания трёх регистров: BCR, BTR и BWTR для своего банка. Расшифруй их значения и осмысли что же там наконфигурировано.
Это рабочий пример, мой отдельно проект, ну черт с ним, он вроде почти заработал. Пытаюсь без файла FSMC.h записать это дело, пока он ругается на мою писанину(
FSMC_Bank1->BTCR = 0x0000FFFF; FSMC_Bank1E->BWTR = 0xFFFFFFFF; говорит выражение должно быть изменяемым значением
Блин, ну я же уже писать тебе об этом!!! Массив там!!!!
Как я понял, так мы полностью забиваем регистры FSMC FSMC_Bank1->BTCR[1] = 0x0000FFFF; FSMC_Bank1E->BWTR[1] = 0xFFFFFFFF; Но походу чего то не хватает
User error: Memory access error: Trying to write outside linked memory at address 0xa0000004 when PC is 0x37e. Check your memory configuration. Unable to execute: driver error. After the error occurred, the program counter (PC) was 0x37e.
Добавлено after 12 minutes 28 seconds: Мне удалось его пнуть и он показывает старую картинку, которая была отрисована рабочим примером. Но мое он не выводит. Что характерно, в моем проекте где подключен FSMC.h - FSMC_Bank1->BTCR[1] = 0x0000FFFF; FSMC_Bank1E->BWTR[1] = 0xFFFFFFFF; это работает, и больше ни чего не надо. Хотя они обращаются в библиотеку stm32f412zx.h А если использовать без fsmc.h - ошибки эти про память
Во-первых, значения "все FF" очень странные. Я в них не верю. Во-вторых, почему BTCR[1] и BWTR[1]? Посмотри в RM раздел "11.6 FSMC register map" и найди для нужных BCRx и BTRx правильные индексы массивов. Блин, руки бы им поотрывать за такое определение. Может даже проще переписать определения регистров на соответствующие RM.
И ещё раз напоминаю про RCC_AHB3ENR_FSMCEN. Тебе эти буквы о чём-нибудь говорят?
Добавлено after 11 minutes 11 seconds: Вот так понятней будет?
Есть какой то способ гарантировано правильно глянуть что они туда записывают?
Не знаю как у Вас описываются эти регистры, но у меня они описаны как структура. И я просто вписываю эту структуру в окно "Watch" отладчика и вижу там содержимое регистров.
И отрисовка медленная, весь экранчик 240х240 за пару секунд
Я кажется повторяюсь, но это важно. Берём в руки логический анализатор, подключаемся на шину FSMC и настраиваем её параметры так чтобы они соответствовали времянке обмена с индикатором. Естественно, перед этим проверив частоты работы микроконтроллера и его шин. Настраиваем примитивные операции чтения/записи, а затем уже рисуем. Идём от простого к сложному. А так у тебя столько неизвестных переменных, что можно до второго пришествия тыркаться.
Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению. Вот это сокращение мне очень нравиться! Его кажется даже понять стало легче, спасибо большое! Я тут от безысходности попробовал весь путь переменной сложить в один мой документ шутки ради, кажется тоже самое но оно заработало, появились цвета. И это очень странно.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения