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

 
 
> 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
Ответов
Integro
сообщение Jan 19 2015, 07:31
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(Alt.F4 @ Jan 17 2015, 10:04) *
if(FLASH_GetWriteProtectionOptionByte() != ~FLASH_WRProt_Pages0to1)


Что по вашему должна вернуть функция FLASH_GetWriteProtectionOptionByte?
Из описания функции: Returns the FLASH Write Protection Option Bytes Register value.
Вы же результат сравниваете с адресом, условие не выполняется, запись не проиходит как и ресет.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Jan 19 2015, 22:14
Сообщение #3


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

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



Цитата(Integro @ Jan 19 2015, 10:31) *
Что по вашему должна вернуть функция FLASH_GetWriteProtectionOptionByte?
Из описания функции: Returns the FLASH Write Protection Option Bytes Register value.
Вы же результат сравниваете с адресом, условие не выполняется, запись не проиходит как и ресет.
Это шутка? Где Вы видите сравнение с адресом и почему Вы решили, что условие не выполняется, если я написал, что все прогоняю в дебагере???
Go to the top of the page
 
+Quote Post
Integro
сообщение Jan 20 2015, 19:57
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460



Цитата(Alt.F4 @ Jan 20 2015, 01:14) *
Это шутка? Где Вы видите сравнение с адресом и почему Вы решили, что условие не выполняется, если я написал, что все прогоняю в дебагере???

Виноват, не те аргументы посмотрел. Тогда да, ситуация интересная, завтра попробую у себя воспроизвести, да и где-то был рабочий код.
Go to the top of the page
 
+Quote Post



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

 


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


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