Skocz do zawartości

Blad unknown type name 'uint16_t'


Krawi92

Pomocna odpowiedź

Hej. Tworze sobie dzis prosta inicjalizacje USART z funkcja wysylania znaku. W pierwszej wersji wszystkie deklaracje i definicje mialem w pliku glownym main.c. Wszystko dzialalo OK. Postanowilem, dla wprawy i nauki zrobic oddzielna biblioteke i stworzylem obok nowy folder a w nim 2 pliki, uart.c i uart.h. W pliku .c wiadomo wrzucilem definicje dwoch funkcji i zainkludowalem avr/io.h Do pliku .h wrzucilem naglowki funkcji. Ale po skompilowaniu dostalem taki oto blad.

Cytat

18:08:16 **** Incremental Build of configuration Release for project test ****
make all 
'Building file: ../UART/uart.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=8000000UL -MMD -MP -MF"UART/uart.d" -MT"UART/uart.o" -c -o "UART/uart.o" "../UART/uart.c"
In file included from ../UART/uart.c:8:0:
../UART/uart.h:20:20: error: unknown type name 'uint16_t'
  void USART_Init ( uint16_t  ubrr); /// inicjalizacja UART
                    ^
make: *** [UART/uart.o] Błąd 1
"make all" terminated with exit code 2. Build might be incomplete.

18:08:17 Build Failed. 1 errors, 0 warnings. (took 1s.228ms)

Gdy typ zmienilem tak jak orginalnie w nocie na unsigned int to wszystko kompilowalo sie OK. Dopiero problem sie rozwiazal, jak do pliku uart.h zainkludowalem avr/io.h,wtedy wszystko sie ladnie kompilowalo. Pytam, poniewaz dzialam na podstawie video poradnika M.Kardasia i on tam do pliku naglowkowego zadnej biblioteki nie dolaczal, a wszystko dziala OK. Nie wiem gdzie ja popelniam blad. Niby problem rozwiazany, ale nie do konca jestem pewien czy wszystko robie dobrze.

Edytowano przez Krawi92
Link do komentarza
Share on other sites

a wrzuć kody tych plików

zapewne w trakcie dolączania pliku nagłówkowego nie było jeszcze żadnej informacji o tym, co to jest ten cały uint16_t 😉
pewnie przed dołączeniem uart.h w mainie jest dołączenie io.h i dlatego gdzie indziej działa 😉

Edytowano przez BananWszyscy
  • Lubię! 1
Link do komentarza
Share on other sites

tak, to rozwiązało problem.

Teraz zmienilem kolejnosc bibliotek na :

#include "avr/io.h"
#include "uart.h"

 i działa, wczesniej mialem na odwrot. I racją jest, że w video poradniku tez tak byly dolaczone 😉

Link do komentarza
Share on other sites

52 minuty temu, Krawi92 napisał:

poniewaz dzialam na podstawie video poradnika M.Kardasia 

Polecam zobaczyc reszte...😉 bardzo fajnie tlumaczy przerwania zewnetrzne, pcint , system binarny/szesnastkowy etc...ja odrazu zalapalem to wszystko wlasnie z tych tutoriali..

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

heh teraz idąc dalej mam kolejny problem. Skorzystalem z funkcji do wysylania string

Cytat

void uart_puts( char * s) {
    while( *s ) uart_putc( *s++ );
}

Jednak kompilator daje taki błąd :

Cytat

19:32:32 **** Incremental Build of configuration Release for project test ****
make all 
'Building file: ../main.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega328p -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
'Finished building: ../main.c'
' '
'Building target: test.elf'
'Invoking: AVR C Linker'
avr-gcc -Wl,-Map,test.map -mmcu=atmega328p -o "test.elf"  ./UART/uart.o  ./main.o   
./UART/uart.o: In function `uart_puts':
uart.c:(.text.uart_puts+0xe): undefined reference to `uart_putc'
collect2.exe: error: ld returned 1 exit status
make: *** [test.elf] Błąd 1
"make all" terminated with exit code 2. Build might be incomplete.

19:32:34 Build Failed. 1 errors, 0 warnings. (took 1s.842ms)
 

Niestety, na moim poczatkowym etapie nauki nie mam pojecia jak ta funkcja dziala, wykorzystuje wskazniki itp. ale nie wiem czemu to sie nie kompiluje.

mam zaladowana biblioteke pgmspace.

Link do komentarza
Share on other sites

/*
 * uart.c
 *
 *  Created on: 4 sie 2021
 *      Author: User
 */
#include "stdlib.h"
#include "avr/io.h"
#include "avr/pgmspace.h"
#include "uart.h"


	void USART_Start( uint16_t ubrr) // definicja funkcji inicjalizacji USART
{
 /*Set baud rate */
 UBRR0H = (uint8_t)(ubrr>>8); //Wpisanie wartosci UBRR to rejestrów UBRR0H i UBRR0L
 UBRR0L = (uint8_t)ubrr;

 UCSR0B = (1<<TXEN0); // wlaczenie nadajnika

 // ramka 8n1 ustawiona domyslnie w rejestrze UCSR0C
}

	void USART_SendChar( char data ) // Definicja funkcji wysylania pojedynczego znaku
{
 /* Wait for empty transmit buffer */
 while ( !( UCSR0A & (1<<UDRE0)) ); // Oczekiwanie az Bufor bedzie pusty
 /* Put data into buffer, sends the data */
 UDR0 = data; // Przeslanie danych do rejestru UDR0
}


void uart_puts( char * s) {
	while( *s ) uart_putc( *s++ );
}

 

Link do komentarza
Share on other sites

no w tym pliku nie masz zdefiniowanej funkcji uart_putc, jest w ogóle w pliku nagłówkowym? Rozumiem, że kopiujesz kawałki kodu i sklejasz to w całość, coś ominąłeś, ta funkcja puts w argumencie pewnie wskaźnik do tablicy znaków, tak to nazwijmy i dopóki nie przejedzie po wszystkich to każdy znak wrzuca osobno, i tej funkcji do osobnych znaków nie ma

Link do komentarza
Share on other sites

Dobra znalazlem, nie zauwazylem literowki ze jest Puts i putc.

void uart_puts( char * s) {
	while( *s ) uart_sendChar( *s++ );
}

No niestety przepisuje to slepo bo tej funkcji kompletnie nie rozumiem, jak dojde do wskaznikow itp mam nadzieje ze troche z tego zalape.

Link do komentarza
Share on other sites

(edytowany)

Niebieska ksiazke mam, zaczynam ja powoli czytac, jednak jestem na samem poczatku... Wieksza polowa ksiazki to wstep teoretyczny, wiec nie chce po prostu czytac bez zrozumienia, dlatego gdy opisywal np: przerwania od timerów to napisalem prosty program migajacy ledami w przerwaniach, tak dla treningu, zeby zalapac, jakie rejestry itp. Potem byl PWM, wiec chcialem sobie chociaz dla testu jakis pwm wygenerowac. Teraz jestem przy UART, wiec powoli powoli sobie kombinuje. W trakcie wiadomo wychodza braki w wiedzy, ale zawsze piszac kod to juz sie cos utrwali. Duzo daja jego poradniki video, wiec powoli powoli do przodu. W programowanie w C wszedlem moze z miesiac temu wiec nie wymagam od siebie, ze wszystko naraz ogarne, zwlaszcza ze tu dochodzi uC i z nim tez wiele tematow do ogarniecia. 

PS. Ale pierwsza "biblioteka" do wysylania danych z uC do terminala gotowa 😄 To juz mi sporo pomoze. 

Edytowano przez Krawi92
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.