A co z tymi funkcjami inline? Chciałem, żeby program był czytelny. Używać ich, czy wystarczy #define? Inline w ogóle zajmują miejsce w pamięci? Oczywiście używać inline - unikaj define jak ognia, to dyrektywa preprocesora, która tylko wprowadza zamieszanie. Obecnie nie ma za wiele sytuacji, w których należy ją używać. Napewno nie należy jej używać...
Nie, to Ty nie rozumiesz. Ja nie chcę napisać pięciu linii za Ciebie. Wydawało mi się, że jak podam przykład, to połączenie dwóch linii z Twojego kodu, potem 2 moich, a potem reszta twoich zadaniem zbyt trudnym dla studenta nie jest ... Albert
Nie będę już może wchodził w szczegóły, warto sobie zdać sprawę z jednego. Dyrektywy #define są poleceniami preprocesora, a nie kompilatora. Preprocesor po prostu wstawia wyrażenie po prawej strony #define w miejsce wyrażenia po lewej stronie, występującego w programie. Jeden przykład: #define M 2+3 X= M*M; Jaka będzie wartość X po tej operacji? Ano...
Define jako dyrektywa preprocesora powoduje po prostu wstawienie literału w miejsce danego symbolu. Problem w tym, że stosując define rezygnujesz z kontroli typów. Prowadzi to do kodu mniej przejrzystego i bardziej wrażliwego na błędy. Z kolei definicja stałej typu const, a może lepiej static const nie zajmuje miejsca, tak samo jak define, a kompilator...
itam Mam problem ze zrozumieniem poniższej definicji #define, po szukaniu w google nie znalazłem odpowiedzi. Wiem że to nie jest definicja struktury, ani definicja stałej bo nie ma po prawej stronie żadnego dodatkowego wyrażenia. Dlatego pytam się co to jest. To znalazłem w jednym z plików nagłówkowych arduino dla esp. Makro rozwija się do pustego...
Witam, mam pewien problem z odbieraniem danych po zmianie tego co było. Mianowicie ustaliłem sobie pewną ramkę - tablica char o rozmiarze 4. element 0 - temperatura graniczna z C# element 1 - czas włączenia lampy w godzinach z C# element 2 - czas wyłączenia lampy w godzinach z C# element 3 - komenda resetu atmegi Nie wiem w czym tkwi problem. Jeśli...
Jedyna różnica jaka jest poza tym ze teraz piny są definiowane dyrektywą "#define" to: evo2: #define SPI_MISO 0 evo3, nowy soft Majstra: #define SPI_MISO_OLED -1 Zmień z ciekawości tego MISO na 0 w Evo3 lub sofcie Majstra.
Mam środowisko Mlab + kompilator picc. Probuje skompilowac taki oto program: #include <16f84.h> #USE DELAY( CLOCK=4000000 ) /* Using a 4 Mhz clock */ #FUSES XT,NOWDT,NOPROTECT,NOPUT /* Use XT mode, No Watch Dog, No Code Protect, No Power-up Timer */ #byte port_b=6 /* define the location of register port_b */ main(){ byte cnt;value; set_tris_b(0);...
Jeśli do deklaracji stałej używam dyrektywy define czy mogę zadeklarować tam stałą równą 5 * 10^5 ? No jasne, że tak. Preprocesor powinien rozwiązać sobie takie działania i wstawić jako wynik stałą. Jaką rolę pełni wyrażenie __interrupt w całym wyrażeniu __interrupt void Timer_A (void)? No to zależy do uP, generalnie __interrupt mówi kompilatorowi...
Dodałem dyrektywę #define_USE_WRITE 1 do pliku ff_conf.h
Całość brzydka może składniowo, ale jak najbardziej działająca. Ten program jest po prostu napisany w C, a nie w C++. Jedną z zasadniczych różnic pomiędzy C a C++ jest taka, że w C++ używa się referencji zamiast wskaźników , a wskaźników tylko tam, gdzie jest to niezbędnie konieczne. Również pętla for w C++ może wyglądać "ładniej" niż w C, np. zamiast:...
Nie wiem co jest błędnego w mojej składni. Dyrektywa #define ze znakiem równości lub bez, a kompilator wali błędami. Czy jest coś zamiast low () i high () bo tego też się czepia. #define ma być bez znaku = :!: Co w tym jest źle? #define mc32u1 r17; multiplicand byte 1 #define m32u5 r25; result byte 5 adc m32u5,mc32u1 ; Chyba nie bardzo wiesz , jak...
Załóżmy, że wykonujemy plecenie: RS_SET dyrektywa: Dodano po 3 swoją drogą może to mały offtopic ale jak zachowuje się preprocesor w przypadku takich dyrektyw: [syntax=cpp]int main() { int x=1,y=2,z=3; cout<<x<<y<<z<<"... #define y x cout<<x<<y<<z<<"... #define z y cout<<x<<y<<z<<"...
Tak to zwykle wygląda. Zapis port.bit.b7 jest równie nieczytelny, bo nie wiadomo, co jest na bicie 7. W sumie to prawie wszystko jedno, czy ponazywasz bity w porcie w definicji struktury, czy dyrektywami #define
W C np dla kontrolerów takie zabiegi stosuje się właśnie żeby zaoszczędzić pamięć a właściwie żeby używać tego czego się potrzebuje z biblioteki :) Myślę że zależnie od kompilatora może się to różnic w GCC używa się właśnie #ifdef Pozdrawiam
Jeśli chcesz definiować stałe to używaj dyrektywy #define np. #define KWARC 11059200UL UL - oznacza ze ma być to liczba typu unsigned long
Problem w tym że GPIOA to nie jest literał. To jest definicja która na przykład u mnie wygląda tak: #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
Sęk tkwi w tym, że przy dyrektywie #define F_CPU ... nic się nie dzieje. Dalej trzeba w funkcjach delay wpisywać 10000000ms :/ często przy tej dyrektywie wyskakują błędy kompilatora, tak jakby ten nie znał słowa F_CPU (tak jakby nie było tego w bibliotece util/delay.h)
Oj tam! Jeśli chce na float, to niech robi. Ja nie neguję. :) Dałem sobie chwilkę i przejrzałem Twój kod. Nic dziwnego, że masz kaszanę, skoro używasz do wyświetlenia tekstu z RAM procedury czytającej teksty z Flash. :) W procedurze LCD_WRITE_TXT zmień linię[syntax=c]mark = pgm_read_byte(&text[turn++]);[/synta... = text[turn++];[/syntax]...
Po pierwsze nie: TCCR0B |= (1<<CS00) | (1<<CS01); a : TCCR0B =(TCCR0B&0xf8) | (1<<CS00) | (1<<CS01); Kolego zastanów się na drugi raz zanim udzielisz odpowiedzi bo niestety ale bzdury piszesz na maxa i na dodatek nikt tego nie zauważa. Nie znasz i nie umiesz się w C posługiwać operatorami dwuskładnikowymi ??? toż operacja:...
Dzięki, nie zakumałem (za słaby angielski), ale naprowadziło mnie to na stronę: [url=https://pl.wikibooks.org/wiki/C/Pre... https://pl.wikibooks.org/wiki/C/Preproce... Ma to widać zastosowanie tylko w dyrektywach preprocesora #define Dzięki!! Zamkamy
Dyrektywa EQU to coś jak #define w języku C. Po prostu CZAS jest symboliczną nazwą dla wartości 0. CZAS EQU 30h ; deklaruj CZAS jako adres zmiennej w IRAM DZIESIEC EQU 10 ; deklaruj stałą DZIESIEC ; gdzieś w programie... ; wykonaj operacje na zmiennej CZAS = CZAS + 10 MOV A, CZAS ; wczytaj dane spod adresu 30h do A ADD A, #DZIESIEC ; dodaj 10 do A MOV...
Po pierwsze, używaj aktualnych plików nagłówkowych, z rejestrem BSRR i bez BSRRH/BSRRL. Po drugie - co jest szybciej napisać: GPIO_BSRR_BR_15 czy 1u << 15 << 16 ? Moim zdaniem radosna twórczość w postaci tworzenia definicji zawierających długie nazwy z NUMERAMI bitów na końcu jest tylko zaciemnianiem programu (słynne Atmelowe 1 <<...
Przejżę jeszcze te pliki. To przenoszenie z kodu programu do biblioteki, robiłem metodą ctr-x ctr-v i mogły się wdać jakieś definicje / deklaracje niezgodne ze sztuką. W pliku nagłówkowym były tylko dyrektywy #define i deklaracje extern funkcji, ale również dyrektywy #include. Jedna z nik włączała plik nagłówkowy, w którym jest deklaracja unsigned char...
Nie przesadzajmy,żeby było tam nie wiadomo jak dużo pracy. uC ATMEGA8, kwarc, przycisk, 3 wyświetlacze, jack pod zasilacz. Program do napisania z palca. Inaczej, gdyby zleceniodawca chciał powielać rozwiązanie- kod można zablokować przed kopiowaniem, a schematu nie podawać. Dodano po 2 W zasadzie 3 do 4 popołudni. 1. Narysowanie schematu i PCB dla firmy....
Kontynuuję temat ponieważ natrafiłem na kolejny problem. W tej chwili kompiluję aplikację i bootloader jednocześnie. W rezultacie po modyfikacjach w programie głównym ulega zmianie także obszar bootloadera w pliku hex. Wydaje mi się że to przez zmianę alokacji zmiennych w pamięci ram lub stałych z dyrektywy #define używanych w funkcjach bootloadera....
Witam. Probuje od kilku godzin zaprzac dyrektywe #if preprocesora do wykonania kompilacji warunkowej i nie moge wymyslec poprawnej skladni. Caly czas kompilator wyrzuca mi bledy. Chodzi o to ze na poczatku programu deklaruje rodzaj wyswietlacza dyrektywa #define i na tej podstawie chce dolaczyc (#include) odpowiedni plik. Mam niestety dwa rodzaje wyswietlacza...
Tym razem, mam problem "AtmelStudio 7 (v:7.0.1931)" Otóż chcę wyświetlić wartość. [syntax=c]#ifdef DEBUG sprintf(bufor,"ObrHZ=%4.2f",czestotliwos... lcd_gotoxy(0,1); write_znak(' ',16); lcd_gotoxy(0,1); lcd_puts(bufor); while(KLIK_ENTER) _delay_ms(WAIT_50); #endif[/syntax] Nie zgłaszane są żadne błędy. Powstaje plik wsadu. Jednak podczas wgrywania...
hmm może źle się wyraziłem ale nie chodziło mi jak stosować dyrektywy #define itd. podałem ogólnie o co chodzi. Sedno sprawy to to, że MPLABx nie dokonał od-komentowania wizualnie tj. kod programu który w rzeczywistości jest kompilowany dla mnie w IDE jest widoczny jako czcionka szara(czyli jak komentarz). Dopiero zmiana w pliku i ponowny zapis odświeżają...
Tak kiedy już ustaliliśmy konwencję to chciałbym żebyś to zrobił za mnie. Poniższy kod zamień na język Basic i ładnie wstaw na Elektrodzie w Syntax Basic Bascom. Możesz to dla mnie zrobić? :D /* Device register map */ /** Z przyjemnością pomogę Ci przekonwertować podany kod na język BASIC, zgodnie z konwencją, jaką ustaliliśmy. Niestety, w twoim ostatnim...
Np. #define jed_bit PORTA,0 #define jest dyrektywą asemblera, w helpie mplaba znajdziesz.
Wszystko ladnie tlumaczycie tylko ze nie posilkowaliscie sie nota katalogowa i ten program nie bedzie dzialal. ldi r16,0b10000000 out TIMSK,r16 Jesli spojrzec do noty to siodmy bit w TIMSK to OCIE2, czyli nic nie ma wspolnego z T1 czy T0. Mowilem ze ten program jest ZUPELNIE nie czytelny. Na samym pczatku juz kicha jest: .org 0x0005 to wektor od Timer1...
Witam Zamieść cały kod, będzie łatwiej. Być może problem jest gdzie indziej, takie błedy sugerują zazwyczaj, że masz gdzieś błąd w dyrektywach #define. Co do inicjalizacji [syntax=c]char napis[] = "Ala ma kota"[/syntax] Działa, ale tylko w momencie tworzenia zmiennej ponieważ, kompilator wiedzieć musi ile miejsca zarezerwować. Co do zapisu [syntax=c]char...
Fajne :D Myślałem też nad dyrektywą preprocesora #DEFINE, ale to też może być. Jednak tak naprawdę to jest jeszcze jeden problem: można użyć tylko GREEN RED i BLUE i opcje INTESITY do rozjaśnienia, ale to jest niewygodne. To mógłbym ominąć, ale tych kolorów jest za mało, bo jak dobrze liczę to jedynie będzie ich 18. I muszę używać masek bitowych. Nie...
No, to tylko część modyfikacji, trzeba przerobić cały plik na "arduinowy" bo nie widzi że to jest dla LGT tylko robi jak dla Atmega328P, a on nie ma takich rejestrów. No i resztę funkcji, bo odczyt musi być też między ustawieniami rejestrów: https://obrazki.elektroda.pl/8960353100_... Może inicjalizacje IO można zostawić poprzednią...
Takie mam pytanie, o ile mógłbyś pokazać wnętrze pilocika .... zawsze meczę się z instalacją beteryjek w takich pilotach - podejrzałbym twoje rozwiązanie, ale jeśli to nie kłopot? Hihi, powiem Ci, że trafiłeś w punkt, który akurat chciałem zataić ;) (głównie dlatego, że zaraz usłyszałbym odzew urażonych dum estetycznych). Z mocowaniem baterii męczyłem...
(at)Bluedraco - nie chcialo sie Koledze napisac :). Jest rozszerzenie gcc (to ta sama metoda dostępu tyle ze napisanie rozrzerzenia jest nieco trudniejsze niz kawałka biblioteki z definicjami inline asm-ami) - nie jest to nic nowego generalnie. (sluszna zmiana +dla moderatora za czujność :). Tak to jest jak sie cały dzien w PHP rzezbi) masz kilka rodzajów...
Uklad generuje 8 razy wiekszy czas od wejscia kluczujacego ok 125 ms niskim stanem /.../ jak ustala sie wpisy w rejestrach tim1-output ma 8*enable to, co ja widze w kodzie: w rejestrze data jest zmierzona dlugosc wysokiego poziomu wejscia enable ; w rejestrze data_obr_min jest wartosc data podzielona przez 8; licznik rejestr odmierza czas, w ktorym...
Nie wnikając specjalnie w twój kod. W asemblerze komendy IN OUT przekazują dane między rejestrami ogólnego przeznaczenia, a obszarem I/O. IN - sczytuje wartość z rejestru I/O do rejestru OUT- zapisz na port daną z rejestru roboczego np. ldi R16, 0x0F ;załaduj rejestr 0b00001111 out PORTB, R16 czyli tłumacząc na C PORTB = 0x0F; a po komunikacie można...
Generalnie kod nie wygląda tak źle. Jak na początkującego, to muszę nawet pochwalić! Formatowanie poziome i rozdzielenie różnych części programu białymi znakami na duży plus. Bardzo wiele osób ma z tym problem, mimo tego, że nowoczesne IDE dbają o to praktycznie same. Kilka uwag się znajdzie, ale myślę, że będzie to konstruktywna krytyka. Po pierwsze...
Dyrektywy - zwykłe #define. Ale jak korzystasz z jakiegoś środowiska programistycznego to zapewne definiuje ono to za Ciebie odpowiednim argumentem kompilatora. Np. w tutorialu Freddiego dla STM32F1 jest w Makefile'u definicja ("-DSTM32F10X_xD"). Wyboru zegara dokonujesz programowo poprzez konfigurację odpowiedniego rejestru (np. RCC w STM32F10x). Jeśli...
Mam zdefiniowane tablice bezposrednio za dyrektywami #include i #define wyglada to tak: <code> #include <iom3v.h> . . . #define clock 2 char adresy[4]; char ilosc_adesow; </code> Po tym jest zdefiniowana funkcja wyszukujaca adresy: <code> void wyszukaj(void) { if ([wlasciwy warunek]) { ilosc_adresow++; adresy[ilosc_adresow]=nowy_adres;...
Co do dostosowywania, wykonałem poniższe czynności: - rejestry TRIS oraz PORT są poprawnie ustawione w kontekście wejść/wyjść (sprawdziłem programowo), - na zmienne globalne odpowiedzialne za dane wysłane i odebrane przez USB przydzieliłem odpowiednie miejsce w RAMie, zgodnie z ds mojego pica (konkretnie o adresie 0x280), - linker wziąłem z przykładów...
Chyba nie chodzi tu o cyfrę, tylko o to, że etykieta nie może być jednoznakowa. #define jest dyrektywą preprocesora, wartość musi być więc znana przed kompilacją. Działa tak, że podmienia w kodzie wystąpienia etykiety zdefiniowaną wartością (wartość może być podana jako wyrażenie, wtedy zostanie ono najpierw obliczone). Efektywnie działa to tak, że...
Hej wszystkim! Mam małe pytanko - tylko do szpeców od AVR i GCC. Napotkałem identyczny problem do opisanego [url=http://www.elektroda.pl/rtvforum/to... Niestety nie podano tam rozwiązania tej kwestii. O co konkretnie chodzi? Jeśli nie zdefiniuję F_CPU a używam biblioteki delay.h to kompilator wyrzuca warninga. Wynika to niniejszego...
Nie ma coś takiego jak podstawy C dla avr. C jest C. I najpierw warto zapoznać sie z tym jezykiem. Tu jest jakis link jak kumasz cos po angielsku: http://lib.daemon.am/Books/C/ Jak nie kumasz to musisz szukać jakis innych kursów, albo ksążek Jak juz bedziesz wiedział o co chodzi w C, choć przyznam że ja zaczynałem od asemblera, bo warto wiedzieć co...
Eeee no chyba AVR studio dostarcza odpowiednie dyrektywy (EXTERN, PUBLIC, DEFINE ......). Taka funkcjonalność jak dzielenie projektu na pliki a do nich pliki nagłówkowe z definicjami rejestrów wektorów przerwań i tym podobnych na pewno istniej. Sam pisze spore projekty w ASM (po kilkanaście, kilkadziesiąt kB) i dziele je na kilkanaście, kilkaset plików....
Chodziło mi o ten konkretny przypadek :) Co do warunkowej kompilacji - robiąc "normalne" ify, gcc stworzy w większości przypadków taki sam kod jak w przypadku użycia dyrektyw preprocesora.
kleki , adamusx zamieścił w swoim poście przykład. Cała magia kryje się pod dyrektywą preprocesora #define . Ale generalnie radziłbym skorzystać z gotowej biblioteki zamiast samemu wszystko wklepywać (po co wyważać otwarte drzwi?). Dodam tylko, że jeśli w dyrektywie #define znajdą się jakieś obliczenia ze stałymi, to preprocesor wykona te obliczenia...
Możesz się niezgadzać, ale mylisz się całkowicie. Dyrektywa assemblera .equ jest rożsama dyrektywie preprocesora C - #define. Pisząc pomoc .equ 25 jedyne co robisz, to każesz assemblerowi wstawić w miejsce wystąpienia frazy 'pomoc' liczbę 25. Równie dobrze możesz napisać FREQUENCY .equ 10000000 i chyba nie jest to według Ciebie deklaracja zmiennej pod...
maszyna dyrektywa float define delphi define
bezpieczniki najlepsze samochodowe kamera własna chmura transa electronic
rns510 aktualizacja rns510 aktualizacja
Jak sprawdzić MOSFET 4407A miernikiem uniwersalnym? Przekaźnik sprzęgła klimatyzacji BMW X5 E53 – lokalizacja, modele, diagnostyka