Witam wszystkich!
Mam pewien problem, który co prawda rozwiązałem, ale rozwiązanie te mnie nie zadowala. Do rzeczy. Postanowiłem napisać funkcję, która jako argument pobiera napis i po znaku wklada do UDR'a. Najpierw mój program wyglądał tak:
I w takim wypadku dostaje tylko od uC tylko 3 pierwsze znaki (abc) i tak w kolko. Sprawa się rozwiazuje jesli funkcja pobiera dwa argumenty: napis i jego dlugosc... Oto dzialajacy kod:
Aczkolwiek jak pisałem wcześniej; takie rozwiazanie mnie nie zadowala, poniewaz przed kazdym wyslaniem txtu, bede musial pisac linijke, ktora zmierzy jego dlugosc, co powoduje powiekszenie rozmiaru kodu.
Czy macie na to jakies rozwiazanie ?
Pozdrawiam!
Mam pewien problem, który co prawda rozwiązałem, ale rozwiązanie te mnie nie zadowala. Do rzeczy. Postanowiłem napisać funkcję, która jako argument pobiera napis i po znaku wklada do UDR'a. Najpierw mój program wyglądał tak:
#define F_CPU 1000000L
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#include <avr/io.h>
#include <util/delay.h>
void USART_Init( unsigned int ubrr)
{
UBRRL = 0x06; // <-- baud rate == 9600
/* Zalaczenie wysylania i odbierania */
UCSRB = (1<<4)|(1<<3);
}
void send_txt(char text[])
{
for(int i=0; i<=sizeof(text); i++)
{
UDR = text[i];
_delay_ms(100);
}
}
int main(void)
{
USART_Init(MYUBRR);
OSCCAL=176;
while(1)
{
send_txt("abecadlo z pieca spadlo");
_delay_ms(1000);
}
}
I w takim wypadku dostaje tylko od uC tylko 3 pierwsze znaki (abc) i tak w kolko. Sprawa się rozwiazuje jesli funkcja pobiera dwa argumenty: napis i jego dlugosc... Oto dzialajacy kod:
(...)
void send_txt(char text[], int ileznakow)
{
for(int i=0; i<=ileznakow; i++)
{
UDR = text[i];
_delay_ms(100);
}
}
int main(void)
{
USART_Init(MYUBRR);
OSCCAL=176;
while(1)
{
int a = sizeof("abecadlo z pieca spadlo");
send_txt("abecadlo z pieca spadlo", a);
_delay_ms(1000);
}
}Aczkolwiek jak pisałem wcześniej; takie rozwiazanie mnie nie zadowala, poniewaz przed kazdym wyslaniem txtu, bede musial pisac linijke, ktora zmierzy jego dlugosc, co powoduje powiekszenie rozmiaru kodu.
Czy macie na to jakies rozwiazanie ?
Pozdrawiam!