[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
выход из подпрограммы
exersizzeДата: Четверг, 03.05.2012, 23:39 | Сообщение # 1
Группа: Администраторы
Сообщений: 723

Статус: Offline
Заметил одну особенность, если из подпрограммы выходить преждевременно по команде Return, то выполнение программы начнется, заново а не с того места в главном цикле, откуда эта подпрограмма была вызвана.
Глюк или оно так и задуманно, и как вернуться из подпрограммы в тоже самое место?

Вот кусок кода с которым работаю, если переменная А=2 тогда после выполнения условия нужно вернуться в основной цикл, не проверяя больше значение этой переменной. На деле получается что после вызова команды Return программа начинается выполняться с самого начала, а не с места вызова подпрограммы.
Code
Button:
  Timer1 = 0
  Start Timer1
  Backlight = 1

    If A = 2 Then
     A = 0
     If Tdispl <> Temp Then                    
       Temp = Tdispl
       Temp_eeprom = Temp                    
       Cls
       Lcd "Temp rec"
       Wait 1
     End If

     If Hdispl <> Hum Then
        Hum = Hdispl
        Hum_eeprom = Hum
        Cls   
   Lcd "Humidity rec"
  Wait 1
  End If
  Waitms 30  
  Gifr = 64  
  Return
  End If

  If A = 1 Then
   A = 2
   Hdispl = Hum
   End If

  If A = 0 Then
   A = 1
   Tdispl = Temp
  End If

  Waitms 30   
  Gifr = 64    
Return


 
shermanДата: Суббота, 05.05.2012, 08:56 | Сообщение # 2
Группа: Проверенные
Сообщений: 55

Статус: Offline
сам натыкался на такое, GOTO вам в помощь smile



Сообщение отредактировал sherman - Суббота, 05.05.2012, 08:56
 
exersizzeДата: Суббота, 05.05.2012, 11:30 | Сообщение # 3
Группа: Администраторы
Сообщений: 723

Статус: Offline
Cпасибо, таки использовал гото.
Но не понятно почему так происходит с return


 
LexResidentДата: Вторник, 22.03.2016, 15:17 | Сообщение # 4
Группа: Пользователи
Сообщений: 3

Статус: Offline
Прошло 4 года но всё равно дополню.
 Такое поведение не наблюдается при вызове подпрограммы по прерыванию.  С прерыванием по return возвращается как и положено в точку после прерывания. Если подпрограмма вызывается по goto, то по ретурну она начнётся с начала, что не есть хорошо. В этом случае лучше использовать gosub, он по ретурну выходит красиво, продолжит с места перехода на подпрогамму.
Пните если что не так написал smile


 
LexResidentДата: Вторник, 22.03.2016, 15:17 | Сообщение # 5
Группа: Пользователи
Сообщений: 3

Статус: Offline
Прошло 4 года но всё равно дополню.
 Такое поведение не наблюдается при вызове подпрограммы по прерыванию.  С прерыванием по return возвращается как и положено в точку после прерывания. Если подпрограмма вызывается по goto, то по ретурну она начнётся с начала, что не есть хорошо. В этом случае лучше использовать gosub, он по ретурну выходит красиво, продолжит с места перехода на подпрогамму.
Пните если что не так написал smile


 
  • Страница 1 из 1
  • 1
Поиск: