Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 08:38:06

Там ещё один момент есть. Если закомментировать код чтения кнопки, то компилятор запросто может увидеть, что flag_btn будет всегда равен нулю и даже не будет проверять условие if(flag_btn) как бессмысленное. Но, конечно же, всякую хрень на форуме писать проще, чем листинг посмотреть.

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 15:42:30

> Но, конечно же, всякую хрень на форуме писать проще, чем листинг посмотреть.
точо-точно... бузить проще... :о)
а если листинг и LL - вообще вне понимания?! для чего тогда форум?! (это был риторический вопрос... и ответ не входит в тему топика :о)
подсказали - хорошо, обьяснили подробнее - замечательно... а вот бузить не надо! :о)

давай по теме?! я готов слушать вас всю свою биографию (с)

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 16:21:02

Можно подумать, это МНЕ надо :)

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 18:08:42

конечно, вот выговорились и ... на душе полегчало :о)

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 18:42:41

если коротко:
сделайте задержку на таймере и эта проблема исчезнет.

а с другой стороны Вы теперь догадываетесь, что один и тот же код может скомпилироваться по разному.
смотрите тело цикла
Код:
по исходному варианту:
  if(!cnt--) {flag_time=1; cnt=TIMER_CNT;}
  if(flag_time)
    {
     flag_time = 0;
     if(Read8) {LED_B_CLR;}else{LED_B_SET;}
     if(flag_btn)  { 
         flag_btn = 0;
         if(Read9) {LED_G_CLR;}else{ LED_G_SET;} }
    }
  if(Read0) {flag_btn = 1;}

без опроса кнопки: (flag_btn всегда =0, т.е. и проверять ее незачем)
  if(!cnt--) {flag_time=1; cnt=TIMER_CNT;}
  if(flag_time)
    {
     flag_time = 0;
     if(Read8) {LED_B_CLR;}else{LED_B_SET;}
    }

в первом варианте cnt ячейка памяти, чтобы ее проверять/менять надо сформировать адрес и по нему обратиться.
во втором - компилятор видит: суеты между заходами на проверку cnt мало - и делает cnt как регистр, а чтобы обращаться с регистром адрес не нужен, т.е. времени на проверить/поменять нужно в разы меньше.
вот и получается распил Дружбой2 одно время, а дисковой пилой другое.
но как говорил - лучше не пилить, а поставить будильник - будет строго по времени.

чтобы что-то начать понимать в листинге достаточно начальных представлений о ассемблере (любом)

как Владислав уже кому-то говорил:
имейте ввиду, если уровень оптимизации отличен от 0, у вашего кода есть соавтор.
(чуть-чуть перефразировал)

Re: stm32, тест, непонятка с чтением состояния пина

Ср мар 16, 2022 23:31:02

класс! вот это по нашему, по котовски! низкий поклон, добрый человек вам в пояс! а так-же всем кто помогает ползущему в столь тяжком деле :о)

> достаточно начальных представлений о ассемблере (любом)
ясен пень :о) обстоятельства не позволяют...

спасибо

Re: stm32, тест, непонятка с чтением состояния пина

Чт мар 17, 2022 00:15:21

по сути вопроса: почему сильно изменилось время выполнения при не сильном изменении кода.
ответил Владислав: какие-то переменные сменили свою дислокацию память/регистр.
я только взял на себя труд пожувать

Re: stm32, тест, непонятка с чтением состояния пина

Чт мар 17, 2022 02:14:01

для "начала" это самое главное :о) разложить все по полочкам :о)... муррр
ну а когда все "понятия" лежат там где надо, основы/база "правильно" сформированы и заложены то ... достаточно "ключевых слов", без обьяснения к.л. тонкостей, ведь так?! :о)
Ответить