Что за цирк с типом данных int?

Я в программирование мало понимаю. Вряд ли переменная i меняет тип данных - она живёт только внутри цикла. Можно объявить её глобально и посмотреть на изменения. Можно погонять другие типы и поискать закономерность. Здесь не важны сами числа (их внешний вид), важны закономерности меж ними.

Всё точно легло, с byte тоже. Всё работает. Нюансы оставим знатокам :slight_smile:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  while(!Serial);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Start");
  for (unsigned int i=0;;i++){
    Serial.println((unsigned int)i);
  }
  Serial.println("End");
}

Да, когда переменную счетчика цикла объявляешь глобально, то всё работает корректно:


Судя по всему, глюк (если это действительно глюк, а не “так и задумано”) происходит только если тип данных счетчика объявляешь локально в цикле. Ну не знаю, как тогда живут большие проекты в Ардуино? Умумукаешься все счетчики циклов в глобальные переменные засовывать…

Гм… Не знал… А что, так можно было? Надо подумать. Просто все кричали “Ардуино, Ардуино”. Я и пошёл куда все кричали. За мысль спасибо. Но мне, по большому счету, важно решить свою конкретную задачу. Нано вроде мелкая, дешёвая и простая. Я её выбрал исключительно из-за габаритов.

Я не думаю пока, что это глюк. Печать в монитор порта :slight_smile: мне не последняя истина. Вот если выставить условие , что при (int) i >33… тысяч включить светодиод … и он включится тогда да! - поломатая система

так вы не пишите циклов с выходом за пределы - и не надо будет обьявлять переменные глобально…
А то вы сначала сами выстрелили себе в ногу - а потом удивляетесь что полис ОМС вас от травмы не защитил :slight_smile:

ТС как ГУРУ VB - может покажет нам код, который крутится … хотя бы в двух бесконечных циклах ОДНОВРЕМЕННО ???

Вы уже обделались по горло … хотите с головой ?

Хотите реальный “Крышеснос Форте”?

Попробуйте решить две задачи, которые я привёл в стартовом посте вот этой темы. Это реально крышесносные задачи!

У меня в VB никогда не стояла задача делать бесконечные циклы. В моих задачах это не нужно. У любого процесса должны быть начало и конец. Если программа входит в бесконечный цикл - это уже ошибка и недопустимая ситуация. И что-то мне представляется, что написать код на VB, который бы крутился в двух бесконечных циклах одновременно - задача невыполнимая. Так что наверное я в этом вопросе не гуру. Покажите вы, если можете. Я с удовольствием поучусь у вас. Простая логика подсказывает, что если я один бесконечный цикл вложу в другой, то крутиться буду бесконечно только во внутреннем бесконечном цикле, и во внешний никогда не вернусь. Но я для таких задач недостаточно квалифицирован. А зачем на практике могут понадобиться два таких цикла?

хорошая тема.
Клапауций тогда правильно сказал про новичков

без разговоров сбрасывать в пропасть.

1 лайк

Вы же написали … По ходу одного бесконечного будет достаточно !!!

Продолжаешь чудить? Сколько можно бред генерировать?

Ну так вот твой стартовый код и есть ошибка и недопустимая ситуация

Я так думаю, что это кто-то из “гуру” сидит и генерит бред с ЧатГПТ от имени ТС. Уж больно похоже на итерации генерирующей нейросетки… стоит задуматься. Просто проследите ответы ТС, И как следующий бред корректируется замечаниями участников.

1 лайк

я солидарен, и думаю этот “цирк” давно пора закончить.

1 лайк

Как ТС, я бы с удовольствием закрыл тему. Я просил администратора вообще удалить её (как и вторую свою тему), но он не захотел.

void setup (void) {
	Serial.begin(115200);
for(int i=0;;i++){
 Serial.println(i); 
 if(i>33000){Serial.println("Катастрофа!");return;} 
}	
}	
void loop(void) {
 delay(1000);  
Serial.println("Это конец!");
 }
//Это жизнь...
void setup (void) {
	Serial.begin(9600);
for(byte i=0;;i++){//мечты
 Serial.println(i);//...пролетает 
 if(i>random(60,100)){return;}//реальность 
}
}	
void loop(void) {
 Serial.println("Всё!");
 while(1){}	
 }

Посмотри, как “под капотом” реализована функция main() в Ардуинах

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }
/*
* \brief Main entry point of Arduino application
*/
int main( void )
{
    init();
    initVariant();
    delay(1);
#if defined(USBCON)
    USBDevice.attach();
#endif
    setup();
    for (;;)
    {
        loop();
        if (serialEventRun) serialEventRun();
    }
    return 0;
}

17 строка - страшный сон и недопустимая ситуация для true VB-шника. Делать тебе в Ардуинах нечего тогда.

1 лайк