Mam problem z przkeształceniem typu danych ASCII pobiernach przez urat na int.
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define FCPU 8000000 //częstotliwość oscylatora CPU
#define VUART 38400 //prędkość transmisji [b/s]
#define VUBRR FCPU/(VUART*16)-1 //wpis do UBRR dla VUART
//#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) konwersja na nowy dostęp
//#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) konwersja na nowy dostęp
unsigned char nr_wyj,nr_wej;
int onoff;int j=0;
char volatile iofifosio; //wskaźnik odczytu kolejki UART-u
char volatile izfifosio; //wskaźnik zapisu kolejki UART-u
char fifosio[32]; //kolejka UART-u
unsigned char volatile ldanych=0; //liczba danych w buforze fifosio
SIGNAL(SIG_UART_RECV) //procedura obsługi odbiornika UART-u
{
if(ldanych<32)
{
fifosio[izfifosio]=UDR; //zapamiętaj odebrany znak
izfifosio==31?izfifosio=0:++izfifosio; //inkrementacja modulo 32
ldanych++;
}
}
int main (void)
{
UBRR=VUBRR; //ustaw prędkość transmisji
UCR=1<<RXCIE | 1<<TXCIE | 1<<RXEN; //zezwolenie na przerwania od odbiornika i nadajnika, zezwolenie na odbiór i nadawanie
sei(); //włącz przerwania
izfifosio=0; //inicjuj zmienne
iofifosio=0; //inicjuj zmienne
DDRB=0xff; //konfiguracja wszystkich wyprowadzeń portu B w trybie wyjścia
PORTB=0xff; //wyłączenie wszystkich wyprowadzeń wyjść
DDRD=0x00; //konfiguracja wszystkich wyprowadzeń portu D w trybie wejścia
PORTD=0xff; //właczenie podciągania wejść brak rezystorów podciągających
while(1)
{char * zn=UDR;
j=atoi(zn);
}
}
Podczas kompilacji pojawia się komunikat warning: initialization makes pointer from integer without a cast. Jeżeli char *zn = UDR; zastąpię char * zn ="1023u"; wszystko jest ok
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define FCPU 8000000 //częstotliwość oscylatora CPU
#define VUART 38400 //prędkość transmisji [b/s]
#define VUBRR FCPU/(VUART*16)-1 //wpis do UBRR dla VUART
//#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) konwersja na nowy dostęp
//#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) konwersja na nowy dostęp
unsigned char nr_wyj,nr_wej;
int onoff;int j=0;
char volatile iofifosio; //wskaźnik odczytu kolejki UART-u
char volatile izfifosio; //wskaźnik zapisu kolejki UART-u
char fifosio[32]; //kolejka UART-u
unsigned char volatile ldanych=0; //liczba danych w buforze fifosio
SIGNAL(SIG_UART_RECV) //procedura obsługi odbiornika UART-u
{
if(ldanych<32)
{
fifosio[izfifosio]=UDR; //zapamiętaj odebrany znak
izfifosio==31?izfifosio=0:++izfifosio; //inkrementacja modulo 32
ldanych++;
}
}
int main (void)
{
UBRR=VUBRR; //ustaw prędkość transmisji
UCR=1<<RXCIE | 1<<TXCIE | 1<<RXEN; //zezwolenie na przerwania od odbiornika i nadajnika, zezwolenie na odbiór i nadawanie
sei(); //włącz przerwania
izfifosio=0; //inicjuj zmienne
iofifosio=0; //inicjuj zmienne
DDRB=0xff; //konfiguracja wszystkich wyprowadzeń portu B w trybie wyjścia
PORTB=0xff; //wyłączenie wszystkich wyprowadzeń wyjść
DDRD=0x00; //konfiguracja wszystkich wyprowadzeń portu D w trybie wejścia
PORTD=0xff; //właczenie podciągania wejść brak rezystorów podciągających
while(1)
{char * zn=UDR;
j=atoi(zn);
}
}
Podczas kompilacji pojawia się komunikat warning: initialization makes pointer from integer without a cast. Jeżeli char *zn = UDR; zastąpię char * zn ="1023u"; wszystko jest ok