[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3954915#p3954915"]стандартным вызовом. Разве это запрещено?[/uquote]С дуру и хрен сломать можно.
Добавлено after 1 minute 50 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=3954920#p3954920"]Вообще то я пользуюсь практикой SPL, не прибегая к ней самой. Там все выглядит именно так - проверка разрешения && проверка флага - сброс флага - обработчик.[/uquote]Куда полезней своей головой пользоваться.
STM32F030 ADC Handler CMSIS
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Реклама
Re: STM32F030 ADC Handler CMSIS
[uquote="КРАМ",url="/forum/viewtopic.php?p=3954917#p3954917"]Что не так?[/uquote]Имха - неопределённый порядок чтения volatile-регистров.
Хотя возможно тут зависит от компилятора....
Хотя возможно тут зависит от компилятора....
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32F030 ADC Handler CMSIS
jcxz, вы абсолютно правы. Правая часть && не будет выполнена, если левая false. Это значит чтения из ADC1->ISR не произойдёт. А такое чтение, для некоторых периферийных устройств может менять состояние флагов.
Код: Выделить всё
//void ADC_IRQHandler (void)
//{
// if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY))
MOV R0,#+1342177280
LDR R1,[R0, #+4]
LSLS R2,R1,#+31
BPL.N ??ADC_IRQHandler_0
LDR R1,[R0, #+0]
LSLS R2,R1,#+31
ITT MI
// ADC1->ISR = ADC_ISR_ADRDY;
MOVMI R1,#+1
STRMI R1,[R0, #+0]
//}
??ADC_IRQHandler_0:
BX LR ;; return
Re: STM32F030 ADC Handler CMSIS
[uquote="VladislavS",url="/forum/viewtopic.php?p=3954932#p3954932"]Правая часть && не будет выполнена, если левая false. Это значит чтения из ADC1->ISR не произойдёт. А такое чтение, для некоторых периферийных устройств может менять состояние флагов.[/uquote]
Я о чём и говорю. Поэтому думаю - или у ТС в свойствах проекта выставлено подавление варнингов, или он просто не обращает внимания на них при компиляции или регистры определены неверно (без volatile) или ...?
Я о чём и говорю. Поэтому думаю - или у ТС в свойствах проекта выставлено подавление варнингов, или он просто не обращает внимания на них при компиляции или регистры определены неверно (без volatile) или ...?
-
BlackKilkennyCat
- Собутыльник Кота
- Сообщения: 2905
- Зарегистрирован: Ср ноя 29, 2017 06:58:50
Re: STM32F030 ADC Handler CMSIS
А разве на это выдаются предупреждение? Возможное невыполнение части условия - стандартное поведение, о котором просто надо помнить.
- Реклама
Re: STM32F030 ADC Handler CMSIS
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3954954#p3954954"]А разве на это выдаются предупреждение? Возможное невыполнение части условия - стандартное поведение, о котором просто надо помнить.[/uquote]Лучше в начале ISR прочитать регистр флагов прерываний в локальную переменную и работать уже ней.
Да и не нужно многократно читать эти флаги (если обрабатывается несколько разными ветками алгоритма).
Да и не нужно многократно читать эти флаги (если обрабатывается несколько разными ветками алгоритма).
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32F030 ADC Handler CMSIS
[uquote="jcxz",url="/forum/viewtopic.php?p=3954938#p3954938"]Поэтому думаю - или у ТС в свойствах проекта выставлено подавление варнингов, или он просто не обращает внимания на них при компиляции или регистры определены неверно (без volatile) или ...?[/uquote]Не, всё у него верно определено. Описания регистров из CMSIS взяты. Компиляторы действительно молчат.


