ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
279084
BaN (19.10.2011 17:45, просмотров: 17702)
Проблема с видимостью буфера внутри цикла в функции. Функция: void SendNewData(void) { uint8_t tx_buf[50]; uint8_t i = 0; uint16_t checksum; // Формируем пакет для отправки tx_buf[i++] = ID_TX_Sens_Data; tx_buf[i++] = Num_AN_Sens; tx_buf[i++] = N_AN_Sens1; tx_buf[i++] = Len_AN_Sens1; tx_buf[i++] = 0xAA; tx_buf[i++] = N_AN_Sens2; tx_buf[i++] = Len_AN_Sens2; tx_buf[i++] = BYTE1(ADC_Pot); tx_buf[i++] = BYTE0(ADC_Pot); tx_buf[i++] = N_AN_Sens3; tx_buf[i++] = Len_AN_Sens3; tx_buf[i++] = 0xAA; tx_buf[i++] = 0xBB; tx_buf[i++] = 0xCC; tx_buf[i++] = N_AN_Sens4; tx_buf[i++] = Len_AN_Sens4; tx_buf[i++] = 0xAA; tx_buf[i++] = 0xBB; tx_buf[i++] = 0xCC; tx_buf[i++] = 0xDD; tx_buf[i++] = Num_D_Sens; tx_buf[i++] = digit_ch_state; checksum = Crc16(tx_buf, i); tx_buf[i++] = BYTE1(checksum); tx_buf[i++] = BYTE0(checksum); // Отправляем сформированный пакет for (uint8_t j = 0 ; j < i ; ++j) { while ( !( UCSR0A & (1<<UDRE0)) ); UDR0 = tx_buf[j]; } } При объявлении буфера в виде: uint8_t tx_buf[50]; внутри цикла for при обращении к элементу буфера tx_buf[j], значение считывается неверно. В таком виде, на COM-порт приходит i байт с одинаковым содержимым 0x60. При этом, запись в элементы буфера tx_buf[i++] идет нормально. Если объявить буфер в виде: static uint8_t tx_buf[50]; то в цикле for всё нормально считывается и передается на COM-порт то, что нужно. Компилятор IAR Embedded Workbench for Atmel AVR 5.51. Микроконтроллер ATmega48PA. Подскажите, пожалуйста, в чем я ошибаюсь?