Поместить адрес статичного метода в флешку тоже никаких проблем не вызовет. Память 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 и настраиваем её параметры так чтобы они соответствовали времянке обмена с индикатором. Естественно, перед этим проверив частоты работы микроконтроллера и его шин. Настраиваем примитивные операции чтения/записи, а затем уже рисуем. Идём от простого к сложному. А так у тебя столько неизвестных переменных, что можно до второго пришествия тыркаться.
Почитываю! По чуток чтобы каши не было. вот тебя все утро жду спать не ложусь) Анализатора у меня не ма к сожалению, я занимаюсь ремонтом пром оборудования, а контроллерами занимаюсь первую неделю к сожалению. Вот это сокращение мне очень нравиться! Его кажется даже понять стало легче, спасибо большое! Я тут от безысходности попробовал весь путь переменной сложить в один мой документ шутки ради, кажется тоже самое но оно заработало, появились цвета. И это очень странно.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения