Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
Вызов процедур или чего то там
tolyan249 Дата: Ср, 05.02.2014, 14:29  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 189
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Есть подрограмма

main

gosub prt1

delayms 100

...................

....................

gosub prt50

goto main

prt1:

a=a+1

delayms 100

return

вызываю подпрограммы prt от 1 до 50  ,доходит до 15 и зависает и никуда дальше не идет,заремил эти 15, доходит до 31 и опять виснет не идет дальше никуда. такое ощщущение что доходит до 15 и все ,может много нельза вызывать процедур или какоето определенное количество, где то читал что не желательно делать много вызовов через return  ,что теряет толи адрес что бы вернуться туда откуда был вызов.     Кто что знает об этом, кто что посоветует.

вот нашел по справке у Анатолия Медведева

Компилятор PROTON+IDE позволяет использовать в программе любое количество команд GoSub, но в связи с тем, что микроконтроллеры c 14-разрядными ядрами имеют только 8-ми уровневый стек возврата адреса, допускается вложенность, один в другой, только не более

8-ми операторов GoSub. Кроме этого, очередь библиотек подпрограмм компилятора

может использовать только 4 уровня. Поэтому, никогда не используйте больше 4 вложенных операторов GoSub в одной подпрограмме.

В микроконтроллерах с 16-разрядными ядрами используется стек возврата адреса с 28 уровнями, поэтому вложенность операторов GoSub может достигать 28-ми. При этом необходимо помнить, что каждая вложенная подпрограмма должна заканчиваться оператором возврата из подпрограммы Return.


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Ср, 05.02.2014, 14:58
ЯНДЕКС Дата: 05.02.2014
MiXaS Дата: Ср, 05.02.2014, 16:38  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Приведите код целиком. Так ничего не понятно. Какой камень? И т.д. Есть такое понятие как стек, при его переполнении возможно то, что Вы написали, но такое может произойти если попадаешь через gosub в метку, а в этой метке ещё gosub в другую метку и так на 16F только до 8, на 18f до 31 метки. Код свой дайте, а дальше поговорим
tolyan249 Дата: Ср, 05.02.2014, 17:13  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 189
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Ясно понятно придеться идти через GOTO.
 
Спасибо за помощь.


если знаешь,помоги.
MiXaS Дата: Ср, 05.02.2014, 18:35  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата tolyan249 ()
придеться идти через GOTO.


Нерекомендуется часто использовать GOTO. Киньте код, там возможно есть ошибка. Посмотрите еще команду Branch и BranchL может они Вам подойдут.
tolyan249 Дата: Ср, 05.02.2014, 19:40  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 189
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

переделал через  goto все работает но увеличился размер кода.
 
и еще вопрос как можно использовать RANDOM  что бы выбор был из 50 случайный выбор а в описании там по другому
 
Синтаксис:
Seed Value
Команда Seed производит дополнительную настройку генератора случайных чисел для того чтобы команда Random сгенерировала ещё более случайный результат.
Параметр Value - может быть переменной, константой или выражением. Он может принимать значения от 1 до 65535. Наилучший результат удается получить при $0345.

Спасибо за помощь ,посмотрю про
Branch и BranchL
 
Просто есть типа процедур ,я их и вызывал посредсвом  GOSUB  а в тех процедурах тоже есть вызовы GOSUB,             вот и затыкался. теперь мне нужно сделать случайный выбор из 50 а не из 65535,  как это сделать пока не знаю может кто подскажет.
 
Спасибо еще раз за ответы советы и помощь огромное Спасибо.

Добавлено (05.02.2014, 19:40)
---------------------------------------------
BranchL

redim, [prg1,prg2,prg3,prg4,prg5,prg6,prg7,prg8,prg9,prg10,prg11,prg12,prg13,prg14,prg15,prg16,prg17,prg18,prg19,prg20, prg21,prg22,prg23,prg24,prg25,prg26,prg27,            
prg28,prg29,prg30,prg31,prg32,prg33,prg34,prg35,prg36,prg37,prg38,prg39,prg40,prg41,prg42,prg43,prg44,prg45,prg46,prg47, prg48,prg49,prg50]
 
мне нужно что бы переменная    redim изменялась случайно от  1 до 50
 
как это можно сделать?
 
и еще как это предложение длинное записать в несколько строк а то сделал в одну строку в редакторе protonделаю как тут написано так начинает ругатся что ошибка.


если знаешь,помоги.
ivan_fd Дата: Ср, 05.02.2014, 20:26  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В несколько строк так:

Код
Var1 = LookUp Var2,[1,2,3,_  
            4,5,6,7,8]

Добавлено (05.02.2014, 20:26)
---------------------------------------------
Генерация случайного числа от m до n.

x = (Random // (n - m + 1)) + m


tolyan249 Дата: Чт, 06.02.2014, 06:50  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 189
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Спасибо за ответы советы и помощь.

если знаешь,помоги.
  • Страница 1 из 1
  • 1
Поиск: