ВходНаше всё Теги codebook PARTS Поиск Опросы Закон Вторник
2 марта
/1079372
Топик полностью
evgeniy1294 (22.02.2021 13:54, просмотров: 85) в ответ на Попробовала на своей плате - заработало, но не сразу. Сперва компилироваться не хотело, когда в SRAM1-2-3 что-то пишется или оттуда читается, причем сообщение компилятора невразумительное - типа "не могу инициализировать нулями секцию .bss". Исследование показало, что причина в ином - массивы, размещенные мной в SRAM1-2-3, имели нечетное число элементов uint16_t. Только после того, как удалось об этом догадаться, память заработала. В среде CubeMX оказалось необязательным - автор: Kceния
Во первых, вы должны знать, что тактирование любой периферии включается через регистры группы RCC с суффиксом ENR (Enable Register). Следующая запись эквивалентна вашей: 
RCC->AHB2ENR = RCC->AHB2ENR | RCC_AHB2ENR_SRAM1EN | RCC_AHB2ENR_SRAM2EN | RCC_AHB2ENR_SRAM3EN;

Дока на чип говорит, что значение регистра RCC->AHB2ENR после ресета 0, а значит и тактирование памяти отключено. Соответственно, если вы пихаете секцию bss в в эти области памяти, то их необходимо затактировать сразу после входа в ResetHandler. Иначе словите BusFault


"не могу инициализировать нулями секцию .bss" - звучит бредово, компилятор ничего нигде не инициализирует, может только запихнуть переменные в нужный диапазон адресов, обычно bss или data, к тому же F7 умеет невыровненный доступ к памяти. Четное/нечетное число элементов значения не имеет, линкер все равно сделает выравнивание по 4 байта. Скорее всего запорот скрипт линкера, он не может впихнуть все в секцию

Ответить
Ответы