Skocz do zawartości

Kurs programowania uC AVR w C (WinAVR, Kurs AVR-GCC)


Treker

Pomocna odpowiedź

a = 3; //0b00000011

b = 4; //0b00000100

a&&b

W tym miejscu program robi tak:

Biore sobie a i sprawdzam. Jest nie zerowa wiec fajnie

Biore sobie b i sprawdzam. Jest nie zerowa tym lepiej

Mam dwie wartości nie zerowe czyli logicznie prawde i robie na nich iloczyn czyli wystawiam również prawdę. Czyli daje 1

W skrócie operatory && || Porównója wartości zmiennych w założeniu że 0 to fałsz a wszystko inne to prawda.

a&b

Tutaj wygląda to już inaczej

3 0b00000011 
4 0b00000100 &
0 0b00000000

I tutaj moje sprostowanie 😋 źle przepisałem miało być 5 a nie 9 Sorry

ale już dla 13 i 5

13  0b00001[1]0[1]
5   0b00001[0]0[1]
5   0b00001[0]0[1]

Czyli robimy porównanie bit po bicie i składamy to w wynik

Pozdrawiam

Link do komentarza
Share on other sites

A dlaczego wszystko porównywane jest z fałszem i prawdą a nie z jakąś konkretną liczbą? I czemu wynikiem takiej funkcji logicznej jest prawda lub fałsz a nie iloczyn czy co tam będzie tychże zmiennych?

Symfonia C++ do ręki i czytać. Z tą książką nawet 10-letnie dziecko o zdolnościach humanistycznych zacznie programować.

Czemu C++ skoro to programowanie w C? Nie będzie drobnej aczkolwiek istotnej różnicy?

Link do komentarza
Share on other sites

Powiedzmy sobie szczerze: C++ nie różni się znacznie w podstawach od C, jak się nauczysz C++ to praktycznie od razu będziesz umiał programować w samym C (oczywiście jest kilka różnic pomiędzy tymi językami w podstawach). Wykorzystując AVRGCC dostajemy kompilator języka C w standarcie ISO 9899 więc w podstawach mam to samo co C++:

funkcje inline (znane z języka C++)

dodanie słowa kluczowego restrict

możliwość deklaracji zmiennych w dowolnym miejscu w programie (przyjęte z języka C++)

kilka nowych wbudowanych typów zmiennych takich jak typ logiczny czy long long int

tablice o zmiennej liczbie elementów

komentarze w stylu C++ zaczynające się od // i kończące wraz z końcem linii

nowe standardowe funkcje oraz pliki nagłówkowe

typ bool zawarty w nagłówku stdbool.h

Jak mówię, chodzi mi o podstawy, więc np już o technice OOP nic nie mówię.

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

Fałsz i prawda to bardzo konkretne liczby jako wyjścia z funkcji już zaimplementowanych w C to jest to odpowiednio 0 i 1 a jako wjescia do tych funkcji to fałsz jest również 0 a prawdą cała reszta.

AND to jest iloczyn logiczny OR to jest suma logiczna. I dokładnie to wychodzi co trzeba 😋. Tylko że raz wychodzi zmiennych a raz wychodzi liczba która jest wynikiem porównywania konkretnych bitów danych wartości. Polecam odaplic sobie Dev-CPP i dużo ale to dużo sie pobawić.

Pozdrawiam

Link do komentarza
Share on other sites

W c nawet nie mogę sobie niczego rozkminić na podstawie składni tegoż języka. Weźmy na przykład początek programu zamka na karty chipowe (gdzieś znalazłem i próbuję skompilować)

#include <avr/io.h> 
#include <util/delay.h>

#define  	SW	PIND.6 
#define  	JMP	PINB.0 
#define  	VCC	PINB.2 
#define   	CLK	PORTB.3
#define  	RST	PORTB.4
#define  	IN	PORTB.1
#define  	OUT	PINB.1
#define  	LED	PORTD.0
#define     BUZZ PORTD.1
#define     PRZ PORTB.5

#define  del 15


char pytanie[48]={1,0,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,0,0,0,0,1,1,1,0,1,0,1,0,1,1,0};  // tablica zawierajaca zadawane karcie pytanie
char int_licz,int_licz1,int_licz2=0,wrong_card;							    // na podstawie ktorego generuje ona odpowiedz
unsigned int bin; 
bit ok=1;
eeprom unsigned int chip_code[20];	// tablica przechowujaca aktywowane karty telefoniczne
eeprom int licz_kart;

char n;
int li_kart;


void reset(void)		// procedura resetujaca karte chipowa
{
RST=1;
_delay_us(del);
CLK=1;
_delay_us(del);
CLK=0;  
_delay_us(del);
RST=0;
_delay_us(del);
}    

W bascom były deklaracje zmiennych a tu? Nie ma. Skąd ja mam wiedzieć co to jest char n; ?

Link do komentarza
Share on other sites

operacje logiczne działają na prawdzie i fałszu dlatego liczby muszą być zamienione właśnie na jedną z tych wartości. Operacje liczbowe wykonuje się inaczej. A operacje iloczynu i sumy "logicznej" o które ci chodzi to działania bitowe. A w tym wypadku wykonujemy jeszcze inną operację czyli przyporządkowujemy wyrażeniu wartość prawda lub fałsz żeby to przetworzyć na warunek pętli czy ifa.

A podstawy C i C++ są takie same, języki rozwidlają się później. Masz inne biblioteki, dochodzą inne konstrukcje itp. W każdym razie jeśli chodzi o rozwiązanie problemów nad którymi na razie siedzisz czyli operacje na zmiennych, operatory, konstrukcje warunkowe, pętle itp to na pewno możesz korzystać z opracowań pod C++.

Link do komentarza
Share on other sites

no ale wyrażenie char xxx; samo w sobie jest deklaracją zmiennej typu char o nazwie xxx nie musisz tutaj żadnych dodatkowych słówek wstawiać.

Naprawdę lepiej zajrzyj do literatury i na konsoli dokładnie sprawdź działanie wszystkich funkcji bo wyjdzie na to że po zebraniu wszystkich odpowiedzi na twoje pytania będzie można wydać kolejną książkę o podstawach C 😃

Link do komentarza
Share on other sites

C i C++ maja te fajne cechy, że rzeczy, które mogą być krótkie, są krótkie.

Z rzeczy o których warto pamiętać: jeśli mamy w kodzie cos takiego:

#define RST PORTB.4

...

RST=1;

to kompilator widzi:

PORTB.4 = 1;

Co jest zupełnie bez sensu, a pokazywany błąd odnosi się nie do linii gdzie jest zrobione define, tylko do linii gdzie definicja preprocesora (tak sie nazzywa #define) jest wykorzystana.

Link do komentarza
Share on other sites

Dotarłem w sjumie do rozdziału nr 3 Symfonii C++ i nie widzę większych różnic między Bascom a C++ poza nazwami dla zmiennych i delikatnie inną składnią.

Natomiast nadal nie rozumiem jednej rzeczy. Teoretycznie dajmy na to że:

int zmienna;

to deklaracja zmiennej, więc dlaczego gdzieniegdzie można znaleźć sformułowanie:

int main(void);

A przede wszystkim nie mogę spamiętać wszystkich tych typów zmiennych. Ma ktoś jakiś ciekawy sposób na zapamiętanie ich?

Link do komentarza
Share on other sites

typów zmiennych jest niewiele (tych podstawowych). Popatrzmy:

char - zmienna znakowa, 1B, -127 - +128

int - stałoprzecinkowa ze znakiem, 2B (AVRy), 4B (ARMy i PC),
float - zmiennoprzecinkowa (znaczy się z ułamkiem)

double - zmiennoprzecinkowa o większej precyzji

void - nic

i inne, ale rzadziej używane

Natomiast można je modyfikować słowami: unsigned, signed, short, long, volatile, register, const itd. nie wszystkie i nie każdym. Do tego dochodzą tablice i wskaźniki.

to deklaracja zmiennej, więc dlaczego gdzieniegdzie można znaleźć sformułowanie: Kod:

int main(void);

nie odpowiem Ci, bo widocznie czytasz po łebkach książki. Albo też dopiero doczytasz do tego miejsca, ale samemu szukać musisz się nauczyć.

edit:

Armir: jaki niby podprogram?? To się nazywa funkcja, ew. można zaakceptować procedura (jeśli funkcja nic nie zwraca i nie pobiera), ale podprogramem nie nazwałbym niczego co nei ma oddzielnego pliku wykonawczego albo chociaż oddzielnego wątku.

I jak najbardziej prawidłowy jest zapis:

void funkcja(void);

tylko zależy w którym miejscu i co ma robić.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.