Witam,
Dzisiaj natknąłem się na taki dziwny problem. Otóż, mam ja sobie atmege 1280 i zadeklarowaną tablicę do uarta UARTBuffer[] tak jak niżej
Cały program ma jakieś 3k linii kodu więc nie będę go tu umieszczać
Problem polega na tym, że jak stała BUFF_SIZE ma wartość 64 wszystko działa ok, jak dam już np 200 to program siada, dzieją się przeróżne rzeczy w zależności czy dam np. 200 czy 180. Aha, te dziwności dzieją się bez używania w ogóle uarta, więc w zasadzie te funkcje które wkleiłem nie są używane. Skutki zawsze takie same w zależności od długości, czyli przy 180 takie same efekty i przy 200 też zawsze takie same. Ram i flash zajęty w około 20%. Pytanie moje jest, co jest grane?
Wydaje mi się, że przy dłuższej tablicy nadpisują się jakieś zmienne ;/ Zawsze wydawało mi się, że długość tablicy może być dowolna byle by zmienna indeksująca była odpowiedniego typu, tutaj nawet ten problem nie wchodzi w gre bo te funkcje nawet się nie wywołują.
Martwi mnie w ogóle występowanie tego problemu, niby przy 64 jest ok ale kto wie czy przy rozwijaniu programu się coś nie pojawi. No a największy problem jest taki że nie wiem jaki jest powód tego stanu rzeczy
inventco.eu - poprawiłem temat postu - regulamin p.11.1
Dzisiaj natknąłem się na taki dziwny problem. Otóż, mam ja sobie atmege 1280 i zadeklarowaną tablicę do uarta UARTBuffer[] tak jak niżej
#define BUFF_SIZE 8
volatile unsigned char UART0recv, UARTBuffer[BUFF_SIZE], UARTCount, UARTGet, rx_counter;
// Zmienne globalne, reszta
unsigned char a;
ISR(USART_RXC_vect)
{
UARTBuffer[UARTCount] = UDR;
UARTCount++;
rx_counter++;
if ( UARTCount == BUFF_SIZE )
{
UARTCount = 0;
}
}
void uart_init(void)
{
UBRRL=25;
UCSRB=_BV(RXEN)|_BV(TXEN)|_BV(RXCIE);
UCSRC=_BV(URSEL)|_BV(UCSZ1)|_BV(UCSZ0);
}
void uart_putc(unsigned char ch)
{
loop_until_bit_is_set(UCSRA,UDRE);
UDR=ch;
}
unsigned char uart_getc (void)
{
if (UARTGet==BUFF_SIZE)
{
UARTGet = 0;
}
rx_counter--;
return (UARTBuffer[UARTGet++]);
}
Cały program ma jakieś 3k linii kodu więc nie będę go tu umieszczać
Martwi mnie w ogóle występowanie tego problemu, niby przy 64 jest ok ale kto wie czy przy rozwijaniu programu się coś nie pojawi. No a największy problem jest taki że nie wiem jaki jest powód tego stanu rzeczy
inventco.eu - poprawiłem temat postu - regulamin p.11.1
