Доброго времени суток! Как правильно в С передать (написать) значение функции, если это значение по определённому условию должно быть предварительно увеличенна или уменьшинна. К примеру
int port_set(int a) { ; } int main() ..... port_set(2*a);//если писать так, то значение не увеличивается, но и не выдаёт ошибок
//или ещё пример
port_set(a/2);//если писать так, то значение не уменьшается, но и не выдаёт ошибок
Доброго времени суток! Как правильно в С передать (написать) значение функции, если это значение по определённому условию должно быть предварительно увеличенна или уменьшинна. К примеру
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; }
_________________ Не умеешь - не берись, но не взявшись не научишься...
Пользуюсь WinAVR + AVRStudio. Пробовал на железе! К примеру - в программе есть функция задержки int White(int x) Если мне нужно увеличить задержку в 5 раз, пишу White(5*x); но на практике не работает.
лучше вот так сделайте: int port_set(int a) { ++a; return a; } main() int k; k=0; ... ... b=port_set(k); return 0; }
Попробую таким способом, но вопрос в другом, может памяти МК не хватить на дополнительную процедуру. Иногда приходится отваёвывать каждый 0,1% во Флешке МК.
... я имел ввиду, что в функцию передается локальная копия и если хотите изменить значение a, то передавать параметр нужно по ссылке, а не по значению.......
int White(unsigned int x) { x=ADCH; while(x--) { _delay_ms(1); } }
int main() { ... White(x); ... }
При таком построении функции White(x); наверное бессмысленно передавать по ссылке переменную x. Так как внутри функции, х изменит своё значение, которая будет зависить от значения ADCH.
Кстати, понял свою ошибку. В функции White(x), какоебы значение я не давалбы переменному "х" , что White(2*x), что White(x/2) - (возможно это работает) , х всёравно принялбы значение ADCH. Поэтому значение х не увеличивалось и не уменьшалось, а зависило от ADCH. Спасибо за помощь!
Ради интереса опробовал пример. Вот листинг участка кода:
Код:
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 .
Кстати, понял свою ошибку. В функции White(x), какоебы значение я не давалбы переменному "х" , что White(2*x), что White(x/2) - (возможно это работает) , х всёравно принялбы значение ADCH. Поэтому значение х не увеличивалось и не уменьшалось, а зависило от ADCH. Спасибо за помощь!
Не в обиду сказано, но возникает вопрос. Сейчас так принято, не доучив русский язык приниматься за языки программирования? Раньше все шло постепенно. Если следовать этому принципу, то и языку программирования уготована та же судьба - остаться недоученным... Ну и совсем OFF, по английски White - это белый. "Ожидание" - wait. Впрочем, какая кому разница, особенно мне, настырному?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения