statyczną możesz używać tylko w tej funkcji, czasami bezpieczniejsz abo nie zmienisz przypadkiem ;) globalną używasz wszędzie
Zmienna static w pliku nagłówkowym? WOW. extern poczytaj...
IMHO przyczyna leży całkiem gdzie indziej. Może procek się nie wyrabia. W przypadku zmiennej globalnej, na etapie konsolidacji jej adres jest znany, a więc dostęp może być przez adresowanie bezpośrednie. W przypadku zmiennej na stosie prawdopodobnie (nie wiem, domyślam się, nie chce mi się sprawdzać) zachodzi adresowanie pośrednie. Być może z dodatkowym...
Zmienna static to podobnie jak zmienna globalna z tą różnicą, że widziana tylko w jednym module. Czyli piszesz procedure i definiujesz ją jako static. Po wyjściu i ponownym wejściu do procedury posiada ona wartość taką, z jaką ją zostawiłeś przy wychodzeniu. W odróżnieniu od zmiennej globalnej możesz używać nazwy zmiennej takiej samej w różnych procedurach...
Jeszcze raz zaznaczam, nie znam dokładnie C, ale w paru innych językach typ static wypełniał lukę między zmiennymi lokalnymi i globalnymi. Zmienna static była trochę "lokalna", bo poza funkcją jej nie widać, a trochę jakby "globalna", bo przechowywała wartość przez cały czas trawnia programu (no, trochę tu łopatologicznie poleciałem :) ).
Jeśli stale to wykasuj z opcji: [syntax=c] case Nic:{ lcd.print(" "); break; } [/syntax] czyszczenie ekranu spacjami. Tu ewentualnie powinien być zliczany timeout, czyli jakaś zmienna co np. 1ms i jak przez 10s (z delay rozumiem, że to jest Twoje stale): [syntax=c] case Nic:{ static uint16_t timeout1=0; //zmienna static będzie żyła od tego miejsca aż...
Racja, zgadzam się. Zmienna static bez łączności nie jest tworzona na stosie, żyje sobie od początku do końca programu, jedynie jej zasięg jest ograniczony do bloku lub funkcji, ale nadal nie rozumiem co powoduje że te zapisy są różne: W pierwszym przypadku jest najpierw (w czasie startu) inicjowana wartością zerową (NULL) a potem w funkcji (main)...
Poczytaj o zmiennych static. http://pl.wikibooks.org/wiki/C/Zmienne#s...
W AVR GCC wszystkie zmienne globalne i statyczne są automatycznie zerowane i nie ma najmniejszej potrzeby ich inicjalizacji zerami. Jeśli natomiast definicja zmiennej znajduje się wewnątrz funkcji to już trzeba ją samemu inicjalizować. Co jest dosyć oczywiste, bo nie jest wtedy zmienną globalną :) Przy czym istnieje wyjątek - lokalne zmienne statyczne...
Jeśli przy wywołanie np f5 - > CDU - > klik w multiinstance to doda ci zmienna static CDU w DB bloku który tworzysz
Czyli, generalnie zmienna lokalna zadeklarowana w przerwaniu , też będzie odłożona przez kompilator do rejestru i potem wszystkie operacje będą wykonywane na tym rejestrze? Dokładnie tak będzie. A jak wygląda sprawa z zmienną lokalną z specyfikatorem "static" ? Taka zmienna, jest niby tworzona w pamięci RAM, tam gdzie zmienne globalne, ale jej dostęp...
1. Jeżeli porównujesz ze stałymi (tak jak w Twoim przypadku) to lepiej użyć switch-case zamiast if-else-if. 2. Lepiej ustawić po prostu flagę. Tego typu optymalizacje powodują tylko kłopoty a zysk z nich marny. 3. Według mnie lepiej wygląda while. 4. Jeżeli wykorzystujesz ta zmienna tylko w main to może być zadeklarowana bez static jako zmienna automatyczna...
Witam; uczę się języka C i dotarłem do programu w którym jest funkcja poprzedzona słowem Static. Coś w tym stylu: static Void nazwa_funkcji(void) i właśnie kompletnie tego nie rozumiem. Zmienna static która znajduje się wewnątrz funkcji jest dla mnie zrozumiała, ale oznaczenie funkcji jako static kompletnie nie rozumiem.
Spróbuj tak: /* zmienna globalna */ static uint8_t regulacja_temperatury = 1; if(bit_is_clear(PRZYCISKI_PIN_PO... { MOC3041_1_ON; MOC3041_2_ON; MOC3041_3_ON; regulacja_temperatury = 1; } else if(bit_is_clear(PRZYCISKI_PIN_PO... { MOC3041_1_OFF; MOC3041_2_OFF; MOC3041_3_OFF;...
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.
Jeśli ja podam, to będzie znowu "gdzieś wyczytana informacja" i błędy mogą się mnożyć. Jak wyszukasz, i sprawdzisz to zapamiętasz co i jak na całe życie. Poza tym prośba o skompilowanie własnego kodu i zobaczenie efektów programu chyba aż tak trudna nie jest. A dla zaspokojenia Twojej ciekawości u mnie wychodzi 134518174 bez static (gcc, linux) Albert...
Musisz mieć zrobione przerwanie dla tego PWMa i w przerwaniu zmienna 'static' inkrementowana za każdym razem. I przy 499 zmieniasz wartość rejestru, pamiętaj tylko że wartość wpisujesz do 'shadow register' a nie bezpośrednio do rejestru PWMa (inaczej będziesz mieć "niespodzianki" na wyjściu ;-) ). Kodu, który napisałeś nie będę komentować - błąd na...
od tego są flagi UARTU. Odbiór w przerwaniu odbierasz tylko znak, i instrumentujesz zmienna static oznaczająca ilość danych już odebranych, gdy odbierasz 0x55 (początek ramki - nigdzie indziej nie może zostać przypadkiem wysłana) zmienna ustawiasz na 0. dalej dekrementacja licznika dalej warunek końca ramki. sprawdzasz komendą i robisz co chcesz. Co...
[syntax=c] (...) static EEMEM uint8_t histereza = 3; //zmienna do pamieci EEPROM int main(void) { (...) uint8_t histereza = eeprom_read_byte(&histereza); (...) [/syntax] Zgadnij dlaczego nie działa ? Podpowiedź - nazwy.
A pod jakim adresem w eepromie bedzie sie znajdowac tak zadeklarowana zmienna static EEMEM uint8_t zmienna_w_eepromie ; Czy to będzie zawsze adres 0x0, w przypadku gdy jest to jedyna zmienna zadeklarowana w eepromie? Dodano po 17 chodzi mi o to że jak coś zapisze pod zmienna, później wyłączę mikrokontroler, następnie złlacze i odczytam wartość tej zmiennej,...
Nie wnikając w resztę kodu - w przerwaniu ustawiaj flagę (w zmiennej) na podstawie której zostanie wykonana procedura w funkcji, a na koniec, następuje zmiana flagi na przeciwną. Zatem w przerwaniu nie wykonujesz obsługi serial'a, ustawiasz tylko wartość zmiennej. [syntax=c] #define LED_R 10 #define LED_G 11 #define LED_B 12 #define ENKODER 2 int impulses;...
ustaw sobie przerwanie od np. TIMER2 co 10ms i sprawdzaj 4 ostatnie stany przycisku. teoria: http://mikrokontrolery.blogspot.com/2011... powyższe zaadoptowane do A8: [syntax=c] //**************definicja przycisku************** #define _Key _BV(PD7) #define Key_PIN PIND #define Key_DDR DDRD #define Key_PORTPORTD...
Nie wiem w jakim celu wyłączasz timer na czas obsługi przycisku. Procedura obsługi przerwania powinna być jak najkrótsza. Niepotrzebnie wywołujesz za każdym razem funkcję setNum(). Warto byłoby ją wyrzucić do pętli głównej i wykonywać tylko w momencie zmiany prędkości. Utwórz sobie tablicę trzech elementów, w których przechowywał będziesz kolejne cyfry....
const int liczba=10; może niestety wiązać się z rezerwacją miejsca w pamięci. Przykład dondu był zbyt trywialny i dlatego wyszło, że oba sposoby prowadzą do tego samego. Pomiędzy define a const zmienna są istotne różnice. Np. można pobrać adres zmiennej, lecz nie etykiety. Aby oba sposoby były w miarę równoważne lepiej stosować static const zmienna....
Bo volatile nie decyduje o tym, czy zmienna "automagicznie" przyjmie wartość zero. Natomiast wszystkie niezainicjowane zmienne globalne są równe zero. Pamiętaj, że każde słowo kluczowe wywołuje określone efekty. Stosowanie static tylko po to, żeby wartość początkowa była "0" to głupota, bo można napisać " = 0;", a to przecież nie boli.
Witam Chciałbym zacząć programować mikrokontrolery. Kupiłem sobie płytkę z STM32, ale używając fragmentów kodu do nauki w C, niekiedy widzę: [syntax=c]static void funkcja (int zmienna)[/syntax] Po co stosuję się ten "static" przed funkcją? Pozdrawiam.
(at)pablos23: Zmienna zadeklarowana jako int aux = 0; jest tworzona i inicjowana na nowo przy każdym wykonaniu funkcji (dokładniej: jest alokowana na stosie). Za każdym razem ma wartość 0, więc warunek pierwszego if-a jest spełniony. Aby zmienna była "wspólna" dla różnych wykonań funkcji trzeba ją zadeklarować jako static int aux = 0; wtedy przypisanie...
Lepiej napisać tak - zmienne automatyczne trzeba inicjalizować ręcznie. Automatyczne to są te zmienne, które alokowane są na stosie, czyli zmienne lokalne, ale nie-statyczne. void f(void) { int auto; // zmienna automatyczna - wartosc losowa static int stat; // zmienna statyczna - wartosc 0 ... 4\/3!!
Zapewne program się wykrzacza na tym reti(). Skąd pomysł, aby umieścić taką instrukcję? Ponadto raczej lepiej byłoby aby zmienna licznik była zadeklarowana jako static w ISR.
zastanawialem sie w jaki sposob zrobic obsluge sterowania 3 przyciskami np. do ustawienia zegara czy czegos tam... myslalem nad sposobem 3 przyciski przycisk 1 podpięty pod przerwanie int , przelaczanie w sposob: -ustawienie godziny -ustawienie minuty -wyjscie z ustawienia (i wyswietlanie czasu) przyciski 2 i 3 (jako gór-dół w ustawianiu czasu) musialbym...
(at)grko, możesz mi powiedzieć, o co chodzi z tym brakiem const? Pogoogluj za hasłem "const correctness". Nie wiem, czy miałeś to samo, co ja zauważyłem, że jak deklarowałem zmienne w funkcji taska przed pętlą while(1), to gdy użyłem "const typ nazwa_zmiennej", to mimo wszystko miałem tą zmienną umieszczoną w stosie. Dopiero pomagała deklaracja "static...
Proszę bardzo: [syntax=c]ISR(TIMER1_COMPA_vect) { static uint8_t licznik=1; // zmienna do przełączania kolejnych wyświetlaczy if (licznik==1) wylacz_czwarty_i_wlacz_pierwszy_segment(... if (licznik==2) wylacz_pierwszy_i_wlacz_drugi_segment(); if (licznik==3) wylacz_drugi_i_wlacz_trzeci_segment(); if (licznik==4) wylacz_trzeci_i_wlacz_czwarty_segment();...
Masz błąd w procedurze wyświetlania - na wyświetlaczu będzie widać "duchy" sąsiednich cyfr. Gdybyś zamiast zmiennych s1, s1, s10 zrobił tablicę, mógłbyś wywalić switch, tak, jak Ci to pokazałem wyżej: PORTD = c[cyfra[i]]; Twoja pętla główna ciągle zamienia liczbę na cyfry, a wystarczy zrobić to jeden raz po zmianie wartości. Tablicy c nie ma sensu deklarować...
Nie potrzebujesz volatile, a jeśli chcesz skomplikować kod, to faktycznie zapis: div_1s=div_1s-1; if (div_1s == 0) działa podobnie (tylko może trochę wolniej), jak if (--div_1s == 0) Zmienna div_1s powinna być zadeklarowana w procedurze przerwania timera jako static uint16_t (i zapewne powinna zliczać w dół od wartości znacznie większej, niż 150). Książki...
słowa kluczowe : STATIC i operator ^
Warning dostajesz bo ta zmienna nie jest zainicjowana w procedurze obslugi przerwania tylko w main. Kompilator o tym nic nie wie. Jesli ci ten warning przeszkadza to zadeklaruj ta zmienna jako static co automatycznie ja zainicjalizuje na 0 i usatysfakcjonuje kompilator. W tym wypadku ta zmienna nie musi byc volatile, bo korzystasz z niej wylacznie w...
poprawilem wedlug rad na ">=" ale teraz mam pytanie czy lepiej zmienna liczniku zadeklarowac jako static u08 licznik=0; czy na poczatku wywolania funkcji USART_getfile przypisac ja do liczniku=usartbufferlicznik; przy czym usartbufferlicznik jest zmienna globalna? deklaracja u08 usartbufferlicznik=0;
[syntax=c] #define Button (1<<PB0) #define Button_PORT PORTB #define Button_PIN PINB #define Button_DDR DDRB volatile _Bool Key_Pressed = 0; // flaga wciśniętego przycisku [/syntax] [syntax=c] Button_DDR &= ~(Button); //port - wejście Button_PORT |= (Button); //włącz pull up [/syntax] [syntax=c] ISR(TIMER0_OVF_vect)//przerwanie wywoływane...
wiem ze static powoduje ze zmienna nie jest czyszcona po wyjściu z funkcji ale tutaj nie zauwazyłem zebym miał taka sytuacje.......;/
Zrób to sobie programowo np. weź timer0 i ustaw podstawę czasu tak aby co określony czas timer zgłaszał przerwanie czy to przepełnienia czy porównania w tym przerwaniu umieść np. taki kod [syntax=c] //gl_OCR1 to zmienna globalna pełni funkcje identyczną jak OCR1 uint16_t volatile gl_OCR1 ; ISR(wektor) { static uint16_t zm; if(zm<gl_OCR0) PORTA&=~(1<<PA0);...
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
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ć...
Magiczne słowo static daje dokładnie to samo co zmienna globalna. Przekazywanie wyniku przez zmienne globalne owszem jest w niektórych przypadkach dobre lub jedyne możliwe (z przerwania do kodu), ale pomiędzy funkcjami - nigdy. Przyjmijmy, że mamy n funkcji, każda może zwrócić tablicę o rozmiarze m. Jeśli każda funkcja przydzieli sobie tą tablicę mającą...
Oczywiście uint8_t - zjadłem '8'. Jeśli zmienna jest używana tylko wewnątrz procedury, to powinna być zadeklarowana wewnątrz procedury. Jeśli taka zmienna ma "przeżywać" czas, kiedy procedura nie jest aktywna (czyli zachowywać wartość pomiędzy wywołaniami), to musi być zadeklarowana z atrybutem static. Ten sam atrybut oznacza coś zupełnie innego w odniesieniu...
Należę do osób, które za wszelką cenę starają się same pogłówkować i znaleźć rozwiązanie Jedyna prawdziwa informacja, jaką przekazałeś tym zdaniem, to taka, że masz wysokie mniemanie o sobie. Gotowiec dla leniuchów: [syntax=c]static EEMEM uint8_t emode; //rezerwujemy bajt w eeprom ... uint8_t mode=0; //zmienna przechowująca kopię danej z eeprom //odczyt...
A sznowny kolega "czuje różnicę" pomiędzy: local , global, static , const ,volatile itd. :?: void Timer0(void) interrupt 1 { unsigned int licznik; licznik++; if (licznik == 300) // gdy zmienna licznik jest równy 4000 /*......................................... Piotrek
W programie jest pewien błąd - zmienne prywatne dla modułu powinny być deklarowane z atrybutem static. Zgaduję, że gdyby zmienna o chorej nazwie "div" miała atrybut static, problemu by me było. Z drugiej strony nazywanie zmiennej w ten sposób jest proszeniem się o problemy - z dużym prawdopodobieństwem nazwa ta może być nazwą tzw. helpera kompilatora,...
1. w kwestii formalnej zmienna "static" nie jest globalna. Tu są dwa obszary, gdzie język / sposób mówienia o języku ma niuanse. Jedno to "dynamika" czy czas istnienia zmiennej (tu static ma wspólne zachowanie z globalnym), z drugiej "zasięg leksykalny", czy da się przywołać identyfikator z innej jednostki kompilacji (tu 'static' jest przeciwieństwem...
Witam, program na pewno sie wywali z powodu odwolania do elementu spoza tablicy, wynikajacego z co najmniej 2 bledow inicjalizacji: #1 int ile; //... i zaraz potem: pedzel[13]=CreateSolidBrush(... #2 static int ... przyciskanie; //... i kawalek dalej: proby_x_tablica[przyciskanie]=..... Zarowno...
chodzi mi o sposób na zatwierdzenie wprowadzonej liczby, coś w stylu przycisku enter, oraz o samo wprowadzanie cyfr jako liczba 2 lub 3 cyfrowa. Do takich celów robię sobie bufor kołowy na kilka znaków, w tym wypadku wystarczy na 4. Każdy znak z klawiatury zapisuję do bufora. Pojawienie się określonego znaku (np #) konwertuje liczbę do zmiennej. [syntax=c]...
W przerwaniu deklarujesz zmienna liczba, ktora przy inicjacji jest rowna 0. Jest jako static więc jest wyzerowana tylko podczas pierwszego uruchomienia, potem już się "nie zeruje". dodaj na końcu while(1);...nie sprawdzałem częstotliwości przerwań więc zakładam że są w porządku. int main(void){ DDRA=0xFF; // PORT A JAKO WYJSCIE TCCR0 |=...
le jeżeli utworzę tablicę globalną jak poniżej: static const uint8_t tablica Nie. Co zrobi kompilator tego nie wiesz, bo modyfikatory static i const nie służą określaniu położenia zmiennych, czy tablic w pamięci. const ci jedynie daje tyle, że próba modyfikacji takiej tablicy powinna zakończyć się błędem podczas kompilacji. Oczywiście w praktyce, na...
Problem leży w sposobie działania biblioteki TWI_Master i miejsca, skąd jej pośrednio używasz. TIMER0_OVF_vect, jak i każde inne przerwanie, uruchamia się z czasowo wyłączonymi przerwaniami, dlatego ani sonar_request, ani sonar_gets_distance nie zadziała z tego miejsca. Polecenia zostają zakolejkowane, i może tylko TWI::START zostaje wykonany. Możesz:...
Wykorzystaj licznik 8-mio bitowy i w przerwaniu zwiększaj o 1 zmienną i jednocześnie sprawdzaj czy ta zmienna osiągnęła jakąś wyliczoną wartość - powiedzmy 1000. Jeśli nie to wychodzisz z przerwania a jeśli tak to wykonujesz kod który ma być wykonany w przerwaniu. W ten sposób zwiększysz programowo rozdzielczość licznika. [syntax=c]ISR(TIMER0_OVF_vect)...
Napewno [syntax=c]static volatile uint8_t cnt;[/syntax] Jeśli ta zmienna ma być modyfikowana w przerwaniu.
Cały czas kopię i poszerzam swoje OOP :) Jasne, odnośnie kilku instancji tej samej klasy nie mam wątpliwości. Odnośnie: No ale inna klasa może mieć do nich dostęp poprzez odpowiednie mechanizmy. Doczytałem, że mając zmienną zadeklarowaną jako "public static" mogę ją zmieniać w dowolnym miejscu programu i dodatkowo jest ona powiązana z klasą, a nie jej...
To zależy, co rozumiesz przez "lokalna". Pod względem zasięgu - lokalna, pod względem czasu życia - należy do sekcji statycznej, w której są wszystkie zmienne globalne, a nie do auto, w której są argumenty i i zmienne lokalne funkcji bez atrybutu static. Jeśli nie włączymy wściekłej optymalizacji typu LTO, to zmienna statyczna musi wylądować w pamięci...
Wyjaśnił już to albertb . Zmienne static w funkcji to są takie zmienne globalne, które mają ograniczony zasięg to funkcji, w której występują. Oznacza to, że zmienna tmp przyjmuje wartość 22 podczas uruchamiania procesora, jeszcze przed funkcją main() . Funkcja zamiana1() modyfikuje zmienną tmp w taki sposób, że jej wartość po pierwszym wywołaniu jest...
Pozwolę sobie czepnąć się tego kodu, przynajmniej estetycznie: przekroczenie zakresu zmiennych w c to zdaje się zachowanie niezefiniowane? W związku z tym może się dla cnt bezboleśnie przekręcić licznik (tak jak chcemy tutaj) a może zacząć nadpisywać sąsiedni bajt - zależnie od kompilatora. Czy się mylę? No mylisz się. Jaki sąsiedni bajt? w zależności...
'Nie, static uint8_t licznikAnowy = 1 znaczy, że ta zmienna jest inicjowana tylko raz, przy starcie aplikacji, a jej wartość jest zachowywana pomiędzy kolejnymi wywołaniami, niezależnie czy jest to zmienna globalna, czy lokalna. ', po co to napisałeś... wiem po co użyłem static, a ten komentarz tam oznacza praktycznie tyle ze licznik wraca do pierwszego...
static int^ rozmiarTablicy=0; zamień na static int rozmiarTablicy=0;
Ja tu widzę następujące rozwiązania: 1) Użyć licznik T1 (licznik 16 bitowy). Przy taktowaniu 8MHz i ustawieniu preskalera 1:1024 można otrzymać czas równy: 1/8000000 * (32768 * 1024) = 4,19 sek 2) W funkcji obsługującej przerwanie użyć dodatkowej zmiennej: SIGNAL(SIG_OVERFLOW0) { static uint8_t licznik; //zmienna zliczajaca przejscia pętli, koniecznie...
//**************************************... // Plik: keyb.h // // Zaawansowana obsługa przycisków i klawiatur // Wersja: 1.0 // Licencja: GPL v2 // Autor: Deucalion // Email: deucalion#wp.pl // Szczegóły: http://mikrokontrolery.blogspot.com/2011... // //**************************************...
po co to 'static'? 4\/3!! static przy zmiennej globalnej powoduje, że zmienna jest widoczna tylko w tym pliku w którym została zdefiniowana. Jest to tzw ukrywanie zmiennych globalnych
Napisalem sobie funkcje, ktorej zadaniem jest wystawienie na PIN_OUT ustalonego sygnalu wejscioweo (w przykladzie ponizej jest to pin 3 portu A ustalony przez 100ms). while(1){ ... PIN_OUT = debounce(&PORTA,3, 100); ... } Funkcja jest wywolywana w glownej petli programu co 1ms, zwraca stabilny stan (0 lub 1) jezeli wewnetrzny...
Poza tym to: TCNT0 = 130; Powinna być pierwszą instrukcją w przerwaniu, a tak w ogóle polecam poczytanie o trybie CTC - nie będzie trzeba martwić się o ciągłe ładowanie wartości timera. EDIT: A problemem właściwym jest nadmiarowy średnik, o tu: if(licznik == 375); jak go wywalisz to będzie w miarę OK. A zmienna nie musi być w tej sytuacji volatile,...
Jak dla mnie to takie rzeczy są w przerwaniu niedopuszczalne. Ustaw sobie jakąś flagę i obsłuż w pętli głównej. [syntax=c] ISR(INT0_vect) { static uint8_t licznik; uint8_t zmienna; lcd_locate(0,0); lcd_str("licznik "); lcd_int(licznik++); lcd_locate(1,0); TWI_read_buf(RTC_ADRESS,0,1,&zmienna); lcd_int(zmienna); } [/syntax]
Jak klasę NumberExample i IntegerExample zmienię na static to nie ma błędu kompilacji. Ale zmienna j która używa tej klasy jest zle wyswietlana pisze zad2integerexample(at)adrespamieci. Jak nie zmienię kodu to sie nie skompiluje. Chodzi o to żeby utworzyć typy kopertowe takie jak w jdk i użyć jakiejs funkcji z tamtad
heh wydawało mi sie że skorzystanie z gotowca będzie łatwiejsze niż pisanie tych funkcji od podstaw :) listing pliku keyb.c [syntax=c] //**************************************... // Plik: keyb.c // // Zaawansowana obsługa przycisków i klawiatur // Wersja: 1.0 // Licencja: GPL v2 // Autor: Deucalion // Email: deucalion#wp.pl...
(at)arturt134 Robiłem to co mi sugerujesz - bezowocnie. Ale spostrzegłem ciekawą rzecz: wysyłając pakiet czynię to co parę sekund (ręcznie), przypadkowo dałem chwilkę czasu (5..10 min.) spokoju ATMEDZE (musiałem coś tam innego zrobić), po tym czasie znowu wysłalem pakiet i o dziwo ramka wyglądała jak po resecie uC! Ale następne znowu były oszukane....
To nie jest "Keil2 problem" tylko "programista problem" Wszysto działa z twoimi oczekiwaniami. fragment kodu: BCD[3] = Herc % 10; Herc = Herc / 10; BCD[2] = Herc % 10; Herc = Herc / 10; BCD[1] = Herc % 10; //Tego nie mogę dać do pętli Herc = Herc / 10; BCD[0] = Herc % 10; Herc = Herc / 10; notorycznie zeruje Herc - tak jak chciałeś. Wprowadz zmienna...
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...
No ale w przerwaniu to mi się wydaje (o ile dobrze rozumiem), że bez static twoja zmienna zostaje za każdym razem utworzona na stosie po wejściu w przerwanie i przy wyjściu jest niszczona , ale .... no tak ale tu wydaje się ona być nie potrzebna pomiędzy przerwaniami bo chyba ją za każdym razej napełniasz tą funkcją SemaphoreGiveFromISR() zatem w zasadzie...
Należy unikać zmiennych globalnych. Zastanów się nad rozwiązaniem: [syntax=c]typedef struct { int zmienna_globalna; long druga_globalna; } MojeGlobalne; MojeGlobalne *globalne() { static MojeGlobalne ret; return &ret; } void funkcja(int zmienna) { if(zmienna) led_on(); } void funkcja_z_globalne() { funkcja(globalne()->zmienna_globalna); }[/syntax]
Program może wyglądać tak: [syntax=java] import java.io.*; public class Kalkulator{ public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Podaj wartość"); String str_a = "", str_b = ""; try { System.out.print("a = "); str_a = br.readLine(); System.out.print("b = "); str_b...
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ę...
Niestety pokazałeś zły kod - jak wpłynie na poprawność działania pokazanego przez Ciebie kodu: [syntax=c]RxCount=0x00;[/syntax] umieszczone w pętli głównej? Prawidłowo powinno być na przykład tak: [syntax=c]#include <avr/io.h> ... volatile uint8_t flaga; // liczba odczytanych bajtow volatile uint8_t temp[2]; // odczytana temp ISR(USART_RXC_vect)...
no to problem rozwiazany [; caly czas nie zwracalem uwagi, ze ty dane pchasz przez DMA. no wiec problem polegal na tym, ze UART jest na tyle wolny (albo procek na tyle szybki [; zalezy jak na to patrzec), ze zanim on zaczal te dane tak naprawde odbierac i wysylac spod zadanego adresu, to juz funkcja sie skonczyla. skoro zmienna byla lokalna, to byla...
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...
Chodzi o deklarację zmiennej data W tym przypadku wystarczy, że bufor data zadeklarujesz jako static. Masz tu jeszcze kilka błędów. Funkcja receive zwraca char a Ty próbujesz zwrócić char *. Dodatkowo w main próbujesz przypisać to co zwraca receive do tablicy buffer (co sie nie powinno skompilować). Spróbuj tak: [syntax=c] static const unsigned char*...
WItam. Możlwości uśredniania czy po prostu cyfrowej filtracji sygnału może być kilka. Najprostrza to taka jak napisałeś - zbierasz kilka próbek pomiaru a następnie je uśredniasz. Może to wyglądać np tak: unsigned int pomiar; unsigned int usredniony_pomiar; unsigned char pomiar_licznik; static unsigned int temp; pomiar = ADC; // pobranie wartosci pomiaru...
Poprawiona funkcja klawisze(). Zmienna zadeklarowana lokalnie. static przed definicją. [syntax=c]static uint8_t zatrzask=0;[/syntax] Taka zmienna lokalna jest zapamiętywana pomiędzy kolejnymi wywołaniami funkcji.
No widzę ze kolega łapie mnie za słowa ;) Ma to być zmienna zainicalizowana czyli zmienna która jest przypisana do sekcji inicjalizowanej. Czyli przy starcie systemu zmienna zdeklarowana jako: static char zmienna_a = 5; oczywiście podobna sytuacja dla każdej zmiennej zainicjalizowanej np. int licznik = 0; itp....itd... jeszcze przed skokiem do funkcji...
Po co druga zmienna statyczna (b0)? [syntax=c] static int a0, b0; int a = odczyt_pina(); int b = odczyt_pinb(); if (a != a0) { a0 = a; if (b !=b0) { b0 = b; if (a == b) { //-- } else { //++ } } } //Drugi enkoder analogicznie, np.: a_1, a0_1, ... [/syntax] Zakładam, że a i b to kanały jednego z enkoderów. Zatem inkrementacja/ dekrementacja zmiennej określającej...
Tak, jeśli zmienna będzie w obsłudze przerwania to musi być static, aby zachować wartość pomiędzy wywołaniami. Powodem mrugania wyświetlacza jest przede wszystkim nadpisywanie miejsca spacjami, a dopiero potem wyświetlanie pożądanej wartości. Oczywiście takie częste modyfikowanie tekstu niczemu nie służy, tym bardziej, że w większości przypadków na...
Wszystko super Piotrze ale C to nie mój konik. Rozumiem z tego chyba: http://obrazki.elektroda.pl/4344270200_1... http://obrazki.elektroda.pl/3695670800_1...
Błąd oznacza, że zmienna 'lastBSIemul' nie została zadeklarowana... ciężko coś więcej powiedzieć nie mając całości kodu. Ten projekt kompiluje mi się bez błędów: https://github.com/ludwig-v/arduino-psa-... W nowszej wersji brakuje deklaracji tej zmiennej: https://github.com/ludwig-v/arduino-psa-... Wystarczy dopisać w sekcji Variables linijkę:...
Z mojej praktyki z FreeRTOSem wiem, że FreeRTOS głupieje jak zmienna lHigherPriorityTaskWoken nie ma modyfikatora static . U mnie objawiało to się wyjątkiem HF Według mmnie masz problem w innym miejscu i bo static tam nie jest potrzebny.
Witam. Moje pytanie jest następujące. Napisałem prosty program który ma za zadanie zmieniać stan wyjścia za każdym razem na przeciwny. Wszystko było by w porządku gdyby nie czas , a mianowicie. Moje obliczenia : 36Mhz(Timer2) / 36000(Prescaler) = 1ms. * 10000(ARR) = 10s i w takim czasie powinien zmienić się stan Leda. W praktyce jednak dzieje się to...
Tablica uint8_t może nie być wyrównana (jej pierwszy adres może być równy np 1 albo 3, a ARM7 nie obsługuje niewyrównanego dostępu. Jeśli odczytasz uint16_t z niewyrównanego (niepodzielnego przez 2) adresu rezultat jest nieprzewidywalny, włącznie z zawieszeniem układu. Sam dodatkowo wprowadzasz zamieszanie, bo adres rzutujesz na wskaźnik ze znakiem,...
A na przyszłość przecież możesz sobie komentować klamerki. Ja dla ułatwienia (mimo wcięć) ważniejsze klamerki oznaczam np. } //End while(1) , } //End If "zmienna użyta w warunku". To naprawdę pomaga.
Zmienna sek powinna być volatile: http://mikrokontrolery.blogspot.com/2011... ssek natomiast zrób statyczną w funkcji przerwania: unsigned tam gdzie liczby nie będą ze znakiem. Wprawdzie ani godziny, ani minuty, czy też sekundy nie przekroczą maksymalnych ich wartości, ale porządek warto mieć. Poza tym, taktujesz swój mikrokontroler...
keyb.h [syntax=c] //**************************************... // Plik: keyb.h // // Zaawansowana obsługa przycisków i klawiatur // Wersja: 1.0 // Licencja: GPL v2 // Autor: Deucalion // Email: deucalion#wp.pl // Szczegóły: http://mikrokontrolery.blogspot.com/2011... // //**************************************...
#include "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { // WINCC:TAGNAME_SECTION_START // syntax: #define TagNameInAction "DMTagName" // next TagID : 2 #define ZMIENNA1 "krancowka.stan" // WINCC:TAGNAME_SECTION_END // WINCC:PICNAME_SECTION_START // syntax: #define PicNameInAction "PictureName" // next PicID...
Co oznacz "static" przy dekalracji zmiennych np. static unsigned char zmienna=0; Jest cos takeigo np: #include <sfr51.h> void main () { //ustawienie parametrow przerwania od Timera 0 TMOD=0x01; TR0=1; ET0=1; IP=0x02; //najwyzszy priorytet dla przerwania od Timer'a 0 EA=1;//globalne odblokowanie systemu przerwan P0=0x00; P1=0x00; P2=0x00;...
Witam Czy istnieje w modułach bluetooth coś w stylu flagi nawiązania połączenia tzn. master zapala flagę gdy sparuje się ze slavem, a gasi ją gdy połączenie zostanie przerwane? Program miałby działać tak: Po nawiązaniu połączenia między mikrokontrolerami (ATmega32A i ATmega8L) za pomocą nadajników bluetooth przesyłany jest ze slave'a do mastera klucz...
Cytat z book'a: Język C dopuszcza tego rodzaju inicjalizatory, pod warunkiem że inicjalizowana struktura posiada przydział automatyczny (zmienna lokalna względem funkcji i nie została zadeklarowana słowem static). Może być nawet wywołaniem funkcji zwracającą odpowiednią strukturę. Tak jakby komuś się kiedyś miało przydać.
W jakim celu zmienna FLAGA jest statyczna? To jest zmienna globalna. Czy to jest nieprawidłowe użycie zmiennej statycznej? Zdecyduj albo statyczna ("static" ogranicza zakres do danego pliku) albo globalna. Ewnetualnie zdefiniuj co rozumiesz przez "globalna".
1. void ReadEncoder(); #define GLUE(a, b) a##b #define LEDPORT1(s)GLUE(PORT,s) #define LEDPORT LEDPORT1(LED) #define LEDDDR1(s)GLUE(DDR,s) #define LEDDDRLEDDDR1(LED) a) Co to jest? Coś jak podprogram? Ale dlaczego zakończony średnikiem? Pierwsza linia to deklaracja funkcji, dalsze linie...
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...
zmienna lokalny static zmienna lokalna static static eemem
palet maszyna blaupunkt szumi przewod ethernet
multifunkcja kierownica multifunkcja kierownica
Lokalizacja czujnika temperatury w odkurzaczu QUIGG Miganie w laptopie Dell Latitude - przyczyny i rozwiązania