[AVRGCC] Konwersja char, int, float do char na wskaznikach.

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

[AVRGCC] Konwersja char, int, float do char na wskaznikach.

Post autor: mictronic » 14 cze 2014, 0:20

Witam, probuje sobie zrobic uniwersalna funkcje do ladowania zmiennych 8-16-32 bit do bufora nadawczego uart czyli 8 bit, dodatkowo funkcja ma zwiekszac index do bufora nadawczego.

Po drugiej strone urzadzenia konwertuje dwa chary na int w taki sposob

Kod: Zaznacz cały

VUV=uart_rx_buf[2];
VUV|=(uart_rx_buf[3]<<8);
i tak tez ale odwrotnie konwertowalem w nadajniku, jednak kod sie powaznie rozrastal przy dodawaniu kolejnych zmiennych do wyslania.

Napisałęm funkcje, do ktorej wrzucam moja zmienna 16 bit val, pobiera jej adres, kopiuje do bufora pierwszy bajt, zwieksza adres i kopiuje do nastepnej komorki bufora.
Zastanawiam sie w czym problem bo po drugiej stronie odbieram kompletnie co innego.

Czy program jest poprawny? Pierwszy raz uzywam wskaznikow i mam pewne watpliwosci.

Kod: Zaznacz cały


unsigned char add_to_tx_buffer(void *val, unsigned char *buf_tx, unsigned char idx, unsigned char bytes)
{

unsigned char *val_ptr;

val_ptr=(unsigned char*)&val;

	for(unsigned char i=0;i<bytes;i++)
	{
	
		buf_tx[idx]=*val_ptr;
		val_ptr++;
		
		idx++;
		
	}
	
	
	return idx;
}


void uart_send( void ) 
{

char *ptr;
long int buf_send;
unsigned char buf_idx=0;

	if(uart_data_tx_idx==0)
	{


		
		//uart_tx_buf[0]=Num_Cells;
		
		//uart_tx_buf[1]=Num_ltcs;
		
		buf_idx+=add_to_tx_buffer(&Num_Cells, uart_tx_buf, buf_idx, 1);
		
		buf_idx+=add_to_tx_buffer(&Num_ltcs, uart_tx_buf, buf_idx, 1);
		
		buf_idx+=add_to_tx_buffer(&VUV_const, uart_tx_buf, buf_idx, 2);
		
		buf_idx+=add_to_tx_buffer(&VOV_const, uart_tx_buf, buf_idx, 2);
		
.....


Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 14 cze 2014, 12:24

Problem rozwiazalem poprzez przekazywanie adresu zmiennej idx, zamiast zwracac ja na koncu funkcji.

ODPOWIEDZ