Почему происходит изменения последнего элемента массива хотя в коде это нигде не прописано.
- Войдите на сайт для отправки комментариев
Вс, 23/09/2018 - 17:35
Есть у меня код для парсинга одного байта который я получил через i2c:
#include <Wire.h>
byte buffer = 0;
void setup() {
Serial.begin(9600);
Serial.println("Start");
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0B111); //SQW/OUT register adres
Wire.write(0B10000); // Set Square Wave to 1 Hz
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(0x68); //begin communication with device on addres 0x68
Wire.write(0x00); //specify the register to interact
Wire.endTransmission(); // stop transmission
Wire.requestFrom(0x68, 1); //request 1 byte of data
while(Wire.available() == 0); //wait for respons
buffer = Wire.read(); //read the data
Serial.println(buffer, BIN);
decode(buffer);
delay (1000);
Serial.println("------------------------------------");
}
byte decode(byte dec_input){
boolean one_buffer[8] = {0,0,0,0,0,0,0,0};
boolean ten_buffer[8] = {0,0,0,0,0,0,0,0};
boolean bit_buffer[8] = {0,0,0,0,0,0,0,0};
for(byte bit_idx = 0; bit_idx < 8; bit_idx++){
bit_buffer[bit_idx] = dec_input & (0x80 >> bit_idx);
Serial.print(bit_buffer[bit_idx]);
if(bit_idx > 0 && bit_idx <= 3){
ten_buffer[bit_idx - 1] = bit_buffer[bit_idx];
}else if(bit_idx > 3){
one_buffer[bit_idx - 5] = bit_buffer[bit_idx];
}
/////////////////
ten_buffer[7] = 0;
/////////////////
}
Serial.println("<--- bit_buffer");
for(int x = 0; x < 8; x++){
Serial.print(ten_buffer[x]);
}
Serial.println("<--- 10x sec");
for(int x = 0; x < 8; x++){
Serial.print(one_buffer[x]);
}
Serial.println("<--- sec");
return 1;
}
Выделенный кусок кода — это костыль для того, чтобы всегда устанавливать последний "бит" ten_buffer в 0. Если этого не сделать, то он буден равен одному если внутри bit_buffer будет такая картина 00001000. Тоесть вот этот бит переходит на последнюю позицию ten_buffer в независимости от всех остальных битов. Код я проверял и получается, что нет в коде, куска, который бы прописывал ему это состояние. В чем может быть причина и как это решить?
при значении bit_idx =4 в строке 34 вы присваиваете значение элементу массива с отрицательным индексом и, вероятно, при этом затираете значение соседнего массива