Переменная счетчика сбрасывается на 0 без сброса (мега)
(Arduino Mega2560) Я пытаюсь проверить размещение счетчика n в цикле for, проблема в том, что каждый раз, когда он выходит и возвращается в цикл for, n снова сбрасывается, поэтому он печатает «counter : 245 дюймов каждый раз. Однако, когда я комментирую *b++=data; и данные++; он правильно считает. Что именно происходит?!
Код:
uint8_t i=0;
uint8_t buf[245];
uint8_t *b=buf,*b2=buf;
uint8_t data=10;
int n=0;
void setup() {
Serial.begin(9600);
}
void loop() {
for(i=0; i<245 ;i++){
*b++=data;
data++;
delay(50);
n++;
Serial.println(buf[i]);
}
data=0;
delay(5000);
Serial.println("counter:");
Serial.println(n);
delay(5000);
}
@BigRedMachine, 👍0
Обсуждение1 ответ
Лучший ответ:
Вы никогда не сбрасываете указатель b
. В первый раз он работает через память, зарезервированную для buf
. Во второй раз в вашем цикле он уже находится в конце этой памяти, и затем вы начинаете увеличивать (и заполнять) эту перезапись других переменных — первая из которых звучит так, как будто это может быть n
— поэтому *b++=data
записывает data
(245) в n
.
Вам нужно сбрасывать b
каждый раз, когда вы проходите через цикл, чтобы он каждый раз начинался с начала массива:
b = buf;
Спасибо, Маженко, теперь это имеет смысл., @BigRedMachine
@Majenko ... проголосовал за ... действительно моя ошибка., @Michel Keijzers
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
b
уходит в неизвестность, а вы засоряете все свои переменные мусором., @MajenkoАга, понятно ! Я никогда раньше не пробовал указатели, могу ли я сделать b = 0, чтобы сбросить его, или это делается по-другому?, @BigRedMachine
b = buf;
сброситb
в начало переменной области памятиbuf
. Вашb++
будет расти и расти без ограничений. После 254 приращений он будет указывать на что-то *после*buf
, что для меня звучит какn
., @Majenko