Например TDA7294

Форум РадиоКот • Просмотр темы - Передача значения в функцию!
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 06:24:45

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 15 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 18:55:57 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Доброго времени суток! Как правильно в С передать (написать) значение функции, если это значение по определённому условию должно быть предварительно увеличенна или уменьшинна. К примеру

int port_set(int a)
{
;
}
int main()
.....
port_set(2*a);//если писать так, то значение не увеличивается, но и не выдаёт ошибок

//или ещё пример

port_set(a/2);//если писать так, то значение не уменьшается, но и не выдаёт ошибок

Заранее спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:28:36 
Прорезались зубы

Зарегистрирован: Вс янв 23, 2011 21:51:12
Сообщений: 221
Рейтинг сообщения: 0
Должно работать.
А каким компилятором пользуетесь? И для какой платформы?
Если при компиляции делается листинг на асме, то можете его посмотреть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:38:42 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Попробуйте объявить переменную как volatile.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:44:11 
Друг Кота

Карма: 6
Рейтинг сообщений: 11
Зарегистрирован: Сб мар 07, 2009 20:44:36
Сообщений: 4435
Рейтинг сообщения: 0
king-live писал(а):
Доброго времени суток! Как правильно в С передать (написать) значение функции, если это значение по определённому условию должно быть предварительно увеличенна или уменьшинна. К примеру

int port_set(int a)
{
;
}
int main()
.....
port_set(2*a);//если писать так, то значение не увеличивается, но и не выдаёт ошибок

//или ещё пример

port_set(a/2);//если писать так, то значение не уменьшается, но и не выдаёт ошибок

Заранее спасибо!


лучше вот так сделайте:
int port_set(int a)
{
++a;
return a;
}
main()
int k;
k=0;
...
...
b=port_set(k);
return 0;
}

_________________
Не умеешь - не берись, но не взявшись не научишься...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:48:01 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Пользуюсь WinAVR + AVRStudio. Пробовал на железе!
К примеру - в программе есть функция задержки int White(int x)
Если мне нужно увеличить задержку в 5 раз, пишу White(5*x);
но на практике не работает.

А пишу так (к сожалению)
......

White(x);
White(x);
White(x);
White(x);
White(x);
........

Так работает, но это ненормально. ! :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:52:53 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
king-live писал(а):
.... если это значение по определённому условию должно быть предварительно увеличенна или уменьшинна. К примеру

int port_set(int a)
{
;
}
int main()
... и где же тут условие?

king-live писал(а):
port_set(2*a);//если писать так, то значение не увеличивается, но и не выдаёт ошибок

//или ещё пример

port_set(a/2);//если писать так, то значение не уменьшается, но и не выдаёт ошибок
.. если имеется в виду значение a , то оно и не должно измениться ... напишите
Код:
 a*=2;
//или
a/=2;


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:54:48 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Цитата:
лучше вот так сделайте:
int port_set(int a)
{
++a;
return a;
}
main()
int k;
k=0;
...
...
b=port_set(k);
return 0;
}


Попробую таким способом, но вопрос в другом, может памяти МК не хватить на дополнительную процедуру. Иногда приходится отваёвывать каждый 0,1% во Флешке МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 19:59:30 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Цитата:
a*=2;
//или
a/=2;


Вы имели ввиду следующее:

......

if (.....) a=a*5;
port_set(a);
.....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 20:14:07 
Сверлит текстолит когтями
Аватар пользователя

Карма: 4
Рейтинг сообщений: 30
Зарегистрирован: Ср янв 05, 2011 16:25:15
Сообщений: 1163
Рейтинг сообщения: 0
king-live писал(а):
Вы имели ввиду следующее: .....
... я имел ввиду, что в функцию передается локальная копия и если хотите изменить значение a, то передавать параметр нужно по ссылке, а не по значению.......


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 20:27:46 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Понял! Спасибо! Ну а если такой пример

int White(unsigned int x)
{
x=ADCH;
while(x--)
{
_delay_ms(1);
}
}

int main()
{
...
White(x);
...
}

При таком построении функции White(x); наверное бессмысленно передавать по ссылке переменную x. Так как внутри функции, х изменит своё значение, которая будет зависить от значения ADCH.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 20:34:50 
Прорезались зубы

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб янв 29, 2011 20:26:48
Сообщений: 238
Рейтинг сообщения: 0
Кстати, понял свою ошибку. В функции White(x), какоебы значение я не давалбы переменному "х" , что White(2*x), что White(x/2) - (возможно это работает) , х всёравно принялбы значение ADCH. Поэтому значение х не увеличивалось и не уменьшалось, а зависило от ADCH. Спасибо за помощь!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 20:56:12 
Прорезались зубы

Зарегистрирован: Вс янв 23, 2011 21:51:12
Сообщений: 221
Рейтинг сообщения: 0
Ради интереса опробовал пример. :)
Вот листинг участка кода:
Код:
      int a = 5;
      Delay_1_8(5*a);               //
 574:   89 e1          ldi   r24, 0x19   ; 25
 576:   36 de          rcall   .-916       ; 0x1e4 <Delay_1_8>
 578:   fb cf          rjmp   .-10        ; 0x570 <main+0x18>

Компилятор (с оптимизатором) еще на этапе трансляции в асм все вычислил,
а переменную создавать даже и не стал.
Но в функцию было передано 5*5=25.

[add]
В этом примере переменная a объявлена, как volatile .
Результат другой, но правильный. В функцию передается значение 5*5=25 .
Переменная типа int , размещена в паре регистров r14:r15 .
Код:
      volatile int a=5;
 57e:   0f 2e          mov   r0, r31
 580:   f5 e0          ldi   r31, 0x05   ; 5
 582:   ef 2e          mov   r14, r31
 584:   ff 24          eor   r15, r15
 586:   f0 2d          mov   r31, r0
...
      volatile int a=5;
 58c:   fa 82          std   Y+2, r15   ; 0x02
 58e:   e9 82          std   Y+1, r14   ; 0x01
      Delay_1_8(5*a);               //
 590:   29 81          ldd   r18, Y+1   ; 0x01
 592:   3a 81          ldd   r19, Y+2   ; 0x02
 594:   c9 01          movw   r24, r18
 596:   88 0f          add   r24, r24
 598:   99 1f          adc   r25, r25
 59a:   88 0f          add   r24, r24
 59c:   99 1f          adc   r25, r25
 59e:   82 0f          add   r24, r18
 5a0:   21 de          rcall   .-958       ; 0x1e4 <Delay_1_8>
 5a2:   f2 cf          rjmp   .-28        ; 0x588 <main+0x30>


[/add]


Последний раз редактировалось Ar-Gen-Tum Вс апр 17, 2011 21:15:03, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Вс апр 17, 2011 21:10:58 
Друг Кота
Аватар пользователя

Карма: 25
Рейтинг сообщений: 99
Зарегистрирован: Вс янв 24, 2010 19:19:52
Сообщений: 4468
Откуда: Главный Улей России (Moscow)
Рейтинг сообщения: 0
Код:
void out(int b)
{
   DispOut32(0x0115F24A, b);
}

void main(void)
{
   int a=10;
   out(a+10);
}

Такой пример работает, но это не AVR, а x86.

_________________
I am DX168B and this is my favourite forum on internet!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Пн апр 18, 2011 15:26:56 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
king-live писал(а):
Кстати, понял свою ошибку. В функции White(x), какоебы значение я не давалбы переменному "х" , что White(2*x), что White(x/2) - (возможно это работает) , х всёравно принялбы значение ADCH. Поэтому значение х не увеличивалось и не уменьшалось, а зависило от ADCH. Спасибо за помощь!
Не в обиду сказано, но возникает вопрос. Сейчас так принято, не доучив русский язык приниматься за языки программирования? Раньше все шло постепенно. Если следовать этому принципу, то и языку программирования уготована та же судьба - остаться недоученным...
Ну и совсем OFF, по английски White - это белый. "Ожидание" - wait. Впрочем, какая кому разница, особенно мне, настырному? :)

_________________
С уважением,
Виктор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Передача значения в функцию!
СообщениеДобавлено: Пн апр 18, 2011 18:25:03 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
+1

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y