Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как вернуться в главный цикл?


Как вернуться в главный цикл?

Сообщений 1 страница 16 из 16

1

Хочу задать еще один дурацкий вопрос. Вот например я из основного цикла зашел в 1 подпрограмму, из 1 подпрограммы например несколько раз в 2 подпрограмму, которая возвращала меня в 1 подпрограмму, и вот по условию первой (после определенных событий) подпрограммы мне надо вернуться в основной цикл. Как реализовать?

0

2

Возврат_в_главный_цикл:
    !ldi ZL, Low( Главный_цикл )
    !ldi ZH, High( Главный_цикл )
    !ijmp
  Return

0

3

Спасибо конечно старым знакомым))) Но не понятно как это применять в коде, ладно попробуем)))

0

4

Не.... Не получается... Искал примеры применения данных команд, но все на СИ а не на баском. Не могу придумать ничего.....

0

5

Скинь исходник на мыло.

+1

6

Скинул

0

7

В общем проблема так и не решена. Буду бороться дальше...

0

8

sasha_1973 все таки помог! Спасибо ему большое! Теперь остается привести код в порядок и все!

0

9

Трогать стек и делать произвольные переходы - нельзя!
Т.к. нужно четко понимать, что выход из подпрограмм происходит с освобождением стека, если переходить самому, то рано или поздно стек переполнится и начнет портить другие переменные в ОЗУ + тупой переход на нужный адрес программы не учитывает срабатывание прерываний (ещё некоторые функции могут использовать стек (мы же не знаем как автор баскома его использует)).

0

10

RDW написал(а):

Трогать стек и делать произвольные переходы - нельзя!

Обычно это и не нужно. Если писать программу по плану-алгоритму, какие то нестандартные финты  бывают не нужны.
Переходы типа Goto тоже не желательны, но они порой позволяют прилично ускорить программу. В программировании для PC без них лучше и понятней.

0

11

IgorL написал(а):

Обычно это и не нужно. Если писать программу по плану-алгоритму, какие то нестандартные финты  бывают не нужны.
Переходы типа Goto тоже не желательны, но они порой позволяют прилично ускорить программу. В программировании для PC без них лучше и понятней.

Иногда тоже они упрощают код, но неумелое использование как и в МК, может исказить содержимое стека. Стек очень часто используется и не только для перехода и возврата в процедуры / функции, но и для передачи аргументов в них, а так же для хранения локальных переменных.

0

12

Стеком можно оперировать только, если имеется полный контроль процессов в МК (т.е. писать на ASM или бесконечно дебажить код генерируемый баскомом, но это изврат/гимор).

0

13

решил написать сюда свой вопрос.

В чем отличие между:

DeclareSub XXX              'объявление подпрограммы
........                              'фрагменты кода
........
........
Call XXX                          'вызов подпрограммы
.........

и вот этим:

..........
GoSub XXX                     'переход к подпрограмме
..........

Ведь в обоих случаях мы уходим на подпрограмму и возвращаемся из нее по окончании. Тогда разница в них какая?

0

14

В первом случае, это не подпрограмма, а процедура. Во втором случае, это подпрограмма.
У процедуры в отличии от подпрограммы могут быть аргументы и локальные переменные.

0

15

Благодарю.
Сбила с толку строка из справочника М. Л. Кулиша.

0

16

Call и GoSub - нет разницы, кто как привык пользоваться.

Отредактировано RDW (2015-02-20 09:39:14)

0

Похожие темы


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Как вернуться в главный цикл?