Функции и подпрограммы - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: DAlexV 
Форум Picbasic.ru » Программирование МК » Swordfish » Функции и подпрограммы (параметры)
Функции и подпрограммы
demanik Дата: Ср, 17.02.2010, 17:28  |                                                                                                                Сообщение # 1
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

В функциях и подпрограммах есть параметры: inline, ByVal, ByRef, ByRefConst, ConstExp.
Смысла которых изза слабого знания английского никак не пойму. Может ктото доходчиво разжует. angry


Попробуй всё и вся... может быть пол...

ЯНДЕКС Дата: 17.02.2010
DAlexV Дата: Чт, 18.02.2010, 20:26  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Ну задал вопрос так задал!!!!
Ни когда не пробовал сии параметры. Насколько понял из описания:

ByVal при обращении к процедуре значение переменной не меняется(создается локальная копия с которой и происходят изменения)(по умолчанию)
ByRef при этом изменяются значения переменной в зависимости от выполняемых в (функции, процедуре)

Code
include "USART.bas"
include "Convert.bas"

sub NoChange(pValue as byte)
     pValue = 10
end sub

sub ChangeValue(byref pValue as byte)
     pValue = 10
end sub

dim Value as byte
SetBaudrate(br19200)
Value = 0
NoChange(Value)
USART.Write("Value : ", DecToStr(Value), 13, 10)
ChangeValue(Value)
USART.Write("Value : ", DecToStr(Value), 13, 10)

при вызове функции NoChange(Value) значение Value не изменяется
при вызове функции ChangeValue(Value) значение Value равно 10(см. функцию)

ByRefConst тут посложнее. Что то связанное с экономией памяти при работе с постоянными константами(что бы не использовать ОЗУ процессора.
Гугл дал такой перевод:
Существует и третья передачи параметров механизма, который используется главным образом для постоянных массивов. Микроконтроллера ПИК ™, постоянная массивы хранятся в отличие от памяти данные которых требует использования byrefconst. Это гарантирует, что диск адрес передается и не ОЗУ адрес. Например,

Code

include "USART.bas"
const Names(3) as string = ("David", "Fred", "Peter")
sub DisplayNames(byrefconst pNames() as string)
     dim Index as byte
     for Index = 0 to bound(pNames)
        USART.Write(pNames(Index), 13, 10)
     next
end sub

SetBaudrate(br19200)
DisplayNames(Names)      
     

то бишь pNames не создается как константа в памяти проца, а читается напрямую из const Names()

Ну и на сладкое inline и noinline
Ни чего не понятно, но что то связанное с блокировкой вызова данной за оператором функции и компиляцией программы. Якобы увеличивает скорость(из за исключения переходов к подпрограммам) , но и так же размер компилируемой программы.

Прошу прошения что не как то невнятно, сам еще учусь. Надеюсь разъяснил.

P/S. Если непонятно есть переводчик Google http://translate.google.ru/?js=y&p....#submit
перевожу когда самому непонятно, не идеально, но врубиться можно


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
demanik Дата: Вс, 07.03.2010, 14:04  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 451
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

С ByVal и ByRef разобрался:
ByRef - функция или подпрограмма берет значение, обрабатывает и при выходе возвращает измененное значение (если было изменение внутри подпрограммы).
ByVal - функция или подпрограмма берет значение, обрабатывает но при выходе оставляет оригинальное значение.
happy
Остальное ByRefConst, ConstExp, inline и noinline пока туманно.

Переделал уже два проэкта из протона на рыбу. Чем глубже разбираюсь тем больше нравится рыба. Очень много общего в рыбе с микробейсиком. Но есть огромный плюс, это возможность корректировать и переделывать стандартные библиотеки. Например: в библиотеке LCD мне непонравился оператор вывода на дисплей "Write" он такойже как и в библиотеке EEPROM но там для записи в ячейку памяти, и для их одновременного использования нужно писать префиксы: LCD.Write и EE.Wrire. немного неудобно и я переделал в библиотеке LCD "Write" на "PRINT". при переделке с протона меньше именений, но минус работает только с моей библиотекой. cool


Попробуй всё и вся... может быть пол...

DAlexV Дата: Вс, 07.03.2010, 17:20  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (demanik)
и я переделал в библиотеке LCD "Write" на "PRINT".

Да на здоровье. Этим он мне то же нравиться. Не нравиться стандартная, переделывай или пиши свою.
Quote (demanik)
но минус работает только с моей библиотекой.

Если кому то отдать нужно, переименовал в My_LCD и прикрепляешь к проджекту. Не проблема.


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

Статус: Offline

Подскажите, где по 18 серии по русски внятно написано, может, кинете чем нибудь. а на рыбу по русски есть у кого нибудь? Да вообще, надо наверное уже на какие нибудь pic33 переходить?
DAlexV Дата: Вс, 07.03.2010, 19:36  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (MasterPic)
Подскажите, где по 18 серии по русски внятно написано

Что имеется ввиду??? На Рыбе на русском вряд ли, редкий язык.
Quote (MasterPic)
надо наверное уже на какие нибудь pic33 переходить
Это сугубо личное дело. Меня и 18 полностью устраивает.


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
Форум Picbasic.ru » Программирование МК » Swordfish » Функции и подпрограммы (параметры)
Страница 1 из 11
Поиск: