Był gdzieś niedawno dość długi temat o tym. IMO lepiej zawsze zmienne zerować dla czytelności, a w przypadku AVR-GCC po włączeniu optymalizacji te zbędne zerowania zostaną przez kompilator wycięte. Poza tym, dziwnie trochę ludzie wykorzystują słowo kluczowe volatile. W Twoim przypadku IMO nie powinno się stosować go wewnątrz struktury. Ostatnio widziałem,...
http://obrazki.elektroda.pl/4404773800_1... Witam. Chciałbym zaprezentować Państwu moją konstrukcję DIY. Jest do panel kontrolny do komputera PC, który aktualnie spełnia funkcję 6-kanałowego nastawnika obrotów wentylatorów typu 12V 3pin. 1. Wstęp Jako, że jakiś czas temu zacząłem się interesować moddingiem i tuningiem PC, napotkałem...
W życiu bym nie wpadł na to że kompilator zoptymalizuje program, tak że nie będzie działać. Raczej szukałem problemu w moim kodzie i logice działania. W planie procesor ma obsługiwać wyświetlacz, przerwania zewnętrzne (pomiar prędkości maszyny) oraz sterowanie PWM i przekaźnikami. Wracając do tematu powinienem zadeklarować całą strukturę jako volatile...
http://obrazki.elektroda.pl/5313552500_1... Sterownik włącza/wyłącza do 8 urządzeń grzewczych i chłodniczych. Stan wyjść zależy od: temperatury mierzonej w dowolnej liczbie punktów, wewnętrznego zegara czasu rzeczywistego, programu grzania i chłodzenia przechowywanego w pamięci EEPROM. Architektura sterownika Sterownik jest oparty na...
Jak to jest z atrybutem volatile dla struktur? Gdy struktura ma volatile to wszystko co się znajduje w strukturze jest volatile? Czy dodatkowo każdy element struktury trzeba oznaczać jako volatile? struct nazwa_struktury { uint8_tval1; uint8_tval2; } volatile x; To mogę już używać w x.val1 i x.val2, w przerwaniach i w pętli głównej programu?...
Rozumiem. Chodzi o identyfikację najbardziej nieorzystnego przypadku a nie testowanie w trakcie. A czy tegon ie nie da zrobic rysując sobie (powinno byc to pewnie wczesniej) architekture programu w sensie wywowałń funkcji. Na to jak sie nałozy głebokość wywołań funcji w przerwaniach to powinno dac nie więcej niz 8 poziomów w sumie. Nie zrozumiałem z...
Ok, rozumiem. Mam jeszcze jedno pytanie, czy używając tej struktury danych bez atrybutu volantile w programie głównym i przerwaniach będą problemy z odczytaniem aktualnych parametrów (a nie buforowanych kopi...) Wg mnie nie, struktura danych FIL opisuje jedynie plik, natomiast ważne jest aby dane ktore wysyłam do pliku miały atrybut volatile i były...
Ale co mam poprawiać pytam się czy jest ok czy może pomyłka zaistniała. Wkład pracy w rozwiązanie problemu to wiele prób bo to nie jest w całości przepisany kod dodałem trochę przypraw np. struktura w ram i fun. przepisująca. Nie myśl sobie że kod nie działa to odrazu wbijam na forum prubuję coś pozmieniać zastanowić się.
No nie za bardzo. To co zaproponowałeś to nawet się nie kompiluje. Nie czepiałbym się jakby to była literówka. Jednak z kontekstu wypowiedzi wynika, że kolega naprawdę uważa to za poprawną konstrukcję. Jak na eksperta od kompilatorów to wygląda to bardzo słabo.
1. Niepotrzebnie wysyłasz &H55 (Match Rom) - 1wverify robi to automatycznie 2. Po co dwa razy zczytujesz dane z każdego termometru? Połącz raz odczytane dane z zmienną 16 bit. 3. Nie wiem do czego wykorzystujesz potem zmienne, ale czy na pewno potrzebujesz przechowywać dane aż w 3 miejscach (tablica, zmienne LsbN i MsbN oraz Ds_iN)? 4. Nie wiem jaka...
Ja robię wyświetlanie w oparciu o transakcje - jest to może nadmiernie skomplikowane jeśli mówimy o alfanumerycznym LCD, ale ma zalety- m.in. łatwa synchronizacja, wysyłanie do LCD tylko tego co jest potrzebne, dostęp do LCD z różnych wątków. Możesz przybliżyć tę ideę transakcji? Jeśli kontroler jest naprawdę szybki to problem znika, jeśli są jakieś...
A nie prościej wykorzystać przerwania EEPROM? Inicjować je flagą potrzeby zapisu struktury? A w przerwaniu "lecieć" po kolejnych elementach struktury? robiw Można tak, albo dodać kopiowanie struktury do bufora tymczasowego z którego odbędzie się zapis. Ma to sens jeśli w czasie zapisu pola struktóry moga się zmienić - dojdzie wtedy do uszkodzenia danych....
Zacznij od określenia protokołu transmisji - w jaki sposób będziesz przesyłał te dane (znakowo/binarnie), jaka jest ich długość, po czym program może je rozpoznać, czy i jak sprawdzać poprawność transmisji. Zastanów się nad strukturą oprogramowania - same przerwania, RTOS, czy (w ostateczności) jakaś pętla zdarzeń? Potem dopiero planuj programową obsługę...
Rezerwujesz pamięć na stercie na strukturę LCD_trans - ponieważ zawiera ona pole o wielkości dynamicznie zmienianej, więc musisz zarezerwować miejsce na samą strukturę oraz długość przechowywanego w niej tekstu.
Cześć, posiadam dość dużą wiedzę z zakresu programowania Arduino. Chciałbym rozpocząć przygodę z programowaniem modułu ESP8266. Moim głównym celem jest wykorzystanie kodów źródłowych oprogramowania supla aby stworzyć własne urządzenie które będą mógł w miarę elastycznie modyfikować. Moim problemem jest to, że nie znalazłem żadnych solidnych dokumentacji...
Choć dopiero zaczynam przygodę z STM32 to po mojemu nadpisujesz strukturę i dlatego zawsze działa Ci ostatnie zdefiniowane przerwanie.
Potrzebuje odpowiedzi na pytania : 1)Działanie przerwania pseudoniemaskowalnego i co to jest 2)Ramka stosu podczas przerwania 3)Układy peryferyjne kontrolera 68HC11 4)Struktura wew 68HC12
Nie wiem na ile jesteś w stanie ingerować w kod, ale... Cała obsługa transmisji po SPI powinna zostać przeniesiona do funkcji obsługi przerwania od SPI. Funkcje z pętli głównej powinny tylko przekazywać wskaźniki na struktury z danymi i callbackiem do "drivera" SPI. Driver SPI powinien atomowo zbierać te wskaźniki do swojego bufora i inicjować transmisję,...
Raczej doczytał, bo wstawił przed deklaracjami zmiennych, a jeśli rozwiązaniem jest wstawienie volatile też wewnątrz struktury, to raczej nie jest to oczywiste bez doświadczenia z C.
Nie ma takiej zależności. Jeśli nie korzystasz z dynamicznej alokacji pamięci to możesz to bardzo zgrubnie oszacować po ilości zmiennych automatycznych (lokalnych), a szczególnie tablic. To co czyni takie oszacowanie szczególnie trudnym to określenie stopnia zagnieżdżenia funkcji - bo to zajmuje sporo pamięci na stosie. A zależy to od ilości przerwań,...
Tego rodzaju kod najprościej Ci będzie opisać za pomocą automatu, może kod nie będzie aż tak szybki, ale na pewno będzie się go dało zrozumieć :) setjmp/longjmp też może być, ale to działa raz (tj. dla jednego przerwania), struktura sigjmp_buf zajmuje 23/24 bajty na AVR a zapamietanie/wykonanie skoku też zajmuje kilkanaście instrukcji. Szkielet implementacji...
Strukturę zostawić globalną, a w obsłudze przerwania zrobić jej kopię lokalną (całej struktury lub używanych elementów). Przed wyjściem z przerwania dokonać aktualizacji globalnej zmiennej jeśli konieczne, lub obligatoryjnie.
Nie macie pojęcia na czym polega problem w cięciu hartowanego szkła. Nie chodzi o to że jest twarde. Tylko o to że pęka na wskutek przerwania jego oryginalnej struktury. Jak by tego nie ciąć, to przerwie się strukturę. Nawet powolne trawienie chemiczne w końcu powoduje pęknięcie.
Proszę o pomoc szukam informacji : zaproponuj rozbudowę systemu pBlaze pozwalającą na obslugę wielu źródeł przerwania przy zalozeniu iz nie modyfikujemy struktury proc.
zakręceniu kołem idzie tam ok 3 v. Więc chyba dynamo i płytka z jakimś układem jest raczej niesprawne, napięcie jest według mnie za niskie. Uszkodzenie takich diod polega przeważnie na zniszczeniu struktury i przerwaniu obwodu.
Można też zrobić sobie ładną strukturę do przechowywania danych o przycisku, a potem z tych struktur utworzyć tablicę i dodatkowo tablice wskaźników na funkcje dla każdej akcji każdego przycisku i mamy wszystko rozwiązane w eleganckiej i szybkiej pętli w przerwaniu.
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...
Nie wiem, o jaki przykład chodzi, ale w tym jest pokazane, że można korzystać ze wszystkich pól struktury timeval: [url=https://github.com/espressif/esp-id...
1. Dlatego, że w przerwaniu od przycisku musisz zablokować to przerwanie i uruchomić timer, a w przerwaniu timera odblokować z powrotem przerwanie - to zajmuje jakieś z 8 linii kodu i wymaga dwóch przerwań. Obsługa przycisku w przerwaniu timera zajmuje 2 linie kodu i wymaga jednego przerwania dla dowolnej liczby przycisków. 2. Robi się to, kiedy jest...
Pola tej struktury są modyfikowane w przerwaniu więc moim zdaniem volatile jest konieczne. Volatile jest konieczne tylko i wyłącznie jeśli pola struktury modyfikowane są (w nieuporządkowany sposób) w przerwaniu _i_ w kodzie głównym. Jeśli TYLKO w przerwaniu to nie ma takiej potrzeby. Jeśli tylko część struktury jest "współdzielona", to cała nie musi...
W temacie "2 UARTY ..." załączyłem pliki C do obsługi komunikacji szeregowej portów 1 i 0, zobacz tam, to są gotowe przykłady. Sprawdź czy przerwania w ogóle działają np. na timerach, kiedyś miałem taki przypadek że źle ustawiona była struktura harwardzka pamięci i przerwania nie były tam gdzie powinny.
Przy czasach na poziomie sekund, minut to nie jest to żaden problem. Jeden timer ustawić na stałe przerwanie np co 100ms, w przerwaniu od tego timera przeglądać jakąś tablicę, w której każdy jeden element odpowiada jednemu programowemu licznikowi. Zmniejszać liczniki w elementach w tej tablicy, po czym po wyzerowaniu się wywołać jakąś funkcję. W moich...
No jak nadaję wartość w main()- to bez błędów. Nie rozumiem- dlaczego. Jak to nie rozumiesz dlaczego - to chyba nie dziwne, że wewnątrz funkcji można przypisać dane do pól struktury. Struktura zdeklarowana jako globalna- no bo przed main- a nadać wartości nie można. Jak nie nie można ???? A jak będę chciał zmienić te wartości w innej funkcji albo w...
Witam! Próbuje uruchomić przerwania na zaprojektowanym układzie w oparciu o procesor ARM AT91RM9200. Struktura przerwań jest następująca: na nóżce PB29 IRQ0 obsługuje 8 przerwań współdzielonych. Każde przerwanie powinno być obsługiwane przez procesor, ale niestety jedno z przerwań nie jest właściwie obsługiwane. Przejawia się to tym, że czasami się...
Czy jesteś pewien, że stos Ci się nie przepełnia? Kompilator przed tym nie ostrzega, bo nie zawsze można na poziomie kompilacji przewidzieć rozmiar stosu. Stos w AVRach wypełniany jest od końca pamięci SRAM, jak się stos spotka z danymi, no to koniec... Czy masz w programie sytuacje, że np. wywołujesz funkcję w innej funkcji, albo nawet głębiej? Albo...
W tym problem, że warunek może jest sprawdzany ale wykonanie przerwania zmienia zmienną c ale nie jest ona brana pod uwagę przy wykonywaniu pętli while. Sam program główny działa prawidłowo, przerwanie przerywa działanie programu głównego ale wykonanie programu przerwania nie wpływa na wyokonywania odpowiedniego fragmentu programu głównego. Chodzi mi...
Ja też dorzucę swoje 5 gr :) Poniżej delay oparte o timer, chcąc wykorzystać inny timer należy LPC_TIM0 zamienić na inny np. LPC_TIM1. [syntax=c] #include "LPC17xx.h" #include "lpc17xx_gpio.h" #include "lpc17xx_timer.h" void delay_us(uint32_t czas) { TIM_MATCHCFG_Type MatchConfigStruct; LPC_TIM0->IR = 1; // zresetowanie flagi przerwania od rejestru...
Jeśli założysz, że te dane są zawsze za obszarem wektorów przerwań ( niezależnie jakiej wielkości) to nie musisz przeszukiwać całego 1MB tylko ograniczyć się do pierwszych kilku KB. Jeśli bootloader nie znajdzie takiego paternu w tych pierwszych kilku KB to można przyjąć, że firmware nie jest wgrany lub jest uszkodzony. W takiej strukturze danych za...
Moim zdaniem AVR to stanowczo za małe mikrokontrolery, by zarządzać w nich dynamicznie pamięcią. Już sama funkcja malloc zajmie całkiem sporo pamięci FLASH. Pamięci RAM też w większości AVR nie ma jakoś wyjątkowo wiele, by było czym zarządzać. Inna sprawa, że malloc/calloc/realloc i free mają zastosowanie do tablic, których rozmiary nie są znane w trakcie...
Ostatnio był podobny temat: http://www.elektroda.pl/rtvforum/topic31... Rozdzieliłbym jednak naukę samego języka od mikrokontrolerów. Rozpocząłbym od opanowania C oraz C++ na PC bazując na dobrych książkach do tch języków. Oszczędzi Ci to czasu w kolejnych etapach nauki ponieważ 90% dobrego kodu będziesz mógł przenieść z PC na dowolny mikrokontroler....
Ok .. może dla początkującego to może to być troche niezrozumiałe. Wskaźniki , struktury zazwyczaj sprawiają problemy na początku. W tym przypadku można by faktycznie umieścić cały kod w przerwaniu, bo jest go tak niewiele że przerwania na pewno się nie nałożą. Mam nadzieje że sam plik display.c jest przynajmniej trochę zrozumiały. Jeżeli chcesz wytłumaczenia...
Dokladnie, musisz ustawic stos. U mnie struktura wygladala tak .include "m8def.inc" .org 0x00 rjmp reset RESET: ldi R16,low(RAMEND) out SPL,R16 ldi R16,high(RAMEND) out SPH, R16 main: rjmp main
Jeżeli jedyną czynnością wykonywaną w przerwaniu jest ustawienie znacznika, to to przerwanie jest całkowicie zbędne - w końcu każdy timer czy UART ustawia sprzętowo bit, który można programowo testować w pętli głównej. Przy czasochłonnych obliczeniach takich jak FFT sensownie jest użyć RTOSa. Gdyby nie to, struktura z kilkoma przerwaniami bez pętli...
Im bliżej graniczy możliwości chcesz pracować tym bardziej zaawansowanych i precyzyjnych metod trzeba użyć, spójrz na to z innej strony - ile wysiłku i pieniędzy warto włożyć żeby zaoszczędzić kilka złotych na tranzystorach? Temperaturę struktury można oszacować na podstawie jakiegoś parametru zależnego od temperatury ale wymaga to przełączenia tranzystora...
Witam ponownie, Wszystkie opisy portów przerwań itp znajdzie kolega w datasheet do uP wszystko dostępne na stronie Atmela. Jak kolega chce wykorzystać to co ma to proponuje driver na 3 tranzystorach bipolarnych (tzw push-pull). Jak będzie problem z doborem wartości elementów mogę pomóc. PS. Jeśli tranzystory nie mają diody źródło-dren w strukturze wynikającej...
A dlaczego zamiast zmiennej data nie użyć struktury, która składa się z dwóch kawałków: dataH i dataL? W przerwaniu wykonujemy dwie atomowe operacje odczytu rejestrów do stosownych części struktury, a w programie głównym używamy całej struktury. Ale to nic nie zmieni. Co prawda w przerwaniu przepisanie danych do struktury będzie poprawne (ale ono zawsze...
Jaki kompilator? Nie pokazałeś deklaracji struktur danych - z tego co widzę to nie obsługujesz przepełnienia wartości zmiennych "odebrano" i "wysłano" - to miałyby być bufory cykliczne? w _putchar() gdy wysyłka_wyłączona == 1 powinieneś od razu wpisać bajt do rejestru SBUF, inaczej będziesz czekał na odbiór bajtu żeby zinicjalizować wysyłkę w przerwaniu....
Problem leży zapewne w kodzie, który odbiera dane z UART, albo w całej strukturze oprogramowania - zagnieżdżanie procedur, ew. samych przerwań. Dopóki tego nie pokażesz nic Ci nie pomożemy.
Nie zauwazylem zadnej struktury dla SysTicka poza tymi definicjami. Zajrzyj do core_cm3.h , tam jest gotowa funkcja z CMSIS SysTick_Config(uint32_t ticks) i tam też znajduje się odpowiednia struktura w tym headerze. SysTick jest dostarczany z rdzeniem przez ARM. Dlatego konfigurację NVIC, ITM czy SysTick nie szukasz na stronach producenta mikrokontrolera...
Problem zmiennej globalnej: - system składający się z wielu plików, kilku lub kilkunastu przerwań, dostęp do tej samej struktury opisującej "dane urządzenie" z przerwań oraz wielu innych miejsc. - tworząc zmienne w funkcji ograniczamy się do tej funkcji, więc po wyjściu z funkcji pod tym adresem może być coś innego - można stworzyć w main tą zmienną...
kopiowa struktura struktura krzemowy struktura klasie
zmiana cyfra czujnik vario czujnik bębnem
zasilacz tl494 schemat zasilacz tl494 schemat
ESP32 Arduino – przykład obsługi karty SD, SPI i SD_MMC, kod, podłączenie, formatowanie FAT32 BMW X3 E83 2.0i 150KM LPG – check engine po 100 km, błędy na gazie, benzyna OK