реклама на сайте
подробности

 
 
> IAP программирование Option Bytes (STM32F1)
Alt.F4
сообщение Jan 17 2015, 07:04
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Здравствуйте.
Создавал эту тему в разделе для начинающих, но там никто с подобным не сталкивался. Работаем по примерам от ST:
Код
if(FLASH_GetWriteProtectionOptionByte() != ~FLASH_WRProt_Pages0to1) {
FLASH_Unlock();
FLASH_EraseOptionBytes();
FLASH_UserOptionByteConfig(OB_IWDG_SW, OB_STOP_RST, OB_STDBY_RST);
FLASH_EnableWriteProtection(FLASH_WRProt_Pages0to1);
NVIC_SystemReset();}

Данный код работает как надо, т.е. по итогу мы получаем защиту от записи 0 и 1 страницы и прописанные User Bits, но смущает одна вещь.
В дебагере IAR после NVIC_SystemReset(); указатель не прыгает в Reset, а продолжает дальше выполнение кода, почему?

А теперь самый прикол, если написать вместо:
if(FLASH_GetWriteProtectionOptionByte() != ~FLASH_WRProt_Pages0to1)
любое другое условие,например:
if(FLASH_GetWriteProtectionOptionByte() != FLASH_WRProt_Pages0to1) или такое u8 k=0; if(!k),
то на NVIC_SystemReset(); дебаг прекращается и мы ловим защиту от чтения (причем защита от записи и User Bits при этом не устанавливаются).
Как это можно объяснить?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alt.F4
сообщение Jan 20 2015, 15:53
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Заснял 2 минуты, вот ссылка на видео.
1. Дебаг по функциям библиотеки, показываю, что защита от записи не установилась, а все остальные позиции Option Byte прописались как надо.
2. Дебаг того же самого по дизассемблеру подвисает на самом интересном месте, но по итогу мы получаем тоже самое.
3. Пишем любое другое условие и ловит защиту от записи, причем без изменения других позиций Option Byte, магия?
Спасибо.

P.S. Чтобы обнулить Option Byte, необходимо изменить состояние Read Protection, поэтому в ST-Link Utility я сперва ее устанавливаю и затем сбрасываю.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 21 2015, 07:28
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alt.F4 @ Jan 20 2015, 17:53) *
Заснял 2 минуты,
Посмотрел. Ничего не понял. Вы двигаете мышь быстрее, чем я соображаю. Содержимого регистров не видно, содержимое памяти вы тоже не смотрите, ходите по-прежнему по Сишному исходнику. У меня создается стойкое впечатление, что разобраться вы не хотите. Понятно же, что ваше условие на ход программы напрямую не влияет, значит причина разного поведения где-то глубже. Чтобы ее понять надо пройти по дизассемлированным командам, наблюдая за содержимым регистров и анализируя смысл каждой ассемблерной команды. Просто проскакав по вызовам библиотечных функций найти ее невозможно.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016