Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запись во Flash STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Nosaer
Добрый день
Пытаюсь записывать свои данные во Flash на STM32f0xx, при компиляции выдает кучу ошибок по типу:

Цитата
ANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6407E: Sections of aggregate size 0x40 bytes could not fit into .ANY selector(s).
ANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6406E: No space in execution regions with .ANY selector matching iusefp.o(.text).


Код
    HAL_FLASH_Unlock();
        
        FLASH_EraseInitTypeDef EraseInitStruct;
        EraseInitStruct.PageAddress = 0x08004000;
        EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
        EraseInitStruct.NbPages = 1;
        uint32_t SectorError = 0;

        if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK)
            {    
                    HAL_FLASH_Lock();
            }

        HAL_FLASH_Unlock();
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08010000, AHReady);
        HAL_FLASH_Lock();

Пробовал менять адрес для записи, на разные области памяти. Ситуация вообще не меняется
Собственно ругается на строки, где я передаю адрес для записи(стирания)
HardEgor
На сайте keil или интернете читали об ошибке?
Nosaer
Читал. Если я правильно понял, то ошибка обычно возникает когда значение IRAM меньше, чем на самом деле память у контроллера.
В своем случае с 0x1000 поднимал до 0x5000 на вскидку, пробовал подставить адрес из нового диапазона. Ошибки все те же.
HardEgor
Цитата(Nosaer @ Aug 21 2017, 19:03) *
Читал. Если я правильно понял, то ошибка обычно возникает когда значение IRAM меньше, чем на самом деле память у контроллера.
В своем случае с 0x1000 поднимал до 0x5000 на вскидку, пробовал подставить адрес из нового диапазона. Ошибки все те же.

Вы же пишите во флэш, причем здесь ОЗУ?
И как можно навскидку поднимать IRAM, вдруг по этим адресам её нет, у вас точно в чипе есть 20 Кбайт? sm.gif
Видимо 0x08010000 вылетает за размер флэша прописаного в проекте, у вас в чипе точно больше 32 КБайт?
Для уточнения смотрите в референс мануал, раздел "Memory map and register boundary addresses".
Nosaer
В плане адреса, согласно мануалу он существует. К тому же я практически методом перебора уже перепробовал всевозможные адреса
Нажмите для просмотра прикрепленного файла
amiller
Цитата(Nosaer @ Aug 22 2017, 07:11) *
В плане адреса, согласно мануалу он существует. К тому же я практически методом перебора уже перепробовал всевозможные адреса
Нажмите для просмотра прикрепленного файла

Простите, а где Вы это увидели?
На приведенной картинке видно, что flash расположена 0x08000000 - 0x08007FFF.
А Вы обращаетесь по адресу 0x08010000, что за пределами.
Может проблема в подсчёте ноликов?
Nosaer
Код скопировал скорее всего когда пробовал методом перебора добиться отсутствия ошибки, извиняюсь, не доглядел. В основном пытаюсь писать во флеш по даташиту. И как уже писал выше, куда только пробовал не писать.
Сейчас заметил, что при включении оптимизации(а она у меня отключена), компилируется без ошибок. Но в память все равно не пишет.
sadat
Берём нормально работающий пример из библиотек, проверяем, что работает, а тогда только что-то правим.
Ведь, когда у большинства всё работает : стирается и пишется, то, очевидно, что что-то не так с руками, а не глюк процессора.
И, если бы каждый из нас создавал по этому поводу тему - сотни страниц гарантированы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.