мистика! не меняется переменная в функции!

SadiQ228
Offline
Зарегистрирован: 10.04.2017

Есть переменная, которую я объявляю в глобале, сразу после строк #define вот так uint8_t val=0, прототип функции делаю так foo (uint8_t &val), в нутри функции  делаю так: if(что то там){val=666;}

почему то после таких трюков переменная val не меняет значения оставаясь нулем проверял до и после вызова функции в loop 

sadman41
Offline
Зарегистрирован: 19.10.2016

*val=666;

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ошибка в строке №32 кода - сами-то посмотрите!

SadiQ228
Offline
Зарегистрирован: 10.04.2017

так не компилируется вообще!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы бы определились. Либо

SadiQ228 пишет:

не компилируется вообще!

либо

SadiQ228 пишет:

не меняет значения оставаясь нулем проверял до и после вызова функции в loop 

А то, когда и то, и другое вместе - это шизофренией попахивает :)

SadiQ228
Offline
Зарегистрирован: 10.04.2017

вы по делу будете? 

я вообщ сказал sadman41

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Всё, что я Вам пмсал было по делу.

Особенно про номер строчки.

Если Вы не поняли, то объясняю для альтернативно одарённых - пока Вы не приведёте свой код, никто не сможет сказать что там у Вас творится, т.к. одному Богу известо что вы там раписали. Так понятнее?

SadiQ228
Offline
Зарегистрирован: 10.04.2017

Я приведу свой код лишь для того, чтобы вы поняли, что исчерпавающая информация была приведена мной в первом посте!

#include <Wire.h>
#include <SPI.h>
void setup(void)
 {
  Serial.begin(230400);
  nfc.begin();
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.println("Didn't find PN53x board");
    while (1);
  }
  Serial.println("READY with PN53x ");
  nfc.SAMConfig();
 }
 uint8_t CardType;

 void GetAIDapdu (uint8_t*responseR, uint8_t responseRLength, uint8_t &CardType)
{

    if(responseR[3]==0x06){CardType=2;}
    if(responseR[4]==0x03){CardType=4;}
    if(responseR[4]==0x04){CardType=5;}
}
void loop()
{ 
Serial.print("cardtype ");Serial.println(CardType); 
GetAIDapdu(responseR,responseRLength,apdu,CardType);
Serial.print("cardtype ");Serial.println(CardType); 

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Посмотри-ка какая цаца - у всех компилируется, а у него нет.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

нахрена это 

uint8_t &CardType

вообще передовать в функцию ?

b707
Offline
Зарегистрирован: 26.05.2017

SadiQ228 - вам стоит почитать, чем отличается запись CardType от &CardType и от *CardType

b707
Offline
Зарегистрирован: 26.05.2017

xDriver пишет:

нахрена это 

uint8_t &CardType

вообще передовать в функцию ?

ну, когда там структура или массив - это оправдано. Но тут один байт.... нафига?

Думаю, ТС это просто где-то списал, а сам вообще не различает эти закорючки :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Посмотри-ка какая цаца - у всех компилируется, а у него нет.

Как он может компилироваться, если не responseR объявлен?

Другое дело, что, похоже, очередной суперспец появился - он лучше нас знает нужен код или где там "исчерпывающая информация".

SadiQ228
Offline
Зарегистрирован: 10.04.2017

Ребята указатели и ссылки я различаю, передаю по ссылке чтобы менялось значение!!!!

 может из кода че и вырезал, но суть то вам ясна? проблема не решена!

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Как он может компилироваться, если не responseR объявлен?

Этого знать не могу, я только за звездочки отвечаю.

SadiQ228
Offline
Зарегистрирован: 10.04.2017

за какие вы звездочки? за указатели? может тогда есть предположения? я могу передать в функцию int *val а в функции сделать *(val) =2; но всеравно не меняется

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

ну, когда там структура или массив - это оправдано. Но тут один байт.... нафига?

Ну... я так делаю иногда, когда функции нужно вернуть флаг удачно/неудачно, а если удачно, то еще и поменять значение в переменной. Непрозрачно, да, но быстро и функционально.

SadiQ228
Offline
Зарегистрирован: 10.04.2017

ПЕРЕМЕННУЮ ПЕРЕДАЮ ПОТОМУ ЧТО ПРОЕКТ РАЗБИТ НА МНОГО ФАЙЛОВ, это флаг символизирующий для меня кое что!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SadiQ228 пишет:

 может из кода че и вырезал, но суть то вам ясна? проблема не решена!

Или Вы даёте полный код в котором Вы печатаете переменную и видно, что она не меняется, или решаете свою проблему сами. Мы догадываться должны, что у Вас там написано? Причём код даёте котроткий - не надо 100500 строк - выделите проблему, продемонстрируйте её и выкладывайте код.

SadiQ228
Offline
Зарегистрирован: 10.04.2017

тоесть по моему не полному коду, понимание моей проблемы к вам не пришло?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

какая прелесть! Спасибо пацаны, а то чот депресняк накатывать стал, развеяли! ;) ;) ;)

sadman41
Offline
Зарегистрирован: 19.10.2016

SadiQ228 пишет:

Ребята указатели и ссылки я различаю, передаю по ссылке чтобы менялось значение!!!!

Различаете, говорите... тогда напишите нам вызов вот такой функции:

void (uint8_t* ptrValue) {
   *ptrValue = random();
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SadiQ228 пишет:

тоесть по моему не полному коду, понимание моей проблемы к вам не пришло?

В силу нашей общеизвестной крайней тупости - нет, не пришло.

Опять же, один нехороший человек запретил нам пользоваться хрустальными шарами.

И как жить-то?

b707
Offline
Зарегистрирован: 26.05.2017

SadiQ228 пишет:

Ребята указатели и ссылки я различаю, передаю по ссылке чтобы менялось значение!!!!

 

да нифига ты не различаешь. Начать с того. что CardType снаружи и внутри функции - это две разные переменные двух разных типов - одна типа байт, а другая указатель.

А во-вторых, глобальная CardType на то и глобальная, что ее не надо передавать в виде параметра - просто обращайся к ней внутри фкнкции.

 

SadiQ228
Offline
Зарегистрирован: 10.04.2017

а где имя то функции родной?

вот так вызову foo(&ptrValue)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SadiQ228 пишет:

а где имя то функции родной?

вот так вызову foo(&ptrValue)

Ну, вот, а говороил, что различает. Апять наврал? :((((

SadiQ228
Offline
Зарегистрирован: 10.04.2017

я оставив переменную глобальной, убрал из вызрова функции параметр, переменная всеравно не поменялась

SadiQ228
Offline
Зарегистрирован: 10.04.2017

я оставив переменную глобальной, убрал из вызрова функции параметр, переменная всеравно не поменялась

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, имя забыл, да - прокол. 

Но тем не менее - раз вызов сумели оформить, то перенесите этот тестовый фрагмент в свежий скетч и посмотрите - меняется значение или нет.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Как выразилась советник Трампа Келлиэнн Конуэй (чем обессмертила своё имя): "Это не враньё, а альтернативные факты".

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

SadiQ228 пишет:

я оставив переменную глобальной, убрал из вызрова функции параметр, переменная всеравно не поменялась

видимо не выполнилось ни одно условие.

b707
Offline
Зарегистрирован: 26.05.2017

SadiQ228 пишет:

я оставив переменную глобальной, убрал из вызрова функции параметр, переменная всеравно не поменялась

так может она и не должна?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

SadiQ228 пишет:

я оставив переменную глобальной, убрал из вызрова функции параметр, переменная всеравно не поменялась

А кода мы так и не увидим? Ты пришёл нам квестовые задания давать? Да?

SadiQ228
Offline
Зарегистрирован: 10.04.2017

Братуха да я и так и сяк , всяко уже делал, и возвращал из функции присваивая, ни в какую!1 мистика бро!

sadman41
Offline
Зарегистрирован: 19.10.2016

Переменные вообще никому не должны. А тем более -- глобальные.

SadiQ228
Offline
Зарегистрирован: 10.04.2017

>видимо не выполнилось ни одно условие. не может такого быть , но я перепроверю это

sadman41
Offline
Зарегистрирован: 19.10.2016

SadiQ228 пишет:

Братуха да я и так и сяк , всяко уже делал, и возвращал из функции присваивая, ни в какую!1 мистика бро!

А если я сделаю и заработает?

b707
Offline
Зарегистрирован: 26.05.2017

SadiQ228 пишет:

Братуха да я и так и сяк , всяко уже делал, и возвращал из функции присваивая, ни в какую!1 мистика бро!

начните с того, что назовите глобал и внутреннюю переменную функции разными именами. Я не знаю, каким чайником надо быть, чтобы дать им одно имя. Меня от вашего кода тошнит

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

Меня от вашего кода тошнит

Нежный какой! Диазепамчику примите!

Только веселуха пошла, а его уже тошнит!

SadiQ228
Offline
Зарегистрирован: 10.04.2017

xDriver бро ты дал дельную мысль! я по uint8_t мас сиву, шел int итератором!) аж смешно стало! спасибо всем кто откликнулся!

p.s да ошибка была в условии, переменная пишется)

sadman41
Offline
Зарегистрирован: 19.10.2016

Вот и скажи после этого, что в ардуине Си - честный...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

А чо, никто не заметил, что в строке 27 оно передаёт в функцию 4 параметра, а функция описана - с тремя? Четвёртый параметр, который CardType - в жопу, он не нужен, ещё бы ему меняться.

Вот что бывает, когда по умолчанию вывод wanring в среде отключён.

sadman41
Offline
Зарегистрирован: 19.10.2016

DIYMan пишет:

Вот что бывает, когда по умолчанию вывод wanring в среде отключён.

Просто это типичный случай данной стратегии:

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DIYMan пишет:

Вот что бывает, когда по умолчанию вывод wanring в среде отключён.

Так и С ж нечестный ни хрена. Как жить? :(((