Это первый раз, когда я вижу что-то подобное. Я начинаю подозревать, что это аппаратная ошибка. всякий раз, когда я пытаюсь отправить содержимое массива «test», и этот массив больше 4 элементов или я инициализирую все элементы в объявлении, он содержит 0xff вместо значений, с которыми я пытаюсь инициализировать.AVR gcc, странное поведение массива
это хорошо работает. когда я читаю значения из массива в то время (отправляя их на ЖК-дисплее и UART) оба показания согласуются со значениями тестов:
uint8_t i=0;
uint8_t test[4] = {1,2,3,4};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
это не так, она возвращает 0xff вместо теста [I] значения:
uint8_t i=0;
uint8_t test[5] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
но это работает! он возвращает соответствующие значения
uint8_t i=0;
uint8_t test[6] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
это также работает:
uint8_t i=0;
uint8_t test[5];
test[0]=1;
test[1]=2;
test[2]=3;
test[3]=4;
test[4]=5;
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
он отлично работает при компиляции на Linux
я выгружена микроконтроллер для другой один, и он работает так, как надо. должна быть проблема с оборудованием
Этот вопрос не особенно ясен. Пожалуйста, не просто вставляйте код и заставляйте нас мысленно различать его. * Объясните *, в чем проблема. Вы говорите «возвращает 0xFF» - откуда? Этот код не отображается нигде. Если ваша проблема заключается в передаче, почему мы заботимся о результатах приема? Изолируйте проблему. Вы передаете UART, верно? Ну, тогда очевидный шаг отладки - посмотреть, что на самом деле выходит * из порта. –
Вы понимаете, что, хотя размер вашего массива меняется, границы вашего цикла никогда не меняются, не так ли? Это всегда 'while (i <5)'. Вот почему макрос «ARRAY_LENGTH» полезен. –
Я отредактировал мое сообщение, чтобы сформировать его правильно. проблема заключается в том, что когда я инициализирую массив так, как обычно я делаю массив [] = {1,2,3}, и он больше 4 элементов вместо моих значений, он содержит 0xff. когда я объявляю 6 или более массив элементов и инициализую его пропускание последнего элемента, он отлично работает. Я не изменил (i <5) значения из ленивости, это не влияет на проблему. если массив имеет 4 элемента, он правильно печатает их + один нежелательный, если он имеет 5 элементов, он печатает 0xff пять раз, если он имеет 6 элементов, но 5 инициализированы, есть пять правильных значений – Barricadexx