Функция на Proton
|
|
MasterPic |
Дата: Пн, 01.11.2010, 14:49 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Здравствуйте все! Вопрос ко всему миру! Возможно ли в Proton замутить что-то типа фунции, возвращающей какое-то значение? Это относится и к PBP. Там одно и то же, в принципе. DalexV, может, вы подтолкнете в нужном направлении? В рыбе ведь реализуются функции? Может, имеет смысл подключать какие-то библиотеки? Или еще что? Любители basic для pic присоединяйтесь к активному обсуждению! У кого есть какие идеи?
|
|
|
|
DAlexV |
Дата: Пн, 01.11.2010, 15:13 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (MasterPic) DalexV, может, вы подтолкнете в нужном направлении? Как вариант: есть переменная А(число), есть переменная В(результат функции) a=15 //выставляем значение gosub Func // вызываем функцию loop: // зависаем goto loop Func: // внутри делаем что требуется, результат в итоге в переменной b b=a*2+a return
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
MasterPic |
Дата: Пн, 01.11.2010, 15:20 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
А зачем зависание? Это больше похоже на вызов подпрограммы.
|
|
|
|
DAlexV |
Дата: Пн, 01.11.2010, 15:30 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (MasterPic) Это больше похоже на вызов подпрограммы да нет, если бы не было строчки loop: // зависаем goto loop то после строки gosub Func следующая команда это метка Func: и т.д. а в конце return Если при вызове gosub Func после того как барсик увидет return, он вернется следующий оператор за gosub(вернется обратно) далее снова пройдется по вычислениям и снова нарвется на return. Не зная куда ему возвращаться, он поведет себя просто непредсказуемо. Хотя сам барсик по идее должен дать ошибку.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
DAlexV |
Дата: Пн, 01.11.2010, 15:41 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Но не стоит переусерствовать с gosub и return. Есть такое понятие как стек. При вызове return в него записывается адрес возврата по return. Cntr сам по себе не безразмерный (от 8 до 16 байт если не ошибаюсь). Если его переполнить(8 раз вызвать gosub), то на 9 вызов программа начинает себя вести неадекватно. Плюс какая то бяка была если вызов подпрограммы находится в 1 странице памяти, а подпрограмма находится во второй(и наоборот). Это правило запомнил еще когда программировал на ASM и актуально оно к 16 линейки PIC ов. В 18 таких проблем вроде нет, но неизвестно какой код сформирует барсик(учтено ли это там) P/s. Открыл Хелибака и прочитал следующее:Компилятор PBP ограничен четырьмя уровнями вложенности. Это значит что в программе можно использовать не более четырех команд gosub одновременно
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Пн, 01.11.2010, 15:46
|
|
|
|
MasterPic |
Дата: Пн, 01.11.2010, 16:04 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
Нет, ну все-таки - то, что вы предложили - не более чем вызов подпрограммы с возвратом в замкнутый цикл. Давайте плясать от печки - что такое есть функция вообще(в басике)?
Сообщение отредактировал
MasterPic - Вт, 02.11.2010, 06:55
|
|
|
|
DAlexV |
Дата: Пн, 01.11.2010, 17:08 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (MasterPic) В рыбе ведь реализуются функции? Quote (MasterPic) что есть функция вообще(в басике) В рыбе точно есть. В PBP не нашел. В Microbasic есть. В протоне не знаю
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Пн, 01.11.2010, 17:08
|
|
|
|
MasterPic |
Дата: Вт, 02.11.2010, 06:59 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
186
Замечания:
±
На сайте с 22.11.2008
Статус:
Offline
|
А можно ли сделать функцию, допустим, с помощью макроса? Кто подскажет, как вообще работают макрос и функция?
|
|
|
|
DAlexV |
Дата: Вт, 02.11.2010, 09:06 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 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) В протоне не знаю Вчера пробежался по мануалу протона. Про функции ни чего не нашел.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Вт, 02.11.2010, 09:12
|
|
|
|