Skocz do zawartości
Treker

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

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

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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ę.

Udostępnij ten post


Link to post
Share on other sites

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

Udostępnij ten post


Link to post
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; ?

Udostępnij ten post


Link to post
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++.

Udostępnij ten post


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

Jeszcze musisz bardzo wile doczytać.

A tak dodam, że char, to jest typ zmiennej.

Udostępnij ten post


Link to post
Share on other sites
A tak dodam, że char, to jest typ zmiennej.

Wiem że to typ zmiennej tylko chodzi mi o to że przed nią nie ma nic w stylu declare czy też jak w bascom Dim.

Udostępnij ten post


Link to post
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 😃

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
Share on other sites

int main(void) to podprogram. Nie powinno być po tym ; tylko klamerka. Main to program główny ale możesz tak samo deklarować inne podprogramy.

Udostępnij ten post


Link to post
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ć.

Udostępnij ten post


Link to post
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ę »

×