atomic block

Znaleziono około 138 wyników dla: atomic block
  • [C] Czy ATOMIC_BLOCK wpływa na dokładność odmierzania czasu timerem w C?

    Źle myślisz. Jeśli przerwanie wystąpi akurat w trakcie funkcji atomic block jego obsługa troszeńkę się opóźni. I objaw będzie podobny to faktu obsługiwania wielu przerwań. Dlatego też jak wielokrotnie powtarzano, obsługo przerwania jak najkrótsza. atomic block również. W sumie powinien składać się wyłącznie z odczytu zmiennej typu volatile do zmiennej...

    Mikrokontrolery AVR   18 Lip 2011 20:32 Odpowiedzi: 6    Wyświetleń: 3380
  • REKLAMA
  • [STM32F103][keil][C] nieznany atrybut przerwania SysTick

    Bitbanding służy tylko do bitów. Atomic block w AVR po prostu wyłaczą przerwania na ten czas. Chodzi o to aby coś w tle nie zmieniło tej lokacji w trakcie czytania / pisania. Dotyczy to zresztą tylko operacji wykonujących w wiekszej ilości operacji niż jedna. Dodano po 3 o dzięki, szukałem dzisiaj tego bitu w PM, ale nie mogłem znaleźć. Naprawdę? http://www.st.com/content/ccc/resource/t...

    Mikrokontrolery ARM   30 Gru 2017 10:38 Odpowiedzi: 63    Wyświetleń: 2484
  • Nie znalazłeś odpowiedzi? Zadaj pytanie Sztucznej Inteligencji

    Czekaj (2min)...
  • Błąd czasowy w pętli z volatile unsigned int Time_out w przerwaniu 25ms

    [syntax=c] ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {Time_out=0;}; int x; do { ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { x=Time_out;); } while (x < 1000); [/syntax]

    Mikrokontrolery   25 Gru 2011 21:08 Odpowiedzi: 14    Wyświetleń: 1554
  • REKLAMA
  • [STM32F303][C]Atomic blocks - sekcje krytyczne w STM32

    Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.

    Mikrokontrolery ARM   04 Sty 2020 21:56 Odpowiedzi: 16    Wyświetleń: 1347
  • M8 DS18B20 LED - DS18B20 format wyniku i podział na cyfry

    Opanowałem całkowicie wyświetlanie na wyświetlaczu LED liczby w formie zmiennej uint16_t, z wyłączeniem wyświetlaczy na których jest "0" (oprócz cyfry jedności) oraz z wyświetlaniem segmentu "minus" w zależności od zmiennej znak. Poniżej funkcja "oblicz", może komuś się przyda, może też ktoś ją ulepszy. Zastosowałem tam dodatkową zmienną lokalną "liczba1"....

    Mikrokontrolery AVR   31 Gru 2012 12:09 Odpowiedzi: 27    Wyświetleń: 4155
  • Atomowość w C: Zmienna _co20ms w przerwaniach i możliwe błędy

    Jeśli 1 bajtowa nic się nie stanie. 2 bajtowa wystarcza 2 kolejne odczyty które dadzą ten sam wynik lub zastosowanie atomic block. to jak zmienić tą konstrukcję : while (_co20ms < 1000) { rób coś tam} ? Czy tak jest dobrze: [syntax=c]while(kopia_co20ms < 1000) { cli(); kopia_co20ms=_co20ms; sei(); rób coś tam }[/syntax] Atomic Block u mnie w...

    Mikrokontrolery   12 Sie 2011 13:22 Odpowiedzi: 7    Wyświetleń: 1573
  • MSJ-NVR-6116 PRO – jak zresetować hasło administratora przez RS232 i Linux lub inną metodą

    Koledzy posiadam rejestrator MSJ-NVR-6116 PRO lecz z hasłem administratora. Producent w Polsce nie odpowiada, oczywiście to brand chińczyka. Szukałem wszędzie wsadu do flash'a lecz nigdzie nie ma, a jak już jest to albo w wersji 9 kamer, a jak znalazłem w wersji 16 kamer to na flash 256 oryginalnie na płycie jest 128. Kupiłem nawet 256 i niestety wtedy...

    Monitoring Wizyjny CCTV   19 Maj 2025 18:05 Odpowiedzi: 18    Wyświetleń: 393
  • REKLAMA
  • GCC: Jak ustawić bity 4-7 na porcie bez zmiany 0-3?

    W takim przypadku można usunąć jedno maskowanie: [syntax=c] uint8_t x = 5 DataOut(x); void DataOut(uint8_t data){ data=data<<4; //przesuwam data na najstarsze bity (7-4) ATOMIC_BLOCK(ATOMIC_RESTORESTATE){ PORTx = (PORTx & 0x0F) | data; } }[/syntax]

    Mikrokontrolery   21 Gru 2011 10:17 Odpowiedzi: 5    Wyświetleń: 1023
  • [ATmega32][C][AVR Studio 4] Slave SPI, timery i przerwania - kolizja.

    Dziś wróciłem do sprawy po krótkiej przerwie. Zastosowałem się do rady: Jeśli układ nadrzędny nadaje te dwa bajty jeden po drugim, to może się okazać, że przerwa między bajtami jest zbyt mała i okazało się, że transmisja zaczęła śmigać znacznie lepiej. W LPC2148 pomiędzy wysyłanymi bajtami dałem minimalne opóźnienie w postaci pustej pętli for X100....

    Mikrokontrolery AVR   23 Lis 2011 21:03 Odpowiedzi: 6    Wyświetleń: 1994
  • [XMEGA][C] Odczyt flash w isr i eeprom w programie głównym

    Cześć, zagłębiam się trochę w wykorzystanie pamięci eeprom i flash i przeglądając avrowe funkcje nvm natknąłem się na takie stwierdzenie: The functions in this module are modifying the NVM.CMD register. * If the application are using program space access in interrupts * (__flash pointers in IAR EW or pgm_read_byte in GCC) interrupts * needs to be disabled...

    Mikrokontrolery AVR   01 Wrz 2021 19:27 Odpowiedzi: 5    Wyświetleń: 600
  • nRF24L01+ ATMega 16A [C] - Brak komunikacji pomiędzy układami

    Dlaczego wykorzystałeś drugie rozwiązanie zamiast pierwszego (IMHO - znacznie lepszego)? Wykorzystując takie zmienne jako flagi prowadzisz do niepotrzebnego komplikowania kodu i utrudnienia kontroli dynamicznie rozwijającego się programu :) Jedna z propozycji rozwiązania problemu: [syntax=c]char SPI_MasterTransmit(char cData){ char spi_return; ATOMIC_BLOCK(ATOMIC_RESTORESTATE){...

    Mikrokontrolery   25 Kwi 2015 09:36 Odpowiedzi: 9    Wyświetleń: 1755
  • Problem z grafiką na Linuxie na laptopie Toshiba Satelite A300, model PSAG4E-03701RPL

    [syntax=bash][ 0.447367] ... value mask: 000000ffffffffff [ 0.447424] ... max period: 000000007fffffff [ 0.447453] ... fixed-purpose events: 3 [ 0.447453] ... event mask: 0000000700000003 [ 0.447453] signal: max sigframe size: 1440 [ 0.447453] rcu: Hierarchical SRCU implementation. [ 0.447453] NMI watchdog: Enabled. Permanently consumes one hw-PMU counter....

    Linux   25 Maj 2024 01:04 Odpowiedzi: 8    Wyświetleń: 543
  • REKLAMA
  • UCRSC - nie mogę nic zapisać do rejestru. Programuję prze JTAG.

    Dzieki za zainteresowanie. Jednak powiem krótko-nie rozumiem. I jesli mozna bardziej łopatologicznie to wytłumaczyć to bardzo prosze. W tej chwili inicjuje UART jako pierwszą funkcje w main(). Przerwania globalne są wyłaczone. O ile rozumiem przytoczony text z noty to odczytać UCSRC mogę w nastepnym cyklu zegara, przy wyłaczonych przerwaniach globalnych....

    Mikrokontrolery AVR   10 Cze 2011 21:39 Odpowiedzi: 4    Wyświetleń: 1290
  • [Atmega8] Atmega8: Losowe zaniki pomiaru z czujników DS18b20 w termometrze dwupunktowym

    Funkcje OneWireReset_1, OneWireReset_2, OneWireWriteByte_1, OneWireWriteByte_2, OneWireReadByte_1 i OneWireReadByte_2 obuduj tak: unsigned char OneWireReset_1() { cli(); ... ... ... sei(); return(0); } A jeszcze lepiej to obuduj makrem ATOMIC_BLOCK.

    Mikrokontrolery AVR   13 Gru 2010 23:10 Odpowiedzi: 4    Wyświetleń: 1708
  • Implementacja funkcji millis() z Arduino w języku C

    Co "toto" jest? ISR_NO_BLOCK(TIMER0_COMP_vect) Wyszukiwarka nie działa? Czemu kolega strzela na ślepo? Ja rozumie "dawno, dawno temu, za siedmioma górami, za siedmioma lasami, gdy nie było Internetu..." Ale teraz? https://www.nongnu.org/avr-libc/user-man... Tak ciężko znaleźć? Przy okazji. Chce kolega koniecznie dziedziczyc...

    Arduino   06 Lip 2018 22:47 Odpowiedzi: 30    Wyświetleń: 2304
  • m8 [c] ATMEL STUDIO - dziwne zachowanie odczyt z PROGMEM

    No tak doczytałem o dokładności taktowania w rozdziale 24. Zaniepokoiło mnie jednak to, że wymagane jest do 1WIRE poprzez USART wykorzystanie pinu D0. Ja mam tam podpięte katody wyświetlacza (całe 8 bitów portu D). Mam w związku z tym kilka pytań: 1. Czy darować sobie w takim razie 1W po USART i bawić się z _delay'ami? mam dwa czujniki podpięte pod...

    Mikrokontrolery AVR   26 Gru 2012 22:47 Odpowiedzi: 20    Wyświetleń: 3129
  • [BASCOM] Skąd te dodatkowe znaki przy wyświetlaniu?

    W przerwniu i programie głównym używasz zmiennych zadeklarowanych jako word. Myślę, ze tu leży pies pogrzebany. W C wystarczy użyc volatile i atomic_block. W Bascim? Był taki na Elektrodzie (niveasoft) co wiedział w jaki tajemniczy sposób Bascom zarządza takimi zmiennymi. Myślę, że nie masz wyjścia, tylko przed odczytej w programie głównym zmiennej...

    Mikrokontrolery AVR   27 Lut 2018 19:12 Odpowiedzi: 2    Wyświetleń: 714
  • Jak użyć warunku if i przerwania UART do obsługi czasu w C?

    Witam volatile struct _sTime { volatile uint8_t uiHours; volatile uint8_t uiMinute; volatile uint8_t uiSecond; }; ... ... if((60*sTime.uiMinute + sTime.uiSecond)>=600) { eMAIN_AutomatState = SERVICE_accepted; } if(true==volatileEverySecondsToggle && FREE==TxBufor_0.eTxStatuss)//tylko do spr. że...

    Mikrokontrolery AVR   06 Gru 2010 15:51 Odpowiedzi: 4    Wyświetleń: 1377
  • Jak przywrócić oprogramowanie w rejestratorze BCS-CVR0401E-IV po nieudanej aktualizacji z FTP?

    Zgadza się, kwadratowy pin to Rx, wyżej Tx, wyżej GND. Rejestrator z tego co się orientuję to rebrand Dahua XVR5104C. Sprawa wygląda tak: - rejestrator ma adres IP 192.168.1.108. mam dostęp do Telneta, jednak z otwartych portów jest tylko 23 - ponoć na porcie 3800 powinien nasłuchiwać aktualizacji firmware z takich narzędzi jak ConfigTool. Przy łączeniu...

    Monitoring Wizyjny CCTV   24 Lis 2020 16:57 Odpowiedzi: 8    Wyświetleń: 3300
  • Niedokładne wyniki licznika impulsów z enkodera - jak poprawić?

    Odnoszę się do kodu z postu #24. Zmienne 'wyslij' oraz 'ilosc' powinny mieć kwalifikator volatile ponieważ są używane w programie oraz w procedurze obsługi przerwania. [syntax=c] volatile int ilosc; volatile bool wyslij; [/syntax] Wywołanie funkcji serial() w pętli loop() może być wielokrotnie "przerwane" przez obsługę przerwania ENKODER_ISR() jeżeli...

    Arduino   08 Wrz 2019 08:31 Odpowiedzi: 47    Wyświetleń: 3186
  • 1wire SEARCH ROM (0xF0) zwraca dwie jedynki - problem z odczytem

    Na oscylogramie widać podstawę czasu przypadającą na działkę więc wrzuciłem aby ktoś porównał to z tym jak ma być, więc dlaczego twierdzisz że nie jesteś w stanie odczytać zależności czasowych? Co mi da wrzucenie przez kogoś swojego oscylogramu z działającej komunikacji? Ano to że wówczas dokonam właśnie porównania z timingami które ja mam u siebie...

    Mikrokontrolery   27 Sie 2020 23:10 Odpowiedzi: 26    Wyświetleń: 1572
  • Atmega128 - odczyt DS18B20 - z trzech różnych pinów

    Masz poniżej zawartość dwóch plików, które trzeba podmienić: [syntax=c] #include <util\atomic.h> #include <util\delay.h> #include <avr\io.h> #include "1wire_basic.h" uint8_t Error; uint8_t PinMask; void OW_SendBit(bool bit) { ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { DDRB |= PinMask; _delay_us(3); if(bit) DDRB &= ~PinMask; _delay_us(60);...

    Mikrokontrolery   04 Kwi 2020 00:24 Odpowiedzi: 21    Wyświetleń: 1380
  • ADC w Atmega128 - błędne odczyty napięcia z potencjometru na ADC1

    A dlaczego kolega ma ustawiony bit ADLAR w ADMUX ( ADMUX = 0b00100000; )? Przecież to włączenie wyrównania do lewej w rejestrze ADC, więc trzeba to chyba później uwzględnić w obliczeniach. Chciałbym jeszcze zauważyć, że sprintf() operuje na zmiennej czterobajtowej, która w każdej chwili może zostać zmieniona przez przerwanie od ADC przykładowo w czasie...

    Mikrokontrolery AVR   01 Mar 2011 16:55 Odpowiedzi: 5    Wyświetleń: 1342
  • Jak przywrócić Asus RT-AC58U do oryginalnego oprogramowania po OpenWRT?

    Witam. Posiadam router Asus RT-AC58U. Problem taki, że nie wstaje po próbie wgrania OpenWRT. Po podpięciu po UART: Format: Log Type - Time(microsec) - Message - Optional Info Log Type: B - Since Boot(Power On Reset), D - Delta, S - Statistic S - QC_IMAGE_VERSION_STRING=BOOT.BF.3.1.1-00... S - IMAGE_VARIANT_STRING=DAABANAZA S - OEM_IMAGE_VERSION_STRING=CRM...

    Sieci LAN   27 Sie 2019 16:50 Odpowiedzi: 1    Wyświetleń: 1293
  • DS18B20+ - błędne odczyty temperatury, jak naprawić?

    W OW_Reset po wyslaniu RESET_PULSE (ktory zreszta powinien trwac 480us, a nie 450) za dlugo czekasz pomiedzy koncem RESET_PULSE a poczatkiem badania PRESENCE_PULSE. Kolejna rzecz - po wykryciu PRESENCE_PULSE nie dawaj stalego opoznienia tylko probkuj magistrale az wroci do "1" - oczywiscie z zabezpieczeniem przed zwarciem do "0" - zeby program sie nie...

    Mikrokontrolery   08 Sty 2010 09:55 Odpowiedzi: 37    Wyświetleń: 4095
  • Wyłuskanie wartości zmiennej programowej i wysłanie jej przez UDP (język LUA)

    Jak kolega wyżej słusznie zauważył, potrzebna jest funkcja operująca na RAM. Domyślam się że korzystasz z przykładowych kodów z książki "AVR. Praktyczne projekty"? Nie ma tam buforowanej funkcji UART czytającej stringa umieszczonego w RAM, a więc trzeba sobie taką funkcję dopisać (można też zmodyfikować istniejącą korzystając z tzw named address spaces)....

    ESP8266 i ESP32   23 Wrz 2019 18:09 Odpowiedzi: 5    Wyświetleń: 891
  • Przykładowy program w C na ATmega32 do multipleksowania 4 wyświetlaczy 7-segmentowych

    Przykładowy program który wyświetla jakąś liczbę: [syntax=c]volatile uint16_t disp=0; uint8_t buff[]={0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000, 0b10001000, 0b10000011, 0b11000110, 0b10100001, 0b10000110, 0b10001110}; ISR(TIMER0_OVF_vect) { static uint8_t dig=0; static uint16_t...

    Mikrokontrolery AVR   23 Sty 2018 11:12 Odpowiedzi: 12    Wyświetleń: 1482
  • Mdadm - RAID 1 znika po restarcie serwera, jak to naprawić?

    /var/log/kern.log Jun 22 23:21:17 Nas kernel: [ 0.000000] Booting Linux on physical CPU 0x0 Jun 22 23:21:17 Nas kernel: [ 0.000000] Initializing cgroup subsys cpuset Jun 22 23:21:17 Nas kernel: [ 0.000000] Initializing cgroup subsys cpu Jun 22 23:21:17 Nas kernel: [ 0.000000]...

    Linux   28 Cze 2016 17:10 Odpowiedzi: 12    Wyświetleń: 1653
  • Nano i Micro - Błędne wartości w zmiennych volatile (wielobajtowych)

    Sądzę, że problem pojawia się gdy przerwanie zostanie wywołane w trakcie zapisu lub odczytu zmiennej z RAM Bardzo słusznie sądzisz. 1. Czy jest to normalne zachowanie, czy raczej efekt źle skonfigurowanego środowiska Arduino? Nie ma pojęcia jak się zachowuje Arduino, bo nie używam, ale podejrzewam, że podobnie jak C czyli sam musisz się przed tym zabezpieczyć....

    Arduino   26 Lip 2016 16:55 Odpowiedzi: 51    Wyświetleń: 3534
  • Zasady pisania programów pseudowielowątkowych na małych proc

    Kolega sulfur nie doczytał, nie pisałem o WinAPI, tylko o swoim okienkowym API na AVR, a że jest podobny do WinAPI z czasów W3 to nie dziwne. Pominąć zdarzenia możesz nie tylko w przypadku okienek, także w technicznych zastosowaniach. Np. czekasz na naciśnięcie przycisku, nerwowy użytkownik naciska go 3 razy, ale ciebie interesuje tylko fakt, że go...

    Mikrokontrolery   12 Kwi 2011 22:58 Odpowiedzi: 103    Wyświetleń: 15299
  • Jak zintegrować ADC z TIMER2 w ATmega32 do próbkowania 8kHz w AVR Studio 4?

    Przykład dla dwóch kanałów Przed wpisaniem tego kodu musisz odpowiednio ustawić Bity w rejestrach ADMUX i ADCSRA Jeśli chcesz mieć próbkowanie co określony czas to musisz odpowiednio ustawić rejestry zegara. Pisałem trochę z pamięci mogłem gdzieś zgubić klamrę przecinek lub średnik [syntax=c] //SET_BIT(ADCSRA, ADSC); - moje makro ustawiające bit w rejestrze,...

    Mikrokontrolery AVR   13 Lis 2011 15:02 Odpowiedzi: 21    Wyświetleń: 3405
  • Odczyt czasu między przerwaniami z AD9850 przez Timer1 - błędy

    Kod poniżej. Zmieniłem parametr w Serial.begin() na 115200 - trzeba przestawić monitor portu szeregowego.[syntax=c]#include <util/atomic.h> volatile int32_t licznik = 0; volatile int32_t licznik_old = 0; volatile int32_t roznica = 0; volatile int32_t roznica_old = 0; void setup() { Serial.begin(115200); pinMode(2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2)...

    Arduino   16 Maj 2021 21:42 Odpowiedzi: 29    Wyświetleń: 1050
  • [ATmega32] Jak działa funkcja millis() w Arduino i konfiguracja Timer2 w ATmega32?

    W tym trybie timer po prostu zlicza impulsy zegarowe do niego doprowadzone, jeśli przekroczy zakres to zgłasza przerwanie overflow (nadmiaru) i rozpoczyna zliczanie od nowa. Funkcja obsługi tego przerwania zlicza je zwiększając liczniki f - przechowujący czas z rozdzielczością <1ms i m przechowujący liczbę milisekund. W programie należy korzystać...

    Mikrokontrolery AVR   16 Paź 2012 10:38 Odpowiedzi: 7    Wyświetleń: 2394
  • [ATmega 644p][C] Analizator - problem z przerwaniem

    Czyli początkujący w C- tak jak ja może na początek zapamiętać: "Stąd też praktycznie tylko zmienne globalne powinny mieć atrybut volatile" A w drugim przypadku korzystać z Atomic_Block w main(). Czy tak? W tym Atomic_Block nie mogę dojść do różnicy w _Forceon i _Restorestate.

    Mikrokontrolery AVR   01 Wrz 2010 14:56 Odpowiedzi: 14    Wyświetleń: 3545
  • Przetwornik U/f na ATmega32: Jak uzyskać dokładność 1 Hz w zakresie 1-5 kHz?

    uuidgen - nie można stosować sei() i cli(), bo prowadzi to do nieokreślonych skutków na wszystkich poziomach optymalizacji z wyjątkiem O0. Należy stosować makro ATOMIC_BLOCK. A możesz coś więcej powiedzieć na temat tych błędów? Bo, że sei/cli pozwalają na popełnienie głupich błędów (jak nie włączenie przerwań) to się zgodzę, ale: 1. Zarówno cli jak...

    Mikrokontrolery AVR   03 Maj 2010 17:09 Odpowiedzi: 12    Wyświetleń: 1597
  • Zmienne globalne wykorzystywane przez przerwania i inne.

    Nie zastanawiać się i zawsze wstawiać atomic block? Etam... Można sobie wyobrazić funkcję zabezpieczoną blokiem z atrybutem RESTORE, która jest wyoływana zarówno w mainie jak i przerwaniu. I co? Można sobie zrobić kuku, nieprawdaż?

    Mikrokontrolery Początkujący   28 Kwi 2021 13:48 Odpowiedzi: 47    Wyświetleń: 2931
  • Pierwsze starcie z mikrokontrolerami (dozwolone linki Allegro, eBay, itp)

    Jak zapisuje się do EEPROMU w Atmedze liczbę typu integer? Zaznaczam, że nie chcę korzystać z gotowych funkcji (eeprom_read_word). Poniższy kod oparty o dokumentacje Atmegi32 bez problemu zapisuje zmienne 8-bitowe. [syntax=c] void ZapisDoEpromu (unsigned int adres, unsigned char dane) { ATOMIC_BLOCK(ATOMIC_FORCEON) { while (EECR & (1<<EEWE));...

    Mikrokontrolery Początkujący   09 Sty 2018 16:32 Odpowiedzi: 2015    Wyświetleń: 553785
  • Zmiana bitów 2-4 w PORTB jednocześnie w AVR C, użycie licznika 0-7

    AVR-libc oferuje makro ATOMIC_BLOCK.

    Mikrokontrolery AVR   29 Paź 2009 11:00 Odpowiedzi: 7    Wyświetleń: 1434
  • [a168][c]dlaczego procek może nie chcieć pisać do eepromu?

    Właśnie do tego masz ATOMIC_BLOCK. Instrukcje w takim bloku będą chronione. Bardziej elegancko można to zrobić w C++, no ale to inna bajka.

    Mikrokontrolery AVR   21 Cze 2010 21:11 Odpowiedzi: 19    Wyświetleń: 1328
  • [Atmega8] Atmega8 resetuje się po 260 µs przy użyciu przerwań w AVR Studio - dlaczego?

    W avr-libc są makra do operacji atomowych: #include <util/atomic.h> ATOMIC_BLOCK(ATOMIC_RESTORESTATE)... { /* zrób coś */ } [url=http://www.nongnu.org/avr-libc/user... Pozdrawiam, Dr.Vee

    Mikrokontrolery AVR   10 Paź 2009 10:05 Odpowiedzi: 8    Wyświetleń: 3467
  • Atmega16 C - Jak poprawić funkcję opóźnienia bez _delay_ms()?

    To prawidłowo powinno być tak: [syntax=c] volatile int counter; delay(x) { ATOMIC_BLOCK(ATOMIC_FORCEON) { counter = 0 } while(counter<x){/* waits */} } ISR() { count++; } [/syntax] To takie rozwiązanie nie będzie miało większego wpływu na mój zegar Jeżeli dam opóźnienie 60s to nie zatrzyma mi się zegar na 60s ?

    Mikrokontrolery AVR   04 Kwi 2013 07:09 Odpowiedzi: 33    Wyświetleń: 3111
  • AVR-GCC - Optymalizacja dostępu do struktury przez GCC?

    [syntax=c]memcmp(Tablica,(void*) &struktura[index].Tab, 8);[/syntax] Działa. Rozumiem, że w tym przypadku, gdy funkcja używana jest w ISR to tylko kwestia zapisu, zaś w innym przypadku (gdy byłaby używana w main) należałoby zastosować: [syntax=c]ATOMIC_BLOCK(ATOMIC_RESTORESTA... { memcmp(Tablica,(void*) &struktura[index].Tab, 8); }[/syntax] robiw

    Mikrokontrolery AVR   12 Cze 2014 22:15 Odpowiedzi: 25    Wyświetleń: 2997
  • [ATMega16][C] Program się zawiesza w losowych momentach

    Nie znalazłem gotowca z wykorzystaniem TWIE czyli przerwania od TWI. Ani nic podobnego do gotowca. Te petle while trwają krótko- kilkadziesiąt mikrosekund- teoretycznie. A próbowałeś z ATOMIC_BLOCK?

    Mikrokontrolery AVR   14 Wrz 2011 21:13 Odpowiedzi: 56    Wyświetleń: 4804
  • ATmega128A - Nie mogę ustawić breakpointów w Atmel Studio 6.2 i 7.0

    Wybacz, ale nie rozumiem współpracy tych linii kodu. Zastanów się nad użyciem [syntax=c]ISR(TIMER0_OVF_vect) { timer0_licz--;[/syntax] i dalej, cała funkcja [syntax=c]void delay_500ms(void) { ATOMIC_BLOCK(ATOMIC_FORCEON) { TIFR |= _BV(TOV0); //zerowanie flagi przerwania (zapis 1) TIMSK |= _BV(TOIE0); //aktywacja przerwania od przepełnienia TIMER0 (OVF)...

    Mikrokontrolery AVR   22 Cze 2016 06:33 Odpowiedzi: 37    Wyświetleń: 3255
  • Jak zmniejszyć rozmiar kodu w C dla AVRStudio?

    Za późno, już zrobiłem i działa:) Po 20 sek. wyłącza podświetlanie wyświetlacza, po 1 min. wyłącza urządzenie. Naciśnięcie dowolnego klawisza włącza podświetlanie ekranu i kasuje liczniki timera:) Ale zajrzę do ATOMIC_BLOCK, bo może rzeczywiście wyskoczą obelgi;)

    Mikrokontrolery AVR   13 Cze 2011 11:36 Odpowiedzi: 39    Wyświetleń: 3644
  • [ATmega32][c] Przerwanie od porównania w timer1 - ograniczenia

    Gdzieś na forum był już podobny temat przerabiany. Instrukcja skoku do przerwania trwa z tego co wiem 4 cykle zegarowe. W trakcie obsługi jednego przerwania inne nie jest obsługiwane. Zostanie wykonane dopiero po zakończeniu obsługi poprzedniego przerwania. Jeżeli co najmniej dwa przerwania wystąpią w tym samym czasie to zostanie obsłużone to z niższą...

    Mikrokontrolery AVR   21 Lis 2011 17:23 Odpowiedzi: 10    Wyświetleń: 2494
  • Kod w C do jednorazowej konwersji AC na Atmega8 i zapis do zmiennej

    To jest jak ustawienie flagi w przerwaniu- ale nie ma prologu i epilogu wejścia w przerwanie. Jest szybciej. Z tym że odczyt rejestrów w takim przypadku należy chyba robić w Atomic_block. A- ale to jest w asm. No to trzeba zablokować/odblokować przerwania.

    Mikrokontrolery   10 Sty 2012 20:48 Odpowiedzi: 14    Wyświetleń: 2979
  • Atmega32 16MHz/DS18B20 - niewłaściwe opóźnienia

    Skorzystalem z Twojego kodu: [syntax=C]#define SET(what, x) (what |= (1<<x)) #define CLR(what, x) (what &= ~(1<<x)) #define DDRDDRC #define OW_PIN7 #define PORT PORTC #define OW_NoPresencePulse 1 #define OW_BusShorted 2 #define OW_SearchNoResponse3 #define OW_OK 100 #define OW_CONVERT 0x44 #define OW_SkipROM 0xCC #define OW_MatchROM0x55...

    Mikrokontrolery Początkujący   18 Lut 2014 00:15 Odpowiedzi: 3    Wyświetleń: 1392
  • [ATmega32][C] - Złe działanie bez kolejnego resetu po właczeniu zasilania

    OK, udało mi się wyizolować problem - wysypuje się dodawanie znaków do stringa żeby zawsze miał identyczną długość: [syntax=c]while(strlen(bufstr) < 4) append(bufstr," ",0);[/syntax] Po zakomentowaniu zawsze działa dobrze. Wygląda mi na to że gdzieś w tej funkcji wycieka mi pamięć. Funkcja append: [syntax=c]void append(char subject[], const char...

    Mikrokontrolery AVR   05 Lis 2015 19:45 Odpowiedzi: 17    Wyświetleń: 1524
  • AVR C – jak bezpiecznie obsłużyć bufor kołowy UART (Petera Fleury) w sekcji krytycznej?

    W celu uzyskania "atomowości" zainclude'uj sobie <util/atomic.h> . Jest w nowym WinAVR. Jest tam kilka makr, Ciebie pewnie zainteresuje taka konstrukcja: ATOMIC_BLOCK(ATOMIC_RESTORESTATE)... (jakieś operacje) } . Dobrze wiedziec, żę coś takiego jest w nowym WinAVR. Ja czasami używam takiej takiego rozwiązania: unsigned...

    Mikrokontrolery   22 Kwi 2008 15:53 Odpowiedzi: 11    Wyświetleń: 1964