Witam mam pewien problem. Otóż umiem Bascoma bardzo dobrze umnie tak sobie ASM no i ucze sie C kilka małych programów już napisałem ale coś nie działają mi procedury. Z tego co wiem to procedury pisze sobie w oddzielnym pliku u mnie procedury.c i mmc.c do mmc.c jest dołączony mmc.h a program główny to laser.c i dołączony laser.h z definicjami otoz port szeregowy już mi dziala(USART) ale w mmc.h była sekcja "Prototypy funkcji", i jak one były czyli same nazwy funkcji(procedur) wypisane. I własnie jak odwoływał się program główny do tych procedur w mmc.c to sie procesor zawieszał dopiero jak usunolem "prototypy funkcji" z mmc.h(zrobiłem je tylko jako komentarz) to program poszedł dalej ale teraz zacina sie przy "flush_mmc" nie wchodzi juz do tej procedury. Proszę o pomoc program nie jest mój bo nie obsługiwałem jeszcze karty sd. Program rozumiem symulacja w AVR Studio działa. Używam AVR Studio 4.13 i najnowsze WINAVR. Dołączam pliki. Debuguje sobie uartem dlatego są powstawiałem print(x)
Pozdrawiam
ps. usunołem sekcje aktywacji i dezaktywacji lini CS ponieważ mam ja w karcie zwarta na stałe do masy.
Załączniki:
procedury.c(909 Bajtów)
Musisz być zalogowany, aby pobrać ten załącznik.
mmc.h(1.21 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
mmc.c(5.64 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
laser.h(317 Bajtów)
Musisz być zalogowany, aby pobrać ten załącznik.
laser.c(1.61 KB)
Musisz być zalogowany, aby pobrać ten załącznik.
void flush_mmc(u08 count) // odbierz i odrzuć "count" bajtów z karty
{
print('a');
while(count--)
{
print('b');
spi_tx_rx(0xff);
print('c');
}
}
Dodano po 8 [minuty]:
Poza tym - w plikach *.c dołącza się poprzez #include pliki *.h a nie *.c tak jak Ty to robisz. I jeszcze kilka innych rzeczy jest nie tak, jak trzeba.
Może zapoznaj się z książką "Język ANSI C" autorstwa Kernighan / Richie.
witam
dziekuje za informacje o ksiazce ale to niestety musi poczekac do wakacji. Teraz zaczyna sie szkoła jestem w 2klasie LO i mam mało czasu na elektronike, a na ksiazki jeszcze mniej. CO do dołączania pliku *.c wyczytałem to na stronie http://www.patron.net.pl w publikacjach jest krotki kurs C dla AVR. i jest tam fragment:
#include <avr/io.h>
#include "beep.h"
#include "poprzednie.c"
możesz mi wytłumaczyć co jeszcze jest nie tak??
Pozdrawiam
wiem że ta w nawiasie ze słowem (void) nie ma parametrów, a czy ta ze słowem void przez funkcja to poprostu nie zwraca wartości??
dlaczego jak dołączam w takim razie same pliki *.h to funkcji w pliku *.c nie są widziane??
no to teraz mam dolaczone same pliki *.h i mi wyskakuje:
../laser.c:13:1: warning: "F_CPU" redefined
(dlaczego redefine?? mam zadeklarowane tylko raz)
<command line>:1:1: warning: this is the location of the previous definition
avr-gcc.exe -mmcu=atmega162 laser.o -o laser.elf
laser.o: In function `send_buf':
../laser.c:25: undefined reference to `mmc_sbuf'
../laser.c:25: undefined reference to `mmc_sbuf'
laser.o: In function `main':
../laser.c:61: undefined reference to `UART_init'
../laser.c:62: undefined reference to `printe'
../laser.c:64: undefined reference to `printe'
../laser.c:65: undefined reference to `mmc_reset'
../laser.c:66: undefined reference to `printe'
../laser.c:67: undefined reference to `mmc_get_cid'
../laser.c:70: undefined reference to `printe'
../laser.c:71: undefined reference to `mmc_capacity'
../laser.c:74: undefined reference to `printe'
../laser.c:77: undefined reference to `mmc_read_sector'
Dodano po 2 [godziny] 27 [minuty]:
widze ze dużo ludzi mi tu odpisuje mam nastepny problem otóż jak dolaczam pliki *.c to nie ma błędów oczywiście funkcje nie działają z innych plików jak procesor w nie wchodzi to się zawiesza. Ale napisałem swoją funkcje do wysylania przez uart:
// wysyła znak podany jako parametr na port szeregowy
void wysli (u08 c)
{
UDR1 = c; // wpisz c do rejestru UDR
loop_until_bit_is_set(UCSR1A,TXC1); // czekaj na zakończenie transmisji
sbi(UCSR1A,TXC1); // ustaw bit TXC w rej. USR
}
wywołuje ją wysli(1); i działa ale tylko raz jak w programie umieszcze dwa razy odwołanie to kompilator wywala błąd:
../mmc.c:103: warning: implicit declaration of function `wysli'
In file included from ../laser.c:7:
../laser.h: At top level:
../laser.h:11: error: conflicting types for 'wysli'
../mmc.c:103: error: previous implicit declaration of 'wysli' was here