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...
Zmiana optymalizacji na O2 usuwa problem w każdym z przypadków. Tak samo zrobienie static tego longa problem rozwiązuje, również przy optymalizacji O1. na O1/2, natomiast słychać pyrkanie i inne niepokojące objawy w dźwięku. Z opisu wynika, że masz coś nie tak w programie, niestety bez wnikliwego przejrzenia całości nie ma szans, aby ci pomóc. W pewnych...
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)...
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...
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...
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...
Spróbuj poniższego kodu. Co prawda napisałem go "na kolanie", sprawdziłem tylko czy się kompiluje, ale zapewne zawiera kupę błędów. Idea jest taka, że wywołujesz wielokrotnie funkcję IrReceive(), aby odczytać pojedynczy bit z IR. Funkcja zwróci true, gdy odczyta pełne 11 bitów (również bit startowy w pozycji LSB; musisz sam sprawdzić, czy bit startowy...
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...
Zmienne typu static inicjalizowane są tylko raz, ponowne wywołanie funkcji nie inicjalizuje takiej zmiennej. Podstawy C się kłaniają.
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;...
Witam, #include <stdint.h> #include <avr/eeprom.h> static EEMEM uint8_t zmienna_w_eepromie = 'a'; /* po zaprogramowaniu eepromu zmienna ma wartość 'a' */ int main(void) { eeprom_write_byte(&zmienna_w_eep... 'b'); } Pozdrawiam, Dr.Vee
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....
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...
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....
(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...
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...
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]...
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);...
W podręcznikach podają że zmienne global i static są zerowane- w standardzie C. To program startowy działa inaczej? Niezgodnie ze standardem C? Tak się zastanawiam skąd ty wyciągasz takie wnioski??? Jeśli bez żadnych dodatkowych zaawansowanych opcji skompilujesz program to zawsze będziesz miał wyzerowane zmienne globalne i statyczne. Więc gdzie ty...
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...
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
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...
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ą...
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();...
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
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*...
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 |=...
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...
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...
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...
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)...
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...
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...
CommandButton z napisem GRAJ!, Poszedłbym raczej w kierunku formatki użytkownika (UserForm), niż bawiłbym się w z przyciskami w arkuszu. Łatwiej zapanować nad aspektem wizualnym "zabawki", no i miejsca więcej w arkuszu na inne rzeczy. czy „CommandButton_SPRWDZ1” może weryfikować wszystkie 39 odpowiedzi Prosto odpowiadając - można - np....
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...
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...
Przyjąłem że masz przycisk chwilowy a przekaźniki sterowane stanem wysokim. Tutaj poprawki : [syntax=c]#include <OneWire.h> #include <DallasTemperature.h> #define PIN_SENSOR 7 // pin do ktorego podloczono DS18B20 #define PIN_PK1 4 // pin sterujacy przekaznikiem 1 #define PIN_PK2 5 // pin sterujacy przekaznikiem 2 #define PIN_PK3 6 // pin...
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...
Sposób 1) Klasa Sigleton: Tworzysz klasę unikalną, tzn. moze istnieć tylko jedna instancja tej klasy: Class JSingleton { private JSingleton jSingleton; private JFrameA frameA; private JFrameB frameB; public static synchonized JSingleton getInstance() { if (jSingleton == null) jSingleton = new JSingleton(); return jSingleton; } public void setFrameA(JFrameA...
Wskazany w linku debugger to zapewne JLink ale za cenę niespełna 10 $ to napewno nielegalny klon :) Jeżeli chcesz poznać LPC'ki i mieć debugger to wejściami . Kiedyś zapomniałem o tym fakcie i dziwiłem się dlaczego program nie działa tak jakbym się tego spodziewał.
Witam. Nie bardzo rozumiem o co ci chodzi. To jest mikrokontroler 8 bitowy i pamiec jest zorganizowana w komorki 8 bitwe. Wiec jesli chcesz zapisac np zmienna typu int robisz to tak: zapis gornych 8 bitow -> zwiekszasz adres -> zapis dolnych 8 bitow/mozesz i odwrotnie ,zalezy to od twojego zapisu notacji/ i analogicznie robisz odczyt. Ponizej...
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...
W funkcji f Nie mam pojęcia po co ta zmienna statyczna. Wystarczy inkrementować zmienną globalną. Chyba, że jako zabezpieczenie żeby nie zmieniać zmiennej globalnej, ale i to średnio skuteczne. Można też przekazać dodatkowy parametr, wskaźnik do zmiennej, która będzie przechowywać ilość wykonań funkcji. przy zakresie a=6 b=10 wychodzi 257 wywołań funkcji,...
Za komentarze z i2c trzeba wstawic odpowiedni kod. Pisałem w gedit, bez kompilacji, ale powinno być dobrze. Gdybym czegoś nie przewidział lub o czymś zapomniał, proszę pytać dalej lub zgłaszać błędy. Może któryś z kolegów z forum zauważy jakieś moje niedopatrzenie. //ster_silnika()- funkcja mająca powodować stopniowy wzrost i malenie prędkości...
Jak zmienić tą linie żeby każdy inny wpisany znak był rozpoznawalny jako błąd?? Myślałem że to ona odpowiada za to. Co do drugiego stwierdzenia właśnie jak to zrobić aby program był za każdym razem tak jakby w stanie czuwania czyli powracał na początek pętli?? Tu nie wystarczy zmienic tylko jedną linię – wymagany jest nowy kod pisany ze zrozumieniem...
A pytanie jest takie- czy da się to zrobić bez while()? Tylko na przerwaniach. FIFO na instrukcje, kolejkowanie kolejnych tranzykcji. Opracowujesz Sobie zgrabną strukturę: teraz operował. I masz pełną dowolność, prosta maszyna stanów FSM i sprawdzasz za pomocą if co można zrobić i zmieniasz stany. Nie ogranicza Ciebie timeout, bo takiego z reguły nie...
zmienna lokalny static zmienna lokalna static static routing
ariva procesor panasonic muting klucz pralka electrolux
suszarka electrolux suszarka electrolux
Volvo S60 2.5T 2005 – zasilanie zapalniczek i radia, bezpieczniki F10/F11, CEM, schematy Menu serwisowe 4Swiss Sienna 7 – kombinacje wejścia, diagnostyka, kody błędów