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 :) ).
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...
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....
Zatem jeśli zmienna lokalna (ulotna) jest pamiętana w rejestrze procesora, po odłożeniu na Stos jej początkowej wartości, to będzie ona dostępna szybciej niż zmienna globalna. 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? A...
problem wydaje się, że zniknął. Czy doprowadziłem tutaj do jakiegoś UB? O ile rozumiem ta zmienna to zmienna lokalna zadeklarowana w funkcji. Takie zmienne w C mają "automatic storage duration" i nie są zerowane jak nie ma jawnej inicjalizacji. Dodanie 'static' powoduje, że mają one "static storage duration" (tak samo jak np. zmienne globalne) i są...
Tak już uroda C. I bardzo dobrze ;). Różnica polega tylko na dostępności zmiennej. Statyczna lokalna zmienna dostępna jest tylko w ciele funkcji, zmienna globalna dostępna jest dla wszystkich funkcji zapisanych w tekście programu po deklaracji tej zmiennej? O, już ktoś odpowiedział.
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ć.
Gdzie trafi zmienna lokalna w main zainicjowana i nie niezainicjowana ? Zależy co rozumiesz przez "lokalna". Generalnie do celu tej dyskusji proponuję się ograniczyć do podziału na "statyczne" (m.in. globalne) i "automatyczne" (czyli zmienne "w" funkcjach, oczywiście bez "static"). Te pierwsze lądują w .data lub .bss (zależnie od tego czy są zainicjalizowane...
'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...
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.
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...
Cały czas mówimy o zmiennej lokalnej procedury, czyli obiekcie o nieustalonym z góry adresie, zaalokowanym w jakiejś formie pamięci lokalnej (na stosie, gdziekolwiek ten stos by nie leżał - w pamięci czy rejestrach). Taka zmienna nie ma statycznego powiązania z żadnymi konkretnymi adresami pamięci, więc nie może mieć żadnych deterministycznych "efektów...
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...
http://www.st.com/content/ccc/resource/t... lub znajdz funkcję static void low_level_init(struct netif *netif) i tam jest zdefiniowana tablica z adresem. Nazywa się róznie w zależności od wersji (bo to lokalna zmienna)
Pytanie jest o deklaracje main.c Kod: unsigned int *msg; oraz w spi.h Kod: static unsigned int *msg; Czy ja dobrze rozumiem, że są to dwie zmienne, z czego pierwsza widziana jest tylko w pliku main.c a druga tylko i wyłącznie w pliku spi.c? Mylisz się. Pierwsza zmienna msg jest zadeklarowana wewnątrz funkcji main() i tylko tam jest widoczna. W przypadku...
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...
Funkcja esp_ipc_call() nie jest funkcją blokującą. Jest inna wersja tej funkcji o nawie esp_ipc_call_blocking(), która jest funkcją blokującą. Przepraszam za wcześniejsze nieporozumienie i dziękuję za sprostowanie. Skorzystamy zatem z funkcji `esp_ipc_call_blocking()`, aby wywołać funkcję na określonym rdzeniu i poczekać na jej wykonanie. Oto poprawiona...
uint32_t na Cortex użyty jako argument lub zmienna lokalna auto działa szybciej niż krótsze typy. Dla HD44780 nie ma znaczenia, czy najpierw ustawisz buity danych, czy najpierw E=1. Ważne, żeby dane były stabilne 250 ns przed E=0; Ya to RS i RW muszą być stabilne przed E=1 i nie mogą się zmeniać przy wysokim E, a to miałeś zrobione źle. Już raz ten...
Sporo roboty było z odpowiednim "zaekranowaniem" enkoderów ale efekt na prawdę fajny: https://youtu.be/wx_8WDe-jAI Przed startem robot całkowicie wyłączony z zasilania. Po załączeniu zasilania, wysłałem komendę dojazdu do pozycji zerowych i jak widać wszystkie (na razie tylko 4) osie dojechały perfekcyjnie do pozycji domowej, także świetnie! :) Jeszcze...
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...
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....
Witam Próbuje wykonać sterowanie dla projektu: https://www.elektroda.pl/rtvforum/topic3... Ogólnie tak: Mam ESP32, które jest jednostka główną Jest Arduino mega które przesyła dane co 2ms przez Serial2 Jest tez Aplikacja na PC, która komunikuje się z ESP32 poprzez Serial Problemem jest to, że jak na aplikacji wcisne dany przycisk, to aplikacja...
Jeżeli chodzi o ffconfig.h to próbowałem różnych ustawień a z desperacji ;) nawet zupełnie kosmicznych ich kombinacji. Jeżeli chodzi o ustawienia kompilatora to -O0 -> prawie najnowszy bleeding edge toolchain. Przed każdym buildem robię clean'a. Dodam, że dzieje się to na dwóch różnych kartach. Próbowałem też z różnymi typami zmiennych a uchwyt systemu...
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!!
Zastanawiam się nad stworzeniem osobnego przewodnika na ten temat, ale mogę już zacząć tutaj. Istnieją więc dwa rodzaje autotestów. 1. Autotesty tylko dla systemu Windows - są uruchamiane w symulatorze systemu Windows, znajdują się tutaj: https://github.com/openshwprojects/OpenB... Są uruchamiane na Githubie przy każdej...
Raczej nie wydłuży obsługi przerwania,a w przypadku uC wydajniejszych od ATmega wręcz ją skróci, bo modyfikacje zmiennej bez atrybutu volatile zajmują zwykle mniej czasu, niż modyfikacje stanu portu. Być może w AVR jest tak samo - to zależy i od sprzętu i do kompilatora. Po prostu te operacje, które wykonujesz na porcie, należy wykonywać na zmiennej...
Nie wiem jak przerwania od timerów działają w Arduino, bo w ten sposób najlepiej testować stan przycisków, np 50 razy na sek. Co wystarcza do debouncingu i upraszcza kod. Sprawdzanie w pętli może powodować błędy czasowe, jeśli masz tam jakąś zajmującą czas obsługę. Może coś takiego zadziała, tak schematycznie. Np. tworzysz zmienna CZAS_1 STAN_1 zerowane...
https://obrazki.elektroda.pl/8085974000_... OpenBeken posiada automatyczny system testowania, który sprawdza firmware pod kątem potencjalnych błędów i problemów przy każdej nowej zmianie na repozytorium Github (tzw. commit). Każdy test symuluje praktyczny scenariusz użycia, symuluje określone dane wejściowe i sprawdza, czy dane wyjściowe...
Niestety wątek wydaje się nie startować. Jakieś pomysły jak to zrobić, najlepiej elegancko i poprawnie? Wątek jako zmienna lokalna jest od razu kasowany po wyjściu z konstruktora. Jeśli chciałbyś to zrobić w ten sposób, to musiałbyś użyć wątków dynamicznych i zrobić im "detach" przed wyjściem z funkcji. Niemniej jednak nie ma to specjalnego sensu,...
zmienna static zmienna lokalna zmienna lokalny static
unifi przekierowanie sterowanie silnikiem pradu stałego bojler grzałka termostatem
Ustawienie rozrządu w Kia K300: krok po kroku Codzienna regulacja piły spalinowej - przyczyny i rozwiązania