string.h in C per AVR

R

Rooftop

Guest
Ciao a tutti, ho un piccolo problema qui con un codice in C per AVR

# include <string.h>
char MyChar [30];
strcpy (MyChar, 'looong carattere');

ha detto qualche errore, come costante carattere è troppo lungo.Sto utilizzando Codevision, please help me, perché quando sto usando Keill (per 8051) funziona bene anche se ho bisogno di cambiare 'a ". Please help me, perché questo è il mio primo progetto con AVR ATMEGA8535.

quando si utilizzano i

# include <string.h>
char MyChar [30];
strcpy (MyChar, 'LO');

it works.Please dirmi come fare per più di due caratteriProprio grazie

Con i migliori saluti

 
Prova questo ...

const char ciao [] = "Ciao Mondo";

invece di copiare la stringa per l'array, farlo direttamente!

 
ancora non si lavora ...

Voglio solo fare una stringa come il passaggio di parametri, ma sembra che non ha funzionato come mi aspettavo, anche se posso farlo in Keil.
questo è il mio codice predefinito:

Tipo di chip: ATmega8535
Tipo di Programma: Applicazione
Frequenza di clock: 11,059200 MHz
Modello di memoria: Small
Dimensioni esterne SRAM: 0
Dati relativi alle dimensioni Stack: 128
*********************************************/

# include <mega8535.h>
# include <string.h>

/ / I2C Bus funzioni
# asm
. equ __i2c_port = 0x15
. equ __sda_bit = 0
. equ __scl_bit = 1
# endasm
# include <i2c.h>
# include <string.h>

/ / Dichiara le variabili globali qui
# define RS PORTA.1
# define RW PORTA.3
# define IT PORTA.5
# define DATA PORTB
# define Busy PINB.7

void send (void);
void wait_LCD (void);
void clear_LCD (void);
void LCD_init (void);
void print_LCD (void);void send ()
(
IT = 1;
IT = 0;
)void clear_LCD ()
(
RS = 0;
DATI = 0x01;
send ();
wait_LCD ();
)void wait_LCD ()
(
fare
(
IT = 0;
RS = 0;
RW = 1;
DDRB.7 = 0;
IT = 1;
) while (occupato);
IT = 0;
RW = 0;
DDRB.7 = 1;

)void LCD_init ()
(
RS = 0;
DATI = 0x38;
send ();
wait_LCD ();
RS = 0;
DATI = 0x0E;
send ();
wait_LCD ();
RS = 0;
DATI = 0x06;
send ();
wait_LCD ();
)

void print_LCD ()
(
RS = 1;
DATA = 'I';
send ();
wait_LCD ();
)

void main (void)
(

/ / Dichiara le variabili locali qui

/ / Input / Output Ports inizializzazione
/ / Port A inizializzazione
/ / Func0 = Out FUNC1 = Out Func2 = Out func3 = Out func4 = Out Func5 = Out Func6 = Out Func7 = Out
/ / State0 = 0 STATE1 = 0 STATE2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
PORTA = 0x00;
DDRA = 0xFF;

/ / Port inizializzazione B
/ / Func0 = Out FUNC1 = Out Func2 = Out func3 = Out func4 = Out Func5 = Out Func6 = Out Func7 = Out
/ / State0 = 0 STATE1 = 0 STATE2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
PORTB = 0x00;
DDRB = 0xFF;

/ / Port inizializzazione C
/ / Func0 = A = FUNC1 In Func2 = In func3 = In func4 = In Func5 = In Func6 = In Func7 = In
/ / State0 = STATE1 T = STATE2 T = State3 T = State4 T = State5 T = State6 T = State7 T = T
PORTC = 0x00;
DDRC = 0x00;

/ / Port inizializzazione D
/ / Func0 = A = FUNC1 In Func2 = In func3 = In func4 = In Func5 = In Func6 = In Func7 = In
/ / State0 = STATE1 T = STATE2 T = State3 T = State4 T = State5 T = State6 T = State7 T = T
PORTD = 0x00;
DDRD = 0x00;

/ / Timer / Counter 0 inizializzazione
/ / Sorgente di clock: System Clock
/ / Valore di Clock: Timer 0 stopped
/ / Mode: Normale top = FFh
/ / Output OC0: Disconnected
TCCR0 = 0x00;
TCNT0 = 0x00;
OCR0 = 0x00;

/ / Timer / Counter 1 inizializzazione
/ / Sorgente di clock: System Clock
/ / Valore di Clock: Timer 1 Stopped
/ / Mode: Normale top = FFFFh
/ / Output OC1A: discontinui.
/ / Output OC1B: discontinui.
/ / Rumore Canceler: Off
/ / Input Capture su Falling Edge
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;

/ / Timer / Counter 2 inizializzazione
/ / Sorgente di clock: System Clock
/ / Valore di clock: 2 Timer Stopped
/ / Mode: Normale top = FFh
/ / Output OC2: Disconnected
ASSR = 0x00;
TCCR2 = 0x00;
TCNT2 = 0x00;
OCR2 = 0x00;

/ / External Interrupt (s) di inizializzazione
/ / INT0: Off
/ / INT1: Off
/ / INT2: Off
MCUCR = 0x00;
MCUCSR = 0x00;

/ / Timer (s) / Counter (s) Interrupt (s) di inizializzazione
TIMSK = 0x00;

/ / Analog Comparator inizializzazione
/ / Analog Comparator: Off
/ / Analog Comparator Input Capture da Timer / Counter 1: Off
/ / Analog Comparator Output: Off
ACSR = 0x80;
SFIOR = 0x00;

/ / Inizializzazione I2C Bus
i2c_init ();
LCD_init ();
clear_LCD ();

while (1)
(
/ / Inserire qui il codice
print_LCD ();
);
)

questo codice funziona ...
e quando voglio cambiare la print_LCD () di essere:

void print_LCD (MyChar char []);
void print_LCD (MyChar char [])
(
unsigned int i;
RS = 1;
for (i = 0; i <= strlen (MyChar) -1; i )
(
DATA = MyChar ;
send ();
wait_LCD ();
)
)

e modificare il programma principale un po ':

char MyChar [20];
strcpy (MyChar, 'CIAO MONDO');
while (1)
(
print_LCD (MyChar);
)mi dà l'errore che ho citato sopra.Grazie per la risposta e per favore ...Ho ancora bisogno del tuo aiuto.

Con i migliori saluti

 
strcpy (MyChar, 'looong carattere');
Questo è sbagliato, perché si aspetta una stringa strcpy.L'uso "looong carattere invece.
E 'anche sbagliato, perché' looong carattere 'è un carattere illegale lunghezza costante.

strcpy (MyChar, 'CIAO MONDO');
Stesso problema.L'uso "CIAO MONDO", invece.

strcpy (MyChar, 'LO');
Stesso problema.L'uso "LO", invece.
'LO' è un personaggio legale costante, quindi il compilatore non emette un messaggio di errore, ma non si è ancora passare la cosa sbagliata da strcpy.

Il codice sorgente a lungo è difficile da leggere.Si prega di modificare il tuo messaggio e inserire [

..... [/code]
tags around it so we can see your indenting.

]
..... [codice / code]
tags intorno ad essa in modo che possiamo vedere il tuo rientro.

 
Codice:# include <mega8535.h>

# include <string.h>/ / I2C Bus funzioni

# asm

. equ __i2c_port = 0x15

. equ __sda_bit = 0

. equ __scl_bit = 1

# endasm

# include <i2c.h>

# include <string.h>/ / Dichiara le variabili globali qui

# define RS PORTA.1

# define RW PORTA.3

# define IT PORTA.5

# define DATA PORTB

# define Busy PINB.7void send (void);

void wait_LCD (void);

void clear_LCD (void);

void LCD_init (void);

void print_LCD (MyChar char []);void send ()

(

IT = 1;

IT = 0;

)void clear_LCD ()

(

RS = 0;

DATI = 0x01;

send ();

wait_LCD ();

)void wait_LCD ()

(

fare

(

IT = 0;

RS = 0;

RW = 1;

DDRB.7 = 0;

IT = 1;

) while (occupato);

IT = 0;

RW = 0;

DDRB.7 = 1;)void LCD_init ()

(

RS = 0;

DATI = 0x38;

send ();

wait_LCD ();

RS = 0;

DATI = 0x0E;

send ();

wait_LCD ();

RS = 0;

DATI = 0x06;

send ();

wait_LCD ();

)void print_LCD (MyChar char [])

(

unsigned int i;

RS = 1;

for (i = 0; i <= strlen (MyChar) -1; i )

(

DATA = MyChar ;

send ();

wait_LCD ();

)

)void main (void)

(

/ / MyChar char [20];

/ / Dichiara le variabili locali qui/ / Input / Output Ports inizializzazione

/ / Port A inizializzazione

/ / Func0 = Out FUNC1 = Out Func2 = Out func3 = Out func4 = Out Func5 = Out Func6 = Out Func7 = Out

/ / State0 = 0 STATE1 = 0 STATE2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0

PORTA = 0x00;

DDRA = 0xFF;/ / Port inizializzazione B

/ / Func0 = Out FUNC1 = Out Func2 = Out func3 = Out func4 = Out Func5 = Out Func6 = Out Func7 = Out

/ / State0 = 0 STATE1 = 0 STATE2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0

PORTB = 0x00;

DDRB = 0xFF;/ / Port inizializzazione C

/ / Func0 = A = FUNC1 In Func2 = In func3 = In func4 = In Func5 = In Func6 = In Func7 = In

/ / State0 = STATE1 T = STATE2 T = State3 T = State4 T = State5 T = State6 T = State7 T = T

PORTC = 0x00;

DDRC = 0x00;/ / Port inizializzazione D

/ / Func0 = A = FUNC1 In Func2 = In func3 = In func4 = In Func5 = In Func6 = In Func7 = In

/ / State0 = STATE1 T = STATE2 T = State3 T = State4 T = State5 T = State6 T = State7 T = T

PORTD = 0x00;

DDRD = 0x00;/ / Timer / Counter 0 inizializzazione

/ / Sorgente di clock: System Clock

/ / Valore di Clock: Timer 0 stopped

/ / Mode: Normale top = FFh

/ / Output OC0: Disconnected

TCCR0 = 0x00;

TCNT0 = 0x00;

OCR0 = 0x00;/ / Timer / Counter 1 inizializzazione

/ / Sorgente di clock: System Clock

/ / Valore di Clock: Timer 1 Stopped

/ / Mode: Normale top = FFFFh

/ / Output OC1A: discontinui.

/ / Output OC1B: discontinui.

/ / Rumore Canceler: Off

/ / Input Capture su Falling Edge

TCCR1A = 0x00;

TCCR1B = 0x00;

TCNT1H = 0x00;

TCNT1L = 0x00;

OCR1AH = 0x00;

OCR1AL = 0x00;

OCR1BH = 0x00;

OCR1BL = 0x00;/ / Timer / Counter 2 inizializzazione

/ / Sorgente di clock: System Clock

/ / Valore di clock: 2 Timer Stopped

/ / Mode: Normale top = FFh

/ / Output OC2: Disconnected

ASSR = 0x00;

TCCR2 = 0x00;

TCNT2 = 0x00;

OCR2 = 0x00;/ / External Interrupt (s) di inizializzazione

/ / INT0: Off

/ / INT1: Off

/ / INT2: Off

MCUCR = 0x00;

MCUCSR = 0x00;/ / Timer (s) / Counter (s) Interrupt (s) di inizializzazione

TIMSK = 0x00;/ / Analog Comparator inizializzazione

/ / Analog Comparator: Off

/ / Analog Comparator Input Capture da Timer / Counter 1: Off

/ / Analog Comparator Output: Off

ACSR = 0x80;

SFIOR = 0x00;/ / Inizializzazione I2C Bus

i2c_init ();

LCD_init ();

clear_LCD ();while (1)

(

char MyChar [100];

/ / Inserire qui il codice

strcpy (MyChar, "CIAO MONDO");

print_LCD (MyChar);

);

)
 
Che è molto più facile da leggere.

Io non vedere subito il colpevole, però io non sono a conoscenza con il compilatore particolare.

Vedo MyChar utilizzati diversi luoghi.Quale linea ha fatto si lamentano?

Hai usato MyChar [] in due punti.Si potrebbe provare a cambiare a * MyChar per vedere se il compilatore diventa più felici.

È stato incluso string.h due volte.Che non dovrebbe male, ma chi lo sa.

 
ancora non ha funzionato, ma ho davvero dire grazie per il vostro aiuto.Posso sapere che tipo di compilatore ha utilizzato?
Grazie molto per il vostro aiuto, ancora una voltaCon i migliori saluti

 
Stai usando codevision?
se lo è, l'uso LCD funzione di codevision è meglio.
utilizzo
char MyChar [] = "CIAO MONDO";

 
Grazie per i tuoi dati.So che esso funziona se uso la funzione LCD.Ma sembra che il display LCD è a 4 bit e ora tenta di utilizzare 8 bit.Comunque questo è il mio primo esperimento con avr quindi io voglio capire il meglio io.
Grazie per tutto il vostro aiuto.
Se qualcuno conosce il mio errore per favore correggetemi.

Con i migliori saluti

 
Salve,
Servono ho lo stesso problema, ha fatto il tuo programma di lavoro?
In caso affermativo, si prega di inviare il file di origine.
Saluti.

 

Welcome to EDABoard.com

Sponsor

Back
Top