ATNEL tech-forum
https://forum.atnel.pl/

Blad unknown type name 'uint16_t'
https://forum.atnel.pl/topic23872.html
Strona 1 z 1

Autor:  krawi92 [ 4 sie 2021, o 17:19 ]
Tytuł:  Blad unknown type name 'uint16_t'

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.
Cytuj:
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 Mirka i on tam do pliku naglowkowego zadnej biblioteki nie dolaczal,tylko do pliku ".c" i tam sie kompilowalo. Nie wiem gdzie ja popelniam blad. Niby problem rozwiazany, ale nie do konca jestem pewien czy wszystko robie dobrze.


Edit: Nie zauważylem jednego szczegółu, kolejność dodawania bibliotek jednak ma znaczenie. W pliku uart.c mialem to tak:
#include "uart.h"
#include "avr/io.h"
Wystarczyło zmienić kolejność ;)

Autor:  mirekk36 [ 4 sie 2021, o 19:23 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

krawi92 napisał(a):
Edit: Nie zauważylem jednego szczegółu, kolejność dodawania bibliotek jednak ma znaczenie. W pliku uart.c mialem to tak:
#include "uart.h"
#include "avr/io.h"
Wystarczyło zmienić kolejność


Widzisz ale nawet tu w tej wypowiedzi mieszasz - bo piszesz "avr/io.h" podczas gdy MUSI być <avr/io.h>

Poza tym wszędzie w całej książce i poradnikach pokazuję i omawiam szczegółowo żeby NAJPIERW inkludować pliki SYSTEMOWE czyli te w nawiasach właśnie ostrych <> a dopiero później własne pliki w cudzysłowach ... przyjrzyj się WSZYSTKIM moim przykładom kodów w dowolnej książce , poradniku wideo - gdziekolwiek i pokaż mi żebym gdzieś zrobił to odwrotnie ...

Autor:  krawi92 [ 4 sie 2021, o 19:53 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

Obrazek

Trochę się teraz zakręciłem, bo faktycznie pominąłem ten fakt o sposobie inkludowania.. Ale np; na tym obrazku z pliku zrodlowym biblioteki avr/io.h jest w ""

Autor:  mirekk36 [ 4 sie 2021, o 23:18 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

krawi92 napisał(a):
Ale np; na tym obrazku z pliku zrodlowym biblioteki avr/io.h jest w ""

Ale NUMER ! no to zobacz - w pierdyliardzie moich mteriałów jest to w <> a tu akurat - no rzeczywiście jakiś koci błąd literówka ! ... i ty akurat na tym przykładzie jedynym się wzorujesz ? ;) ALe masz rację wyłapałeś - no literówkę bo avr/io.h MUSI być w nawiasach <>

Autor:  krawi92 [ 5 sie 2021, o 11:23 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

No akurat korzystalem z tego poradnika, wiec tak tez napisalem, nie zastanawiajac sie wtedy(no moze troche) dlaczego tak a nie inaczej, jednak teraz juz wiem o co chodzi, dzieki :P
Najwazniejsze ze pierwsza biblioteka do wysylania danych gotowa :P

I mam osobne pytanie do wartosci UBRR... Mamy na to wzor, w nocie i Pan podal lepszy. Tylko, ze w nocie mamy rowniez podane te wartosci dla poszczegolnych predkosci. Wiec czemu nie wpisywac bezposrednio wartosci UBRR z noty, a nizeli sie martwic, czy wzor bedzie poprawny i dokladny. Ja wiem, ze mozna mowic, ze trzeba zagladac do noty, zmieniac to itp.. Jednak, gdy bedziemy chcieli zmienic wartosc baud rate tak czy siak musze zagladac do noty. Mowie tu akurat z perspektywy osoby poczatkujacej. Co wiecej, wpisujac bezposrednio wartosc UBRR z noty do Uart_init pozbywamy sie 2 linijek kodu :D To takie moje przemyslenie i chcialbym, zeby ktos sie do tego odniosl, byc moze sa inne powody, dla ktorych warto uzywac wzoru.

Autor:  mirekk36 [ 5 sie 2021, o 11:43 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

No to odpowiadam, jeśli chodzi o ręczne wpisywanie wartości z noty - to pewnie, że można - ale jest to zadanie dla MASOCHISTÓW przez duże M :lol: ... dla mnie ręczne wpisywanie wartości to .... tfuuu na psa urok ! :lol:

dlaczego ? ;)

Ręczne wpisywanie w kodzie jest wręcz ABSURDALNIE ABSTRAKCYJNE i w dłuższym okresie programowania, nawet jak jeszcze będziesz początkującym (a ja - pamiętaj! też jestem początkujący - tyle że może dopiero kilka kroków przed tobą, więc wiem co mówię ;) ) ... a zatem będzie to ci sprawiało TYLE kłopotów i będzie TYLE bezesnsownych błędów i będziesz rwał sobie włosy z głowy do ostatniej cebulki ;) ... dlaczego ?

No pomyśl sobie przez chwilę, gdy się zaczyna programować to oznacza (przynajmniej dla mnie) robienie wielu projektów - bo jeśli zaczynasz i masz zamiar zrobić fizycznie jeden projekt bo coś ci pilnie potrzebne i nie będziesz zajmował się programowaniem przez najbliższe 5 lat to ok - wpisz sobie z noty

ale jak będziesz robił kolejne projekty to:

1. często zaczynając kolejny, żeby się nie przemęczać ot po prostu skopiujesz sobie swoją bibliotekę UART albo te funkcje do innego projektu na szybko, oprogramujesz też w nim wiele innych rzeczy aż tu nagle okazuje się, że AŁĆ !!!! uart mi nie działaaaaa ... no bo zapomniałem że dałem np inne taktowanie procka niż w poprzednim projekcie i pierwsza KICHA ZALICZONA

2. pracujesz nad tym samym projektem ale po drodze przyjdzie ci sprawdzać go dla innego rodzaju taktowania procka - no to znowu jak zapomnisz - a najczęściej się zapomina po jakimś czasie o czymś co zostało dawno zrobione i dobrze działa - więc jak zapomnisz że z ręki wpisałeś UBRR z noty to znowu ZONK i szukanie błędu dlaczego mi uart nie działaaaa ? i kolejna KICHA ZALICZONA

3. Im więcej projektów różnych, różnego taktowania procka - a tak będzie bo przecież nie bawisz się kocim andruinem gdzie masz ZAWSZE przyspawany jeden koci kwarc 16 MHz - no to znowu dostaniesz kociego mętliku w głowie i czy tego chcesz czy nie SAM DOJDZIESZ do wniosku ... że po jasny gwint nie posłuchałem żeby to robić jak się należy ? ;) czyli z automatycznym wyliczaniem UBRR

Panie Panie, ten wzór jest prosty jak drut i UWAGA !!!! nie zabiera ci żadnych dwóch linijek kodu !!! ;) nawet jednej ci nie zabiera ! toż to jest obliczane na etapie PREPROCESORA ! za pomocą makr #define przecież !!! więc gdy kompilator dostaje kod do skompilowania to w miejscu gdzie w kodzie masz __UBRR preprocesor PODSTAWI ci co ? ANO gotową obliczoną wartość i najczęściej to ona będzie DOKŁADNIE taka sama jak w nocie - tyle że nie muszę do niej zaglądać i się pierdzielić za każdym razem z ręczną zmianą jej wartości - gdzie też przy ręcznym wprowadzaniu - CZŁOWIEK JEST TYLKO CZŁOWIEKIEM i też się myli i jak będziesz miał literówkę bo zamiast np wartości 61 wpiszesz 16 to znowu KICHA ! ;) weź przestań w ogóle myśleć o ręcznym wpisywaniu

Po ostatnie, jak sobie zrobisz taką ala własną biblioteczkę do UART, i tam będzie ten wzór wyliczany (pamiętaj makrami #define więc to żaden kod programu!) to możesz sobie ją bez zastanowienia kopiować do każdego następnego projektu i nie powielać ZONKÓ KICH I BŁĘDÓW ;)

mam nadzieję że teraz jaśniej hmmm ? ;)

------------------------ [ Dodano po: 1 minucie ]

jak nie wierzysz że wyliczany wzór za pomocą #define - nie zajmuje miejsca w pamięci to ... skompiluj kod z tym wzorem sprawdź ile jest bajtów we FLASH a później usuń wzór i wpisz sobie ręcznie swoją wartość i skompiluj ;) ... sam zobaczysz że ilość bajtów nie zmieni się nawet o jeden czy pół bajta ;)

Autor:  krawi92 [ 5 sie 2021, o 11:58 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

Ok, dziękuje Panie Mirku za rzeczową odpowiedź, oto mi chodziło. Moje przemyslenie spowodowane jest jeszcze brakiem doswiadczenia i dzialania albo na 1MHz albo 8MHz i jednym procesorze atm328p :D Gdy za jakis czas zaczne sie bawić i przeskakiwać to z takiego taktowania na takie, z procka na inny to napewno to będzie pomocne ;)
Ps. Nie lubi Pan kotów ? :D

Autor:  mirekk36 [ 5 sie 2021, o 12:07 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

krawi92 napisał(a):
Ps. Nie lubi Pan kotów ?

Jaaa ? nie lubię kotów ? .... lubię tylko się troszkę długo gotują :lol: :lol:

a na poważnie to miałem do niedawna aż 3 takie futrzaki w domu ale jeden ostatnio niestety odszedł do krainy wiecznych łowów .... zostały dwa ... i za żadne skarby świata bym się ich nie pozbył ;)

Autor:  krawi92 [ 5 sie 2021, o 12:08 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

No to juz Pana bardziej lubie, ja tez mam 2 kociory i musze dobrze chować gadżety elektroniczne, bo juz nie raz sie bawily LEDem albo rezystorem :D

Autor:  mirekk36 [ 5 sie 2021, o 12:15 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

A ja myślę w końcu zrobić jakąś małą kamerkę na ESP żeby kotu do obróżki podczepić z małym aku LiPO i sprawdzić na wideo gdzie on się szwęda poza domem ;) ... a już niedługo rusza u nas wielka AKCJA z ESP ... więc będzie można porobić różne ciekawe rzeczy

Autor:  krawi92 [ 5 sie 2021, o 12:18 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

Ja czekam na ten kurs C na przykladzie AVR w trybie mailingowym, o którym mi Pan pisał na mailu ;)

Autor:  mirekk36 [ 5 sie 2021, o 13:00 ]
Tytuł:  Re: Blad unknown type name 'uint16_t'

krawi92 napisał(a):
Ja czekam na ten kurs C na przykladzie AVR w trybie mailingowym, o którym mi Pan pisał na mailu ;)

Łooj i to też będzie - teraz szykujemy dużo niespodzianek ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/