32-битных значений. При записи второго значения - hardfault. ДШ утверждает что такое возможно в случае отсылки не правильной последовательности. Есть другие варианты, кроме этого объяснения? Последовательность стандартная напутать с ней сложно.
Код в студию...
if ((FlashMCU->CR & MCU_FLASH_CR_LOCK) != 0) /* (2) */ { FlashMCU->KEYR = 0x45670123; FlashMCU->KEYR = 0xCDEF89AB; } Код из ДШ
Вообще фигня, должно работать... Может, явно запихнуть их в uint32? Я в плане, кто его знает, вдруг оно там пытается перед записью в регистр битами играться, тогда знак может уплыть не туда (вторая константа в signed int меньше нуля)...
похоже интересную мысль Вы сказали, посмотрел ассемблер а там вот: FlashMCU->KEYR = 0x45670123; FlashMCU->KEYR = 0xCDEF89AB; 8000f4c: 4b09 ldr r3, [pc, #36] ; (8000f74 <CheckFontOffsetsTable+0x5c>) 8000f4e: 6053 str r3, [r2, #4] при этом константа 8000f74: cdef89ab .word 0xcdef89ab а первой то константы 0x45670123 и нет
Регистры объявлены как volatile?
Нет, это структура на которую объявлен указатель
Так ыть должны быть... 😒
Сами регистры не объявить, отдельно, только в составе макросов. Я раньше так и делал и никогда с таким способом оптимизации не встречался. Захотелось красиво сделать, тьфу блин.... на такую красоту
Вот и ошибка. Есть FLASH в CMSIS - его и используйте. И будет всегда красиво.
Да чего вдруг бы, там тоже такая же фигня даже еще хуже накручена. Не вижу смысла в этом оверхеде
С того что работает. Раз нет смысла - делайте как хотите.
Это именно тот случай когда я пошел на поводу того как это сделано в CMSIS
Значит не туда пошли. У них стоит __IO поэтому и работает
Ладно не буду флеймить, но код который поражадает st-шные CMSIS - то еще барахло
По сравнению с хал от стм32 - там 0 оверхеда
Как твой FlashMCU объявлен?
есть рабочий код на f030 для работы с флеш надо?
Спасибо! Но кайф в другом, велосипеды лучшая вещь в мире 😊
Как указатель на структуру, регистровый указатель.
можете крутить свой велосипед а посмотреть, как сделано на cmsis быстрее разберётесь
сильное заявление. Ты код покажи
А что этого никто не видел что ли? Не думал что Америку открываю.
ты главное не гори, если у тебя нет там __IO, как здесь и/или volatile - оптимизатор поднасрать может с компилятором. Что собственно он и сделал
раз пять пересмотрел, рифмы не нашел
Обсуждают сегодня