изменение аргумента функции
- Войдите на сайт для отправки комментариев
Пнд, 20/08/2018 - 20:11
можно ли изменять значение аргумента функции внутри функции?
void Func(unsigned char arg1)
{
arg1 = 0;
}
изменится ли значение переменной, которую я передам в качестве аргумента или нет?
Можно. Изменится. Может вкратце поясните какая задача?
Можно положить новое значение по адресу, который вы передадите в качестве аргумента. См. "передача аргумента по ссылке".
В вашем случае значение изменится на время жизни функции, а точнее - будет заведена еще одна локальная переменная, в которую откопируется значение передаваемой. См. "передача аргумента по значению".
изменится ли значение переменной, которую я передам в качестве аргумента или нет?
При таком способе передачи аршумента - нет.
Подробнее - см ответ sadman41
собираюсь сделать софтовый UART по прерыванию таймера. Так вот мне нужно считать данные только один раз, а остальное время передавать биты данных. В конце снова проверить, есть ли новые данные, если да, то отправить и их
можно ли изменять значение аргумента функции внутри функции?
void Func(unsigned char arg1) { arg1 = 0; }изменится ли значение переменной, которую я передам в качестве аргумента или нет?
Можно. Варианта два: передача по ссылке, или по указателю. В том и другом случае - параметры должны быть неконстантными, т.е. разрешать изменение:
// по ссылке void Func(unsigned char& arg1) { arg1 = 0; } // по указателю void Func(unsigned char* arg1) { *arg1 = 0; }Вызов этого добра:
Ну можно и так #190
Ну можно и так #190
А это каким боком к вопросу ТС?
И из это следует, что ему надо валить ссылки, инкапсуляцию, полиморфизм и вообще всё, о чём когда-то слышали?
ЕвгенийП, что ж вы ко мне цепляетесь. Вас что никто не посылает. А пойти видно вам куда-то хочется. Человеку я просто подал пас и все. Поймает или пропустит это зависит от его головы. Вас это коробит что-ли.
Ваш пас про возвращение ссылок, на мой взгляд, никакого отношения к его вопросу не имеет. Ну, это на мой взгляд, возможно, я ощшибаюсь. Потому я и попросил Вас объяснить Вашу мысль. Вы вместо того, чтобы объяснить, начинаете намекать на посылание. У Вас что-то не в порядке? Вы чем-то сильно озабочены?
Конечно озабочен. Вы все время требуете что бы я Вам вместо ТС в его его теме разжевывал свою мысль. Если вам надо что то разжевать , то откройте свою тему и ждите, что бы Вам что-то кто-то расжевывал, если зубы у вас все выпали.
Я правильно понял, что вопросы Вам лучше не задавать - ничего кроме хамства в ответ не будет? Так? Если так, то обязуюсь юольше этого не делать (в смысле вопросы не задавать, от удовольствия иногда прокомментировать Ваши класссы я кончено же не отказываюсь - но без вопросов :)
Ваши класссы кончено
Согласен, Евгений - там кончено всё :)
unsigned char Soft_UART_Transfer(unsigned char data) { //return 0 if transfer data register empty and shift register empty //return 1 if transfer data register ready to receive new data and shift register full //return 2 if transfer complete static unsigned char send_bit = 255; static unsigned char state = 0; static unsigned char shift_register = 0; switch(send_bit) { case 0: SOFT_TX_PIN = 0; send_bit = 255; break; case 1: SOFT_TX_PIN = 1; send_bit = 255; break; } if(data) { shift_register = data; data = 0; // вот это место } if(shift_register) { if(state == 0) { shift_register = data_reg; send_bit = 0; state++; return 1; } else if((state >= 1) && (state <= DATA_BITS)) { send_bit = shift_register & 0x01; shift_register = shift_register >> 1; state++; return 1; } else if(state > DATA_BITS && state == DATA_BITS + STOP_BITS) { send_bit = 1; state = 0; return 2; } else if(state > DATA_BITS && state != DATA_BITS + STOP_BITS) { send_bit = 1; state++; return 1; } } else { return 0; } }эта функция будет крутиться в прерывании таймера
semaawp, попробую я вам дать свое объянение, а потом другие дадут свое. Вы хотите организовать механизм передачи байта с помощью таймера. Но тогда у Вас должно бы не одна функция а две. - 1- это передать байт. а 2-я это обработчик таймера с передачей, которая и решает что надо передавать бит если есть что-то передавать или нет. Ей не надо данные. Для ее работы нужны внешние переменные . флаг передавать или нет, байт данных и сколько уже передано.