Функция на Proton - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Функция на Proton (Возможно ли?)
Функция на Proton
MasterPic Дата: Пн, 01.11.2010, 14:49  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Здравствуйте все!
Вопрос ко всему миру!
Возможно ли в Proton замутить что-то типа фунции, возвращающей какое-то значение? Это относится и к PBP. Там одно и то же, в принципе. DalexV, может, вы подтолкнете в нужном направлении? В рыбе ведь реализуются функции? Может, имеет смысл подключать какие-то библиотеки? Или еще что? Любители basic для pic присоединяйтесь к активному обсуждению!
У кого есть какие идеи?
ЯНДЕКС Дата: 01.11.2010
DAlexV Дата: Пн, 01.11.2010, 15:13  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (MasterPic)
DalexV, может, вы подтолкнете в нужном направлении?
smile smile smile
Как вариант:
есть переменная А(число), есть переменная В(результат функции)

a=15 //выставляем значение
gosub Func // вызываем функцию
loop: // зависаем
goto loop

Func:
// внутри делаем что требуется, результат в итоге в переменной b
b=a*2+a
return

crazy


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
MasterPic Дата: Пн, 01.11.2010, 15:20  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

А зачем зависание? Это больше похоже на вызов подпрограммы. smile
DAlexV Дата: Пн, 01.11.2010, 15:30  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (MasterPic)
Это больше похоже на вызов подпрограммы

да нет, если бы не было строчки
loop: // зависаем
goto loop

то после строки gosub Func следующая команда это метка Func: и т.д. а в конце return
Если при вызове gosub Func после того как барсик увидет return, он вернется следующий оператор за gosub(вернется обратно)
далее снова пройдется по вычислениям и снова нарвется на return. Не зная куда ему возвращаться, он поведет себя просто непредсказуемо. Хотя сам барсик по идее должен дать ошибку.


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
DAlexV Дата: Пн, 01.11.2010, 15:41  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Но не стоит переусерствовать с gosub и return. Есть такое понятие как стек. При вызове return в него записывается адрес возврата по return. Cntr сам по себе не безразмерный (от 8 до 16 байт если не ошибаюсь). Если его переполнить(8 раз вызвать gosub), то на 9 вызов программа начинает себя вести неадекватно. Плюс какая то бяка была если вызов подпрограммы находится в 1 странице памяти, а подпрограмма находится во второй(и наоборот). Это правило запомнил еще когда программировал на ASM и актуально оно к 16 линейки PIC ов. В 18 таких проблем вроде нет, но неизвестно какой код сформирует барсик(учтено ли это там)
P/s. Открыл Хелибака и прочитал следующее:Компилятор PBP ограничен четырьмя уровнями вложенности. Это значит что в программе можно использовать не более четырех команд gosub одновременно


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Пн, 01.11.2010, 15:46
MasterPic Дата: Пн, 01.11.2010, 16:04  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Нет, ну все-таки - то, что вы предложили - не более чем вызов подпрограммы с возвратом в замкнутый цикл.
Давайте плясать от печки - что такое есть функция вообще(в басике)?

Сообщение отредактировал MasterPic - Вт, 02.11.2010, 06:55
DAlexV Дата: Пн, 01.11.2010, 17:08  |                                                                                                                Сообщение # 7
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (MasterPic)
В рыбе ведь реализуются функции?

Quote (MasterPic)
что есть функция вообще(в басике)

В рыбе точно есть. В PBP не нашел. В Microbasic есть. В протоне не знаю


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Пн, 01.11.2010, 17:08
MasterPic Дата: Вт, 02.11.2010, 06:59  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

А можно ли сделать функцию, допустим, с помощью макроса? Кто подскажет, как вообще работают макрос и функция?
DAlexV Дата: Вт, 02.11.2010, 09:06  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (MasterPic)
А можно ли сделать функцию, допустим, с помощью макроса?
Да нет. Макрос это просто последовательность действий которые выполняет за тебя компьютер.(http://ru.wikipedia.org/wiki/Макрос).
функция же это выполнение каких то действий с обязательным возвратом результатов своей работы(например математические вычисления). Есть еще такое понятие как процедура. Это то же самое что и функция только результат ее работы не возвращается. Допустим нудно подергать ногой порта с определенной паузой из разных мест программы.
Примеры:

Это фунция, результат в переменной B
Func:
// внутри делаем что требуется, результат в итоге в переменной b
b=a*2+a
return

Это процедура
Strob_En:
High(Portb.0) // Высокий уровень B.0
delayMs(1) // пауза 1mS
Low(portb.0) // Низкий уровень B.0
return

P/s.

Quote (MasterPic)
что есть функция вообще(в басике)
Quote (DAlexV)
В протоне не знаю
Вчера пробежался по мануалу протона. Про функции ни чего не нашел. sad


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)

Сообщение отредактировал DAlexV - Вт, 02.11.2010, 09:12
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Функция на Proton (Возможно ли?)
Страница 1 из 11
Поиск: