string.h u C za AVR

R

Rooftop

Guest
Hi all, imam mali problem ovdje s nekim kod koristeći C za AVR

# Include <string.h>
mychar char [30];
strcpy (mychar, 'looong znak');

je rekao neke pogreške kao što je lik konstanta je preduga.Im 'koristeći Codevision, ugoditi pomoć mene, jer ja sam pri korištenju Keill (za 8051) to dobro radi, iako mi je potrebno za promjenu "na". Ugoditi pomoć mene, jer ovo je moj prvi projekt koristeći AVR ATMEGA8535.

kada sam pomoću

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

Internet works.Please reći mene kako za napraviti Internet za više od dva znakaStvarno hvala

Srdačan pozdrav

 
Probajte ovo ...

const char hello [] = "Hello World";

umjesto kopiranja string u polju, to učiniti direktno!

 
to još uvijek nije radi ...

ja pravedan ištanje to izraditi niz kao parametra prolaze ali izgleda da to nije posao kao što sam očekivala, iako ja mogu učiniti da u Keil.
ovo je moj propust kod:

Chip Tip: ATmega8535
Vrsta programa: Primjena
Sat frekvencija: 11,059200 MHz
Memorija model: Male
Vanjski SRAM size: 0
Podaci Baterija: 128
*********************************************/

# Include <mega8535.h>
# Include <string.h>

/ / I2C bus funkcija
# ASM
. Equ __i2c_port = 0x15
. Equ __sda_bit = 0
. Equ __scl_bit = 1
# Endasm
# Include <i2c.h>
# Include <string.h>

/ / Objavite svoje globalne varijable ovdje
# Define RS PORTA.1
# Define RW PORTA.3
# Define EN PORTA.5
# Define PODATAKA PORTB
# Define Zauzeto PINB.7

void poslati (void);
void wait_LCD (void);
void clear_LCD (void);
void LCD_init (void);
void print_LCD (void);void slanje ()
(
EN = 1;
EN = 0;
)void clear_LCD ()
(
RS = 0;
DATA = 0x01;
slanje ();
wait_LCD ();
)void wait_LCD ()
(
do
(
EN = 0;
RS = 0;
RW = 1;
DDRB.7 = 0;
EN = 1;
Dok) (Busy);
EN = 0;
RW = 0;
DDRB.7 = 1;

)void LCD_init ()
(
RS = 0;
DATA = 0x38;
slanje ();
wait_LCD ();
RS = 0;
DATA = 0x0E;
slanje ();
wait_LCD ();
RS = 0;
DATA = 0x06;
slanje ();
wait_LCD ();
)

void print_LCD ()
(
RS = 1;
DATA = "ja";
slanje ();
wait_LCD ();
)

void main (void)
(

/ / Objavite svoje lokalne varijable ovdje

/ / Ulazni / Izlazni priključci inicijalizacije
/ / Inicijalizacija Luka
/ / Func0 = Out Out Func2 Func1 = = = Out Out Func3 Func4 = Out Out Func6 Func5 = = = Out Out Func7
/ / State0 = 0 = 0 State1 State2 = 0 = 0 State3 State4 = 0 = 0 State5 State6 = 0 = 0 State7
PORTA = 0x00;
DDRA = 0xff;

/ / Inicijalizacija Port B
/ / Func0 = Out Out Func2 Func1 = = = Out Out Func3 Func4 = Out Out Func6 Func5 = = = Out Out Func7
/ / State0 = 0 = 0 State1 State2 = 0 = 0 State3 State4 = 0 = 0 State5 State6 = 0 = 0 State7
PORTB = 0x00;
DDRB = 0xff;

/ / Inicijalizacija Port C
/ / Func0 = U = U Func1 Func2 = U = U Func3 Func4 = U = U Func5 Func6 = U = U Func7
/ / State0 = T = T State1 State2 = T = T State3 State4 = T = T State5 State6 = T = T State7
PORTC = 0x00;
DDRC = 0x00;

/ / Inicijalizacija Port D
/ / Func0 = U = U Func1 Func2 = U = U Func3 Func4 = U = U Func5 Func6 = U = U Func7
/ / State0 = T = T State1 State2 = T = T State3 State4 = T = T State5 State6 = T = T State7
PORTD = 0x00;
DDRD = 0x00;

/ / Timer / Counter 0 inicijalizacija
/ / Sat Izvor: satu
/ / Sat vrijednost: Timer 0 Zaustavljen
/ / Način rada: Normal top = FFH
/ / Izlaz OC0: Disconnected
TCCR0 = 0x00;
TCNT0 = 0x00;
OCR0 = 0x00;

/ / Timer / Counter 1 inicijalizacije
/ / Sat Izvor: satu
/ / Sat vrijednost: Timer 1 Zaustavljen
/ / Način rada: Normal top = FFFFh
/ / Izlaz OC1A: Odspojeni.
/ / Izlaz OC1B: Odspojeni.
/ / Buka brisalo: Off
/ / Ulaz Hvatanje na Falling Edge
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0x00;
TCNT1L = 0x00;
OCR1AH = 0x00;
OCR1AL = 0x00;
OCR1BH = 0x00;
OCR1BL = 0x00;

/ / Timer / Counter 2 inicijalizacije
/ / Sat Izvor: satu
/ / Sat vrijednost: Timer 2 Zaustavljen
/ / Način rada: Normal top = FFH
/ / Izlaz OC2: Disconnected
ASSR = 0x00;
TCCR2 = 0x00;
TCNT2 = 0x00;
OCR2 = 0x00;

/ / Vanjski Prekid (s) inicijalizacije
/ / INT0: Off
/ / INT1: Off
/ / INT2: Off
MCUCR = 0x00;
MCUCSR = 0x00;

/ / Vrijeme (s) / Counter (s) Prekid (s) inicijalizacije
TIMSK = 0x00;

/ / Analogni Komparator inicijalizacije
/ / Analogni Komparator: Off
/ / Analogni ulaz Komparator bilježenja by Timer / Counter 1: Off
/ / Analogni izlaz Komparator: Off
ACSR = 0x80;
SFIOR = 0x00;

/ / I2C bus inicijalizacije
i2c_init ();
LCD_init ();
clear_LCD ();

dok je (1)
(
/ / Upišite svoj kod ovdje
print_LCD ();
);
)

ovaj kod je rad ...
i kad želim promijeniti print_LCD () se:

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

i promijeniti glavnog programa malo:

mychar char [20];
strcpy (mychar, 'Hello World');
dok je (1)
(
print_LCD (mychar);
)Internet popuštanje mene greška što sam spomenuo gore.Hvala za odgovor i molimo ...ja još uvijek potrebna vaša pomoć.

Srdačan pozdrav

 
strcpy (mychar, 'looong znak');
To je krivo, jer strcpy očekuje niz.Koristite "looong znak" umjesto.
Također je krivo, jer 'looong znak' je ilegalni karakter duljina konstantna.

strcpy (mychar, 'Hello World');
Isti problem.Koristite "Hello World" umjesto.

strcpy (mychar, 'LO');
Isti problem.Koristite "LO" umjesto.
'LO' je pravni karakter stalne, tako da kompajler ne emitira poruke o pogrešci, ali još uvijek prolazite krivu stvar za strcpy.

Vaše dugo izvorni kod je teško pročitati.Uredite svoju poruku i ubacite [

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

kod]
..... [/ code]
tagova oko nje tako da možemo vidjeti svoje uvlačenje.

 
Šifra:# Include <mega8535.h>

# Include <string.h>/ / I2C bus funkcija

# ASM

. Equ __i2c_port = 0x15

. Equ __sda_bit = 0

. Equ __scl_bit = 1

# Endasm

# Include <i2c.h>

# Include <string.h>/ / Objavite svoje globalne varijable ovdje

# Define RS PORTA.1

# Define RW PORTA.3

# Define EN PORTA.5

# Define PODATAKA PORTB

# Define Zauzeto PINB.7void poslati (void);

void wait_LCD (void);

void clear_LCD (void);

void LCD_init (void);

void print_LCD (char mychar []);void slanje ()

(

EN = 1;

EN = 0;

)void clear_LCD ()

(

RS = 0;

DATA = 0x01;

slanje ();

wait_LCD ();

)void wait_LCD ()

(

činiti

(

EN = 0;

RS = 0;

RW = 1;

DDRB.7 = 0;

EN = 1;

Dok) (Busy);

EN = 0;

RW = 0;

DDRB.7 = 1;)void LCD_init ()

(

RS = 0;

DATA = 0x38;

slanje ();

wait_LCD ();

RS = 0;

DATA = 0x0E;

slanje ();

wait_LCD ();

RS = 0;

DATA = 0x06;

slanje ();

wait_LCD ();

)void print_LCD (char mychar [])

(

unsigned int i;

RS = 1;

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

(

DATA = mychar ;

slanje ();

wait_LCD ();

)

)void main (void)

(

/ / Char mychar [20];

/ / Objavite svoje lokalne varijable ovdje/ / Ulazni / Izlazni priključci inicijalizacije

/ / Inicijalizacija Luka

/ / Func0 = Out Out Func2 Func1 = = = Out Out Func3 Func4 = Out Out Func6 Func5 = = = Out Out Func7

/ / State0 = 0 = 0 State1 State2 = 0 = 0 State3 State4 = 0 = 0 State5 State6 = 0 = 0 State7

PORTA = 0x00;

DDRA = 0xff;/ / Inicijalizacija Port B

/ / Func0 = Out Out Func2 Func1 = = = Out Out Func3 Func4 = Out Out Func6 Func5 = = = Out Out Func7

/ / State0 = 0 = 0 State1 State2 = 0 = 0 State3 State4 = 0 = 0 State5 State6 = 0 = 0 State7

PORTB = 0x00;

DDRB = 0xff;/ / Inicijalizacija Port C

/ / Func0 = U = U Func1 Func2 = U = U Func3 Func4 = U = U Func5 Func6 = U = U Func7

/ / State0 = T = T State1 State2 = T = T State3 State4 = T = T State5 State6 = T = T State7

PORTC = 0x00;

DDRC = 0x00;/ / Inicijalizacija Port D

/ / Func0 = U = U Func1 Func2 = U = U Func3 Func4 = U = U Func5 Func6 = U = U Func7

/ / State0 = T = T State1 State2 = T = T State3 State4 = T = T State5 State6 = T = T State7

PORTD = 0x00;

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

/ / Sat Izvor: satu

/ / Sat vrijednost: Timer 0 Zaustavljen

/ / Način rada: Normal top = FFH

/ / Izlaz OC0: Disconnected

TCCR0 = 0x00;

TCNT0 = 0x00;

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

/ / Sat Izvor: satu

/ / Sat vrijednost: Timer 1 Zaustavljen

/ / Način rada: Normal top = FFFFh

/ / Izlaz OC1A: Odspojeni.

/ / Izlaz OC1B: Odspojeni.

/ / Buka brisalo: Off

/ / Ulaz Hvatanje na Falling Edge

TCCR1A = 0x00;

TCCR1B = 0x00;

TCNT1H = 0x00;

TCNT1L = 0x00;

OCR1AH = 0x00;

OCR1AL = 0x00;

OCR1BH = 0x00;

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

/ / Sat Izvor: satu

/ / Sat vrijednost: Timer 2 Zaustavljen

/ / Način rada: Normal top = FFH

/ / Izlaz OC2: Disconnected

ASSR = 0x00;

TCCR2 = 0x00;

TCNT2 = 0x00;

OCR2 = 0x00;/ / Vanjski Prekid (s) inicijalizacije

/ / INT0: Off

/ / INT1: Off

/ / INT2: Off

MCUCR = 0x00;

MCUCSR = 0x00;/ / Vrijeme (s) / Counter (s) Prekid (s) inicijalizacije

TIMSK = 0x00;/ / Analogni Komparator inicijalizacije

/ / Analogni Komparator: Off

/ / Analogni ulaz Komparator bilježenja by Timer / Counter 1: Off

/ / Analogni izlaz Komparator: Off

ACSR = 0x80;

SFIOR = 0x00;/ / I2C bus inicijalizacije

i2c_init ();

LCD_init ();

clear_LCD ();dok je (1)

(

mychar char [100];

/ / Upišite svoj kod ovdje

strcpy (mychar, "Hello World");

print_LCD (mychar);

);

)
 
To je mnogo lakše za čitanje.

Ja odmah ne vide krivca, no ja nisam upoznat s vašim kompajler.

Vidim mychar koristi nekoliko mjesta.Kojim je to tužiti se o?

Upotrijebili ste mychar [] na dva mjesta.Pokušajte ih mijenja u * mychar da li kompajler postaje sretnija.

Te su string.h dvaput.To ne bi trebalo boljeti, ali tko zna.

 
to još uvijek nije 'funkcionirati, ali ja stvarno ono što je kazano hvala za vaša pomoć.Mogu li znati što rod od kompajlera učili?
Puno hvala za vaša pomoć još jednomSrdačan pozdrav

 
Koristite li codevision?
ako je koristite LCD funkcija codevision je bolje.
koristiti
mychar char [] = "Hello World";

 
Hvala za vaše podatke.Znam da će to funkcionira ako koristite LCD funkciju.Ali, to izgleda kao LCD je u 4 bitnom modu, a ja sada pokušavate koristiti 8 bitni način.Inače ovo je moj prvi eksperiment sa AVR na taj način želim razumjeti io bolje.
Hvala za sve vaše pomoći.
Ako netko zna moju pogrešku molim ispravite me.

Srdačan pozdrav

 
Bok,
Ja haved isti problem, je li vaš program radi?
Ako da, molimo pošaljite izvorne datoteke.
Pozdravi.

 

Welcome to EDABoard.com

Sponsor

Back
Top