Można jeszcze zadeklarować zmienną w pliku jednym i drugim z tym że w drugim zmienna z parametrem 'extern' - kompilator będzie szukał zmiennej w innych plikach. No się spóźniłem ;)
main.c : [syntax=c] int zmienna; ......[/syntax] xxx.c [syntax=c] #include "zmienne.h" ... x = zmienna; ....[/syntax] zmienne h [syntax=c] #ifndef _ZMIENNE_H_ #define _ZMIENNE_H_ extern int zmienna; .... #endif[/syntax]
Zmienna static w pliku nagłówkowym? WOW. extern poczytaj...
Slowko kluczowe extern przed deklaracja obiektu najczesciej stosowane jest w plikach naglowkowych programu. Powoduje ono, ze w tym konkretnym miejscu nie jest przydzielana pamiec dla obiektu, a wiec nie mozna w jednej linijce zdefiniowac tej zmiennej [przypisac wartosci poczatkowej] //naglowek extern char zmienna; //plik zrodlowy zmienna =12; Poprostu...
Jeśli chodzi o zmienną to musisz dodać do okna głównego zmienną globalną a w nowym oknie też musisz dodać zmienną globalną tylko że przed zmienna musisz dodać słowo kluczowe extern: [syntax=cpp]//okno glowne int twojaZmienna=0; //nowe okno extern int twojaZmienna; //nie można inicjalizować [/syntax]
Dla Twojej wiadomości - extern nie deklaruje zmiennej jako zewnętrznej, tylko informuje kompilator, że taka zmienna występuje w innej jednostce kompilacji (innym pliku) i będzie widoczna dopiero po etapie linkowania. Każdy plik jest kompilowany oddzielnie, więc kompilator nie wie, że coś takiego w ogóle istnieje i gdzie (bo skąd ma wiedzieć). Po to...
Extern informuje że zmienna jest zmienna globalną i występuje gdzieś w projekcie. Przykład: plik_a.c Inny sposób użycia: plik_a.c plik_a.h Jeszcze inny przypadek: Żeby sobie nie zaśmiecać plików źródłowych np. gdy potrzebujesz dostępu do zmiennej tylko w jednej funkcji w innym pliku: plik_a.c void jakas_inna_funkcja(void)
Nie mam żadnego pomysłu na to aby zmusić kompilator AVR GCC(+AVRstudio) aby procedurę obsługi przerwania całkowicie zrealizować jako procedurę napisaną w assemblerze reszta jest w C... Utwórz sobie plik z rozszerzeniem "S", umieść w nim np. coś takiego i dołącz go do projektu :) #include <avr/io.h> #ifdef __SFR_OFFSET #undef __SFR_OFFSET #endif...
Nie musisz tworzyć pliku .h, chociaż takie rozwiązanie jest eleganckie. Jeśli rzecz dotyczy niewielkiej liczby zmiennych lub funkcji używanych tylko w jednym pliku poza tym, w którym są zdefiniowane, możesz ich deklaracje jako zewnętrznych zapisać po prostu w pliku .c, w którym mają być używane, np. extern int zmienna; int funkcja(void); Kompilatorowi...
gcc zmienne globalne i statyczne przypisuje do zera. Jest to zdefiniowane w standardzie :) Optymalizator przypisanie do 0 oleje (w sensie nie zrobi go), ale jeżeli jest wyłączony to marnuje to nieco pamięć programu. I jak napisał sulfur, czy jest to char czy uint8_t, czy jest też volatile czy extern - nie ma to nic do rzeczy
Jeśli zmienna "globalna" w danym pliku jest statyczna, to nie jest ona "exportowana" poza moduł (czyli plik) - żadne extern w tym momencie nie pomoże i będzie skwitowane błędem kompilacji. Dzięki takim niby nic nie znaczącym zabiegom można pokazać komuś (np sobie w przyszłości), że taka zmienna nie jest przeznaczona do użytku na zewnątrz modułu (odpowiednik...
Bo nie ma to żadnego znaczenia, gdzie jest spacja? Dodano po 3 BTW, zapis typ *zmienna, to nie deklaracja, a definicja zmiennej. Deklaracją byłoby np. extern "C" typ *zmienna.
NIGDY nie inkludujesz nigdzie plikow C. w pliku naglowkowym danego modulu dodajesz po prostu deklaracje funkcji w postaci (na przyklad) int uart_init(void); pliki h dolaczasz do swoich modulow c tak, aby byly one autonomiczne. zmienne robisz globalne za posrednictwem 'extern' w pliku c jakiegos modulu deklarujesz wiec zmienna np: volatile int zmienna;...
Napisz może jeszcze gdzie masz zadeklarowaną tą zmienną i w jaki sposób. Może w funkcji trzeba zadeklarować jako extern?
To czy użyjesz "" czy <> określa ścieżki przeszukiwania. Katalog w którym są pliki nagłówkowe może być określony w projekcie. GanzConrad: w pliku nagłówkowym zdecydowanie nie powinno być definicji zmiennych. To może rodzić poważne błędy. Można co najwyżej robić extern typ zmienna.
W programie C++ deklarujesz zmienną w specjalny sposób: extern "C" int wynik=0; extern "C" powoduje że zmienna ma nazwę taką jak podałeś, ale z dodatkowym prefiksem: _wynik. Bez tego zmienna będzie zawierała w nazwie typ zmiennej plus różne dziwaczne znaki, a całość będzie zawsze inna w różnych kompilatorach. Standard "C" zawsze (i tylko)...
Przede wszystkim jeśli zastosujesz .extern to gdzieś ta zmienna musi zostać zdefiniowana. Możesz to zrobić w kodzie C, możesz w kodzie asemblerowym i potem w C dać extern typ zmienna. Dla asemblera będzie to tylko etykieta, więc sam musisz zadbać o jej poprawną interpretację. Możesz się do niej odwoływać poprzez rejestry indeksowe, lub korzystając z...
Ej normalnie ręce opadają... :), toż już nie chce sie nic szukać ludziom.... W display.c zadeklaruj swoją zmienną W display.h daj extern typ twoja zmienna w main.c dołącz display.h
Drogi kolego , popełniłeś szkolny błąd :D W procedurze obsługi przerwania Timer0 masz ... SIGNAL(SIG_OVERFLOW0) //obsługa multipleksowania wyswietlaczy { //extern unsigned char wyswietl[7]; unsigned char licznik;//<-- ********** błąd !!!!!!!!!!! ... zmienną licznik , tyle że jest to zmienna lokalna , czyli istnieje w pamięci...
Wielki dzięki, teraz program działa jak należy. Chciałbym jednak jeszcze się dowiedzieć co to znaczy to extern - chodzi o to że zmienna będzie pobierana z innego pliku ?
Zadeklaruj typy tylko w .h, a przed #include w pliku .c, który ma zawierać zmienne, daj #define extern (puste); możesz też użyć #ifndef extern w pliku .h, żeby pominąć to, co ma być #include-owane przez inne pliki .c, a w tym ze zmiennymi nie powinno być. Przedefniniowywanie znaczenia jakiegokolwiek słowa kluczowego (tutaj: extern) za pomocą preprocesora...
ENKODER.H To raz. Dwa - nie ma nigdzie sei(); Trzy - jak jest otwarty kolektor to trzeba zrobić pullup na linii wejścia. Napisałeś też push pull więc w sumie nie wiadomo jakie jest wyjście z enkodera. 1) Ile mam błędów? Dlaczego mi to nie zadziała? ( : 2) Czy wyjscia A i B mogę podłączyć zgodnie ze schematem? Czy muszę dodać oporniki? Co to znaczy...
To po kolei: EM_A_power to jak widać zmienna float (tu przywołana jako extern), która przyjmuje wynik funkcji IntToFloat. Funkcja umieszczona w szkicu działa od dłuższego czasu, nie działała w wydzielonym pliku; dzięki uwagom kolegi z innego forum okazało się przy okazji, iż w tej formie jest UB, ale o dziwo działała. Tak jak przypuszczałem - "głupi...
Jeśli pragniesz posłużyć się zmienną globalną widzianą w innych modułach możesz to zrobić na przykład tak: 1) z menu "Project" wybierz opcję "View Source" - w nowej zakładce pojawi się kod źródłowy modułu zawierającego główną funkcję WinMain 2) w w/w pliku zdefiniuj swoją zmienną jako zwykłą zmienną globalną np.: int zmienna; 3) utwórz oddzielny plik...
Dla funkcji ISR nie deklarujesz prototypu - prototypy tych funkcji są zadeklarowane w AVR-libc, w skryptach startowych, które są dostarczane w postaci prekompilowanej. Zauważ, że deklaracja prototypu funkcji ma na celu wyłącznie poinformowanie kompilatora jak dana funkcja wygląda. W przypadku ISR informacje te są dokładnie znane więc nie ma potrzeby...
Symulujesz to czy działasz na mikrokontrolerze? Extern do niczego nie będzie Ci tu potrzebne.
ze zmęczenia nie dopatrzyłem się że zrobiłem tylko definicję preprocesora bez deklaracji ;) Ale tym niczego nie zdefiniowałeś tylko powiedziałeś aby preprocesor zastąpił slowo "UART_BUFOR" słowem "32" tekstowo. Jak w pliku .c zrobiłeś volatile char UART_BUFOR[UART_BUFOR_rozmiar]; to zastanów się co się z tym stanie i czy da się to skompilować. Jeżeli...
Podaj kod w Avr gcc jak odczytać wolną pamięć w czasie pracy programu Odczytywanie dostępnej (wolnej) pamięci RAM w czasie pracy programu na mikrokontrolerach AVR może być przydatne do monitorowania wykorzystania zasobów, szczególnie w aplikacjach, które dynamicznie alokują pamięć lub wykonują zadania mogące intensywnie wykorzystywać pamięć. Jednak...
Wiem z literatury, że parametry funkcji można przekazywać przez wartość lub referencję. Ale czy poprawna jest poniższa forma: Dodano po 1 Dodam jeszcze, że zmienna_globalna jest współdzielona między wieloma plikami (extern).
No i chyba nie można deklarować zmiennej jako extern a potem definiować jako static. To może niuans, ale taka interpretacja nawet mi nie przyszła do głowy, jak czytałem pytania. :) W każdym razie - w tym samym kontekście, oczywiście, nie można. Ale jeżeli w innym (wewnątrz funkcji czy bloku), to można - będzie to inna zmienna, przesłaniająca definicję/deklarację...
skoro w pliku nagłówkowym masz: typedef struct { unsigned char hundsecs : 8; unsigned char seconds : 8; unsigned char minutes : 8; unsigned char hours : 8; } time_struct; to jednocześnie powinieneś dać nieco później: extern time_struct time_start; żeby inne moduły korzystające z tego pliku nagłówkowego wiedziały, że gdzieś...
...Deklarację robiłem na różne sposoby np. volatile unsigned char znacznik; i cóż... efekt jest taki, że ewentualna modyfikacja wartości tej zmiennej jest widoczna tylko w danym segmencie kodu... Wytłumaczenie jest proste - źle zbudowałeś projekt :( Przykład: system.h //... volatile int var; //... uart.h //... #include "system.h" //... main.c...
Miało być prosto, zmienna globalna static nie jest widoczna innych plików projektu. Gdy nie jest statyczna mozna się do niej dobrać przez extern.
bez apelacyjne operator extern powinno się tam znaleźć. To zleży jak przebiega proces kompilacji. Jeżeli kompilujemy wszystkie pliki na raz to w sumie ta dyrektywa o której wspominasz działa tak jak oczekujesz i rzeczywiście zmienna jest zadeklarowana tylko raz. Natomiast jak kompilujemy każdy plik źródłowy osobno do postaci pośredniej i później linkujemy...
Czyli rozumiem, że mogę sobie wywoływać funkcję w której tworzę jakąś zmienną tak jak w tym przypadku nawet i milion razy a i tak nie musze się obawiać tak zwanego "wycieku pamięci" bo przy wyjściu z funkcji kompilator sam zadba by ją ubić w sensie zwolnić pamięć? Nie do końca o to chodzi, niby operacja na zmiennych automatycznych nie powoduje wycieku...
Taki zapis ( definicja )powinien być w jednym pliku C (zmienna globalna) volatile unsigned char stan = CZEKAJ; w pliku headera (chyba sensor.h) tylko deklaracja extern volatile unsigned char stan; w żadnym wypadku nie można dawać w headerze (pliku *.h) includowanym do wielu plików *.c definicji zmiennej statycznej static unsigned char stan = CZEKAJ;...
to tak jak to chyba [syntax=c] void spi_transfer_sync (uint16_t * datawy, uint16_t * datawe) { uint16_t i; for (i = 0; i < 6; i++) { SPDR = datawy[i]; while((SPSR & (1<<SPIF))==0); datawe[i] = SPDR; } } [/syntax] a extern nie generuje bledu po poprostu zewnętrzna zmienna
Jeśli np. z niektórych zmiennych korzystasz tylko w module usart a nie w main to możesz je zrobić jako global static (chyba te zmienne const się do tego nadają) i wtedy nie trzeba ich też extern robić bo main z nich nie korzysta const musi być znany podczas kompilacji a nie jest. Przerzuć te zmienne do pliku cpp i będzie ok. Ja może wyjaśnię w czym...
Witam! Są następujące przypadki: - Jeśli np zmienna zewnętrzna została zadeklarowana w innym pliku, wówczas w bieżącym pliku musi wystąpić potwierdzenie tejże deklaracji poprzedzone klasą pamięci extern. - dotyczy funkcji w starszych wersjach języka C (K&R). Jeśli definicja funkcji nie jest poprzedzona typem to kompilator przyjmuje domyślnie, że typem...
Jeżeli w funkcji deklarujesz zmienną o takiej samej nazwie jak zmienna globalna, to automatycznie przysłaniasz widoczność tej zmiennej globalnej. W czym problem aby definicję wyrzucić w miejscu, w którym masz zmienną globalną? Możesz też użyć extern, ale to też wymusi definicję zmiennej razem z deklaracją. Lokalnie jeśli chcesz zainicjalizować wiele...
Witam serdecznie. Po przeszukaniu wątków nie napotkałem na rozwiązanie problemu o podobnej treści. Mianowicie dotychczas korzystałem z eepromu w ten sposób: Piszę językiem C: [syntax=c] extern EEMEM uint16_t eeprom_values[200]; EEMEM uint16_t eeprom_values[200] = {0,0}; //- zapis to zmienna = 85; eeprom_write_word(&eeprom_values[10], zmienna); //odczyt...
Niniejszy artykuł przedstawia programową obsługę enkodera kwadraturowego przy użyciu mikrokontrolera Atmel AVR. Zajmowałem się tutaj enkoderem pochodzącym z drukarki HP. Obrazek niżej przedstawia wyprowadzenia enkodera : http://obrazki.elektroda.pl/7392145600_1... Podłączamy oscyloskop i patrzymy co się dzieje: http://obrazki.elektroda.pl/8018542000_1...
Volatile oznacza, iż zmienna może być modyfikowana asynchronicznie w różnych miejscach kodu. Czyli jeżeli jest to zmienna globalna i ustawiasz ją np gdzieś w przerwaniach to powinna być zadeklarowana jako volatile. Wprawdzie w przypadku avr często działa bez tego ale raczej trzeba o tym pamiętać. Pamiętaj, że jeżeli zmienna jest zadeklarowana w innym...
Tłumaczę sobie. Podana przez Pana konstrukcja nic nie dawała (wręcz odwrotnie), jednak tego typu błędy dziwnym trafem znikły. Jaka konstrukcja? Dyrektywa #ifndef? Próbowałeś doczytać jak i po co się ją stosuje? Nic się nie dzieje "dziwnym trafem". Teraz do tej samej zmiennej (g_KierunekRuchu) są dwa błędy: "function does not take 1 arguments", "too...
Nazwy parametrow Do niczego ;) Deklaracja funkcji nie musi w ogóle zawierać nazw parametrów. Jeżeli napiszesz Nie bardzo - to właśnie ta linijka będzie deklaracją zmiennej. Gdzie indziej może być jej definicja. W ramach kursów, lekturka na długie wieczory: http://mikrokontrolery.blogspot.com/
Electix: a możesz podać przykład jak by tą zmienną nie zadeklarować jako globalną, a kod by się kompilował? Bo jakoś tego nie widzę. O ile w tym przypadku może być celowe użycie modyfikatora volatile, to bynajmniej nie jest ono podyktowane użyciem zmiennej sstatus w przerwaniu, ponieważ nie jest ona w tym przerwaniu modyfikowana, a jedynie odczytywana,...
Może coś takiego: Ponowne pytanie - co jest owym "X"-em? zmienna, stała, typ prosty, złożony, a może napis? Pewnie o to chodzi: [syntax=c]int main(void) { TIME_COMPILE_SIZE_WITHOUT_CRC16((int32_t... // good int size = SIZE_WITHOUT_CRC16((int32_t)254); TIME_COMPILE_SIZE_WITHOUT_CRC16((int8_t)... // error size = SIZE_WITHOUT_CRC16((int8_t)254); printf("size...
Probowalem zrobic jak mowiles, dalem wysylanie nawet zaraz po sprawdzeniu zmiennej odebrano_polecenie. Wyglada na to ze ta instrukcja warunkowa nigdy nie wykonuje sie poprawnie. Zmienna odebrano_polecenie jest zadeklarowana na poczatku pliku main jako int odebrano_polecenie = 0; Natomiast w pliku zawierajacym obsluge przerwania mam: extern int odebrano_polecenie;...
pinMode(led_lcd, OUTPUT); // podswietle... lcd.backlight(); To pierwsze led-lcd jest niepotrzebne. Zalatwia to biblioteka poprzez wywołanie metody backlight() -to właśnie włącza podświetlenie lcd. Z grubsza wgląda dobrze. Jeszcze przy definicji dwóch funkcji extern uint8_t dec_na_bcd(uint8_t num) ...
Twój błąd jest spowodowany tym że w swoim pliku 'plik.h' zadeklarowałeś zmienną globalną. Kompilator kompiluje kazdy plik *.c osobno wiec nie zgłasza błędu, problem pojawia się dopiero przy linkowaniu - linker łączy wszystkie pliki pośrednie *.obj i natrafia na problem - w każdym zadeklarowales te same zmienne i powstaje konflikt. Zeby tak sie nie dzialo...
Po ludzku czyli tak: 1. Zmienne/stałe są TYLKO I WYŁĄCZNIE w plikach źródłowych (*.c, *.cpp, itd.) 2. Jeśli chcesz aby zmienna była prywatna dla danego pliku jej definicję poprzedzasz słowem "static" - teraz każdy plik może mieć zmienne o takiej samej nazwie, ale nie będą się one nakładać, nie ma też możliwości udostępnienia ich "zewnętrznie" wg punktu...
Witam, widzę mój problem, ale nie wiem jak go rozwiązać :( mam zadeklarowana i zdefiniowaną zmienna w pliku widget.c jak poniżej: [syntax=c] tWidget g_sRoot = { sizeof(tWidget), 0, 0, 0, 0, { 0, 0, 0, 0, }, WidgetDefaultMsgProc }; [/syntax] zadeklarowana jako extern w widget.h Problem polega na tym, że w zmiennej są śmieci dlatego coś się wykrzacza...
W pgmspace są zawarte definicje chyba wszystkich funkcji (jako inline) więc raczej nie ma nic więcej. W eeprom funkcje są zadeklarowane jako extern, więc źródła funkcji będą w źródłach biblioteki (avr-libc), do pobrania z internetu. Nie ma ani wymagania, ani praktyki, aby jednemu plikowi .h odpowiadał jeden plik .c.
Oczywiście, że sprawdziłem. To była pierwsza rzecz :) Gdy będę w domu to podrzucę gotowy projekt. Kompilator będzie wiedział, bo w Eclipse "jest automat", który kompiluje każdy plik .c do pliku obiektowego .o. Inaczej pisząc "znajduje" wszystkie pliki .c w katalogu głównym projektu i również podkatalogach, "robi" z nich pliki obiektowe .o a potem "podaje"...
Kompilator to VC++ 6.0 (at)fantom liczba jest typu float. Jednak to nadal nie przynosi sukcesu... Obsługa odczytu pliku ma być jak najbardziej C++ ...cokolwiek to znaczy. Więc żadne fscany nie wchodzą w grę, broń Boże nie jest to mój wymysł, tylko prowadzącego. Klasa ifstream ma operator >> ktorym mozesz skonwertowac ten strumien na kilka typow...
Nie no jeżeli zadeklarujesz zmienna w pliku interrupt tak: volatile TFrame Frame; a w main-e dasz informacje kompilatorowi w ten sposób: extern volatile TFrame Frame; to niemożliwe żeby kompilator pominął tą zmienną. Sprawdź jeszcze czy dobrze ustawiana jest flaga Frame.state & READY. Z natury nie ufam AVRStudio ( Softwarowy Debugger juz pare razy mnie...
Te zmienne które musza zostać przechowane do następnego wykonania loop() musisz zadeklarować poza tą funkcją (jako globalne) Niekoniecznie - wystarczy zadeklarować w funkcji, że są "static", np. "static int zm1 = 123;" - to spowoduje, że początkowo zmienna zm1 (typu int) będzie 123, ale jak się do niej potem wpisze coś innego, to będzie przechowywać...
Z zasady w plikach .h nie umieszcz się kodu, a jedynie deklaracje i makra. W pliku .h zadeklaruj zmienne globalne jako extern. Zrób dwa pliki .c, w obu zainclude'uj plik .h a w jednym z nich umiesc definicję zmiennej globalnej, ale już bez extern. W pliku .h powinny znaleźć się także prototypy funkcji, które mają być dostępne "z zewnątrz" Ogólnie wszystko...
No to tak. Nie lubię _delay(). Do kodu menu tmf dodałem timer programowy z książki Mirka. Najpierw kompilator powiedział mi że jestem głupi bo nie widzi Timer1 w pliku menu_alfa. To zgodnie z tym co napisł tadzik85 napisałem że jest extern volatile- no to kompilator się na to zgodził. Chociaż nie rozumiem- przecież Timer1 jest volatile- globalny w...
Jak już pisać wstawki w ASM, to zamiast używać kodu w stylu (przykład z GCC-AVR Inline Assembler Cookbook): naked ): _SFR_IO_ADDR(SREG) zamiast zwykłego SREG . Można zresztą w ten sposób pisać także funkcje wywoływane później w plikach *.c, jeśli są np. krytyczne czasowo. No chyba, że tego wstawianego kodu będzie naprawdę niewiele :)
Jeśli zmienna counter jest typu volatile, jest to dla kompilatora informacja, że każde odwołanie musi się odwoływać do pamięci, co spowoduje wielokrotne przeładowanie zmiennej mimo, że nie ulega ona zmianie: można zrobić kopię lokalną na czas przerwania. Ciągłe odwołania do PORTB i PORTD jeśli nie zostaną zoptymalizowane do instrukcji cbi, to kod będzie...
Dziękuje bardzo za odpowiedź, mam jeszcze 2 pytania: 1. Jaki polecacie poradnik żeby dobrze ogarnąć się w Eclipse, okna, deubgowanie itp? Dotychczas używałem Geany, Eclipse ma dużo więcej możliwości daltego czuje się trochę zagubiony. 2. Rozumiem że skoro program napisany poniżej wykonuje się poprawnie to pliki w ramach jednego projektu są linkowane...
Cześć Coś mi kod do obsługi wyświetlacza LED niedziała. Czy moglibyście rzucić na to okiem. [syntax=c] #ifndef DISPLAY_LED_H_ #define DISPLAY_LED_H_ //Załączenie plików bibliotecznych #include<avr/io.h> #include<avr/pgmspace.h> #include<avr/interrupt.h> //Deklaracja zmiennych na których wykonywane są operacje w przerwaniu extern volatile...
Z tego co zauważyłem, mikrokontroler taktujesz częstotliwością 1MHz. Przy preskalerze 1024 częstotliwość taktowania timera będzie równa 1000000Hz/1024=976,5625Hz. Z tego wniosek, że w ciągu 1 sekundy timer zlicza 976,5625 impulsów. Biorąc pod uwagę, że timer jest 16-bitowy przepełni się 1 raz na (65536/976,5625) 67,108864 sekund. Jeśli nie musisz schodzić...
Po dłuższej przerwie, wziąłem się za pisanie kodu. I mam problem z widocznością zmiennej "volatile" w plikach. Nie wiem, czy czytelnie to opisałem w poniższym wyrywkowym kodzie. Może Ktoś zerknie i udzieli jakiejś rady Generalnie chodzi o zmienną - bool przerw_KL [syntax=c]Pilik nr 1. #include <avr/io.h> . . volatile bool przerw_KL=false; // Zmienna...
A jak sprawdzać wolną pamięć w czasie pracy programu na AVR, podaj przyklad kodu Dodano po 1 Cześć! Bardzo dobrze, że pytasz o monitorowanie wolnej pamięci w trakcie pracy programu na mikrokontrolerach AVR, ponieważ jest to ważny aspekt w projektowaniu stabilnych i efektywnych aplikacji. Istnieje kilka metod na sprawdzanie dostępnej pamięci RAM, ale...
Witam wszystkich 1) Mam pytanie o miejsce umieszczenia definicji nowego typu strukturalnego przykład poniżej [syntax=c] struct czas { uint8_t Top; uint8_t Tpw; uint8_t Tpz; }; //---------------- plik nastawy.h --------------------- extern struct czas nastawy; //-------------- plik nastawy.c ----------------------- // definicja zmiennej strukturalnej...
Pierwsza sprawa jest taka, że zmienna odczytywana/zapisywana przez przerwanie i kod główny powinna być volatile. Zrobiłem tę zmienną ulotną: Druga zaś - 1ms delay w przerwaniu to nie jest szczególnie dobry pomysł... Hmmm... Ten delay jest po to w tym miejscu, że po wyzwoleniu przez opadające zbocze jednego sygnału z dwóch wyjściowych enkodera (nazywam...
Poprawiłem tak: flagi.h //**************************************... struct wire{unsigned char fc; // uint8_t serial[6]; // nr serial char text[9]; // opis urz. unsigned char tC;}; extern struct wire one_wire[8]; config.h //**************************************... Zawartość nie istotna do tematu. main.c //**************************************...
To nie żaden problem z kompilatorem/debugerem tylko niestety problem ze zrozumieniem co i jak powinno działać. Po pierwsze nie wyłączaj żadnej optymalizacji bo po co??? Chyba, że tobisz ten program, żeby działał po wsze czasy tylko w symulatorze to wtedy możesz się bawić w takie tam. Analizując od góry, po co ci: volatile char jjj; tzn po co to volatile...
no i zgodznie z tym co jest na tej stronce lub w instrukcji do ld (linkera) 1. wymyslic nazwe sekcji, np .ext_mem 2. zadeklarowac ja sobie w skrypcie linkera: MEMORY { ... EXTERNAL (rw) : ORIGIN = (jakis_adres), LENGTH = (jakas_dlugosc) ... } ... SECTIONS { ... .ext_mem : { *(.ext_mem) }...
Środowisko Microchip Studio (dawniej Atmel Studio7) Kompilator: XC8 Procesor ATMEGA328PB Próbuję umieścić zmienną w jednym z dostępnych rejestrów GPIOR, pozwalających na dostęp poprzez IN i OUT oraz operacje SBI, CBI W kompilatorze IARa miałem to zrobione tak: 4.3.10.5 Io Attribute Objects defined using the io(address) attribute represent memory-mapped...
Słowo kluczowe "static" powoduje tylko, że zmienna jest statyczna, czyli nie jest likwidowana (zachowuje swoją wartość) po opuszczeniu bloku w którym została zadeklarowana - w przeciwieństwie do zmiennych automatycznych. I w zasadzie nic więcej. Nie ma wpływu na obszar swojej "widzialności". Niezupełnie tak. Owszem, jest tak w przypadku zmiennych zadeklarowanych...
Wiem że zostanę pewnie wyklnięty ze społeczności za ponowne poruszanie tematu 1-wire ale przerobiłem trochę działający kod który sam kiedyś popełniłem na armie na potrzeby atmegi i kurcze nie chce to działać... siedzę i myślę co może być nie tak i szczerze nie mam już pomysłów, więc chciałbym prosić aby ktoś zerknął na kod i powiedział gdzie ewentualnie...
Witam od dłuższego czasu piszę sobie spokojnie projekcik na STM32f429. Z racji że projekt dość szybko rośnie w i C zaczął zajmować pół mega postanowiłem skurczyć go przy użyciu C++. Konwersja poszła gładko ... Jednak gdy wyrzuce adcHandle poza klase i w pliku przerwań zdeklaruje zmienną jako extern wszystko działa. Jest w stanie jakaś mądra głowa powiedzieć...
Doszedłem już do rozwiązania, jeśli kogoś interesuje to zagadnienie, to idzie to tak: (przykład trochę łopatologiczny) ;assemblerowy moduł: .586 .model flat, stdcall .code public _A ;funkcja, którą wywołam spod Buildera extrn _k : WORD; builderowa zmienna w której będę grzebał _A proc mov _k, 100 ret _A endp end całość asembuję: tasm32 moduł_asm.asm...
Jak Attiny13 nie jest takim sztywnym kryterium to w serii Attiny25/45/85 już lepiej wziąć 85 (pojedyncze sztuki są tańsze niż odpowiednio 45), ma więcej RAM, a w całej tej serii jest dostępny USI, a do USI jest biblioteka tu: https://github.com/frank26080115/Arduino... - prawie że sprzętowa obsługa UART. Przy czym ceny Attiny45/85 na...
Postanowilem podzielic sie z wami moimi doswiadczeniami wykorzystania interfejsu USB we wlasnych projektach. Jak wiadomo interfejs USB jest juz powszechnie dolaczanym interfejsem do mikrokontrolerow wiekszosci producentow na rynku. Sama obsluga USB zarowno po stronie mikrokontrolera jak i pc (a wlasciwie Windows) jest mniej przyjazna niz w wiekszosci...
Od jakiegoś czasu nie importuję gotowych rozwiązań bibliotek C, tworząc własne - o dużej gęstości informacji, co przypadkiem przekłada się na wydajność i wyliczony koszt zużytej energii/funkcję. Wymaga to dużego nakładu pracy - to prawda. Przepisywanie rejestrów nie jest czasochłonne, po jakimś czasie zdefiniowanie jakiegoś procesora zajmuje pojedyncze...
Chciałbym zwrócić uwagę na odczyt wyniku konwersji: [syntax=c] ... uint16_t ConversionResults[ADC_CHANNELS]; // zmienna 16bitowa ... ADMUX = 0x60; // AVCC with external capacitor at AREF pin, left adjust result; // left adjusted, czyli przesunięty o 6 bitów w lewo !!! ... static const uint8_tChannelMUX[ADC_CHANNELS] = {0x61, 0x62, 0x63}; // włączony...
z gory zaznaczam ze to moj pierwszy program! mam atmege 128 i wysw. 7segm. i za zadanie mam jakikolwiek prosty zegarek/stoper napisac cos tam napisalam ale niestety zle mi wyswietla tzn wgl nie realizuje kodu teoretycznie algorytm jest dobrze napisany, ale jak zmieniam liczby tutaj : [syntax=c]TCCR0 |= (1<<WGM01); //tryb CTC OCR0 = 39; //ustawienie...
a tu przesyłam zawartość pliku który mi działa (i to musi być w oddzielnym pliku zapisane właśnie): /***** RAM FUNCTIONS ****/ #include <stdio.h> /* I/O Functions */ #include <AT91SAM7S256.H> /* AT91SAM7S256 definitions */ #include <lib_AT91SAM7S256.H> /* AT91SAM7S256 definitions */ #include <inttypes.h> #include "Board.h"...
Próbuję zrozumieć zasadę działania timera0 w normalnym trybie pracy, ale niestety mój kod i sposób rozumowania najprawdopodobniej jest zły, ponieważ dioda nie miga. W związku z tym chciałbym poprosić kogoś o weryfikację kodu oraz mojego rozumowania, bo może coś robię źle. W kodzie zamieściłem stosowne komentarze więc nie będę ich dublował. Częstotliwość...
If the DS18S20 is powered by an external supply, the master can issue read-time slots after the Convert T command and the DS18S20 will respond by transmitting 0 while the temperature conversion is in progress and 1 when the conversion is done . In parasite power mode this notification technique cannot be used since the bus is pulled high by the strong...
Mam dziwny problem ze wskaźnikiem na funkcję. W kodzie jak poniżej pole initDriver nie jest inicjowane adresem funkcji (0x0800ecd0), tylko jakby popsutym (0x8800ecd1). Wygląda jakby coś niepotrzebnie ustawiało dwa bity w adresie, najmłodszy i najstarszy. Jakie może być wytłumaczenie? [syntax=c] drv = (struct at_ble_drv_t*) ble_memalloc(sizeof(struct...
Jakiś fizyczny sposób załączenia przerwania timera przerwaniem od INT0 . Szukam i nie mogę znaleźć żadnych przykładów ani bardziej szczegółowego opisu jak to ugryźć , we wcześniejszych odpowiedziach nikt nie napisał dlaczego nie można używać delay w przerwaniu a w prostej wersji programu nie wpływało to na działanie. Teraz mam bardziej rozwinięta wersje...
Witam, Mam potencjalnie banalny problem z odczytem stringa z przerwania UART w pętli głównej programu. Kiedy przesyłam przez UART ciąg znaków są one odbierane, jednak przy próbie wyświetlenia ich na wyświetlaczu którego obsługa znajduje się w pętli głównej programu zamiast przesłanego stringu widzę losowe śmieci z pamięci (np. fragmenty danych poprzednio...
Witam, Zrobiłem na Atmega8 regulator oświetlenia. W zasadzie wszystko działa, tylko irytuje mnie występująca niewielka fluktuacja natężenia światła. Nic nie mruga, ale jak się uważnie przyjrzeć, to natężenie światła lekko faluje. Na każdym etapie regulacji. AVR taktowany zewnętrznym kwarcem 8MHz. Zmienna light, zmieniana w głównej części programu. Nie...
Witam ponownie, tym razem przynoszę inny problem...Mianowicie mój skromy program postanowiłem rozbić sobie na dwa pliki pierwszy cgD.h //cgD.h #include "cgD.h" extern __IO uint16_t delayCount; void ChangeD() { delayCount = delayCount + 1; } void EXTI9_5_IRQHandler(void) { EXTI_ClearITPendingBit(EXTI_Line8...
Witam, od pewnego czasu nie mogę poradzić sobie z problemem sterowania PWM w mikrokontrolerze LPC1768 (dokładnie jest to płytka LandTiger). Próbowałem setek różnych kombinacji aby to poprawnie uruchomić, jednak niestety bezskutecznie. Dodam, że jestem początkującym programistą i na pewno sporo wiedzy jeszcze mnie czeka do przyswojenia, ale przeszukałem...
[syntax=text]Witam książkowy program trochę przerobiony do swoich potrzeb i wyskakują takie błędy jak w temacie. Proszę o jakieś wskazówki. Bo właśnie się poddałem (brakuje mi pomysłu brak wiedz z c), szukałem i w google ale nic nie znalazłem. Zaczyna przygodę z c i się uczę dobra kod programu[/syntax] [code][syntax=c] plik LED4_Plex.c #include <avr/io.h>...
Pokaż schemat i program Oto schemat: http://obrazki.elektroda.net/49_12712769... Na nim bazowałem. Oto program główny: #define F_CPU 1000000UL #include <avr/io.h> #include <inttypes.h> #include <util/delay.h> #include <LCD.c> #include <Klawiatura_2x2.c> unsigned char klawisz; //ostatnio naciśniety klawisz //--------------------------------------...
Okej, ogólnie to działa, wielkie dzięki za tamto. Mam jednak dalszy problem troszkę. Ogólnie chcę osiągnąć coś takiego, że wysyłam najpierw z Matlaba liczbę - jakąś flagę, po której uC wejdzie do odpowiedniej pętli. Po wejściu do tej pętli dopiero w niej ma odbierać wysłaną z Matlaba wartość. Czyli np. najpierw wysyłam liczbę równą 2 z Matlaba do uC....
Napisz teraz analogiczną funkcję w C++20, która zamiast funkcji ipc_get_core_freq() będzie korzystała z funkcji lambda. W języku C++20 możemy wykorzystać wyrażenia lambda, które są bardzo przydatne wtedy, gdy chcemy przekazać blok kodu jako argument funkcji bez konieczności definiowania oddzielnej funkcji. Lambda może również przechwytywać zmienne...
Kontynuując temat skanowania kanałów WiFi dla nadajnika ESP-NOW natknąłem sie w internecie na opis skanowania w trybie ESP-Now. Dlaczego na to wcześniej nie wpadłem ?? :D Wykorzystując pomysł wziałem się za napisanie podobnego kodu do swoich modułów pomiarowych stacji pogodowej. Według mnie spisuje się bardzo dobrze. Przede wszystkim działa to dużo...
Witam. Problem dotyczy funkcji zaimportowanej z dll. Import funkcji wyglada nastepujaco (wykomentowana cześć to oryginalny nagłówek funkcji wzięty z programu żródłowego dll): [syntax=delphi] //ReadUSBPacket(LMUSB_HANDLE hHandle, unsigned char *pcBuffer, unsigned long ulSize, unsigned long *pulRead, unsigned long ulTimeoutMs, HANDLE hBreak); function...
Korzystam z GuiBuildera i emWin na STM32F429i DISC1. Chciałbym automatycznie odświeżać napis (zmienna array) na polu TEXT. Tekst odświeża się po kliknięciu przycisku ale już automatycznie nie wiem jak zrobić. Kod z obsługą zdarzeń od kliknięcia itd. [syntax=c]/*****************************... * * * SEGGER Microcontroller...
Witam szukałem w Internecie ale nic na ten temat nie znalazłem. W WinAVR gdy próbuję użyć zmiennej o nazwie SP to wyskakują jakieś dziwne błędy podczas kompilacji. A widzisz ;) gdybyś korzystał z ECLIPSE, a zobacz dlaczego jeszcze warto: http://mirekk36.blogspot.com/2011/11/dla... to wystarczyłoby żebyś podjechał kursorem...
Tyle ,ze właśnie zasięg tej zmiennej globalnej , jest tylko względem jednego pliku ( static w tym utwierdza ) , więc żadne externy nie wchodzą w grę , i o zasięgu zmiennych trochę wiem , dlatego dziwi mnie to okropnie :)
Witam mam problem z multipleksowaniem wyświetlacza 7 segmentowego. Wydaje mi się że program jest napisany poprawnie, a wyświetlacz nie daje oznak życia. Sprawdzałem go już chyba ze sto razy. Jestem początkujący jeśli chodzi o programowanie.Aha najważniejsze wyświetlacze są ze wspólną anodą.Anody sterowane przez tranzystory PNP. Układowo wszystko jest...
progmem extern static extern funkcja extern
zakładanie nowych tematów samoczynne uzbrojenie alarmu strumienica zamiast katalizatora
satel integra 128wrl kluczyk kodowanie
Drukarka Samsung 430 wyłącza się podczas rozgrzewania - przyczyny i rozwiązania Termet Silver Pro 20 kW: Optymalne ustawienia dla oszczędności gazu