Wydaje mi się że to zależy od kompilatora. Taka deklaracja nie zeruje zmiennej, czy kompilator ją niejawnie wyzeruje to zależy od niego. Nawet jeżeli ja zeruje to lepiej zawsze napisać; volatile uint8_t accel_decel_counter = 0; Wtedy program jest jaśniejszy, a dobry kompilator i tak to przypisanie zrobi tylko raz. Standard języka C tego nie definiuje...
Umieść cały kod. Fragment, który przysłałeś na PW [syntax=c] void loop() { digitalWrite( napiecie, HIGH); // wyjscie na pinie 5v dla testu digitalWrite( niskie, LOW); // wyjscie na pinie 0v dla testu static volatile int stan; if (stan != digitalRead(przeslona)) // jesli pin ma 5v stan = digitalRead(przeslona); { stepper.moveDegreesCW (180); delay(1000);...
Wystarczy policzyć. 19200 bps = 1920 znaków na sekundę, czyli znak co ~0,5 ms. Przy taktowaniu 4MHz masz +/- 2080 cykli procesora pomiędzy przerwaniami od UARTa, czyli duuużo czasu na wykonywanie instrukcji w pętli głównej. Na Twoim miejscu skupiłbym się na przetwarzaniu tekstu np. linia po linii - przerwanie wypełnia bufor, a po wykryciu sekwencji...
Bardzo wiele zostało już powiedziane (bardzo dobre porady). Moim zdaniem krokiem zero jest jako tako umieć programować w C na PC (jak przebiega proces kompilacji, kod źródłowy podzielony na pliki *.c i *.h, organizacja pamięci i wskaźniki, struktury i wskaźniki do nich, słowa kluczowe register, volatile, static, etc., preprocesor, makefiles i make,...
Po co Ci zerowanie semafora ? Semafor binarny liczy do 1, więc nie musisz w nim niczego zerować. Generalnie najprostszy semafor działa mniej więcej tak: [syntax=c] static volatile int semCount; Take(){ while(count > 5); count++; } Give(){ count--; }[/syntax] Jest to bardzo prymitywna konstrukcja, ale tak to mniej więcej działa. Binarny poprostu liczy...
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 znam Atmel Studio, ale jako że korzysta ono z klasycznego make-a... Wygląda, że "grzebnąłeś" sobie gdzieś w opcjach projektu, ewentualnie w automatycznie wygenerowanym pliku Makefile. Najlepiej wklej ten plik tutaj. No chyba, że włączona jest opcja "treat warnings as errors" (czego nie widzę). Aby zlikwidować to ostrzeżenie po prostu dodaj brakujący...
janbernat ---> eeej no co ty opowiadasz że traktuję cię jak początkującego czy jeszcze gorzej jak piszesz - bzdura! Po prostu wiem też że zaczynasz chyba pisać w C i stąd może jakieś dziwne czy nieoczekiwane dla ciebie rzeczy się dzieją. Np dodawanie przydomka volatile do zmiennej static test w przerwaniu nie ma najmniejszego sensu, skoro jest ona wykorzytywana...
Próbowałem deklarować zmienną nr_trybu w różny sposób (volatile, extern, volatile, static). Nie pomaga. Coś gdzieś zachodzi na siebie. Zauważyłem, że jaką przypiszę tej zmiennej wartość w przerwaniu, taką ona potem przyjmuje w chwili jeżeli nie spełni się opisywany warunek.
Eee, prościzna - zapomniałeś dać volatile w deklaracji. ;) całkiem poprawnie byłoby: static volatile uint8_t Znak;
zadeklaruj jako static w przerwaniu - jako volatile Zmienne używane globalnie + w przerwaniach powinny być volatile. Wtedy kompilator ci ich nie "zniszczy". Doskonały opis volatile w http://mirekk36.blogspot.com/2011/08/tes...
Hej Niedawno zaczalem programowac PICe i mam pewien problem, kompilator HITECH. Problem jest taki ze na terminal uC wyrzuca jakies niechciane znaki. kawalek kodu: volatile static BYTE str[] = "\nSTART\n"; volatile static BYTE modem[] = "Modem up\n"; volatile static BYTE ef = 'f'; volatile bank1 BYTE TX_pressure[8];...
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);...
Potrzebuję zmiennej lokalnej ale nie ulotnej. Mam kilkanaście procedur które filtrują sygnały i potrzeba mi kilkadziesiąt buforów próbek które oczywiście muszą być niezmienne aby kolejne wywołania funkcji filtrujących poprawnie aktualizowało mi wyjście filtrów. Na razie mam wszystkie zmienne jako globalne volatile ale robi się niezły bałagan. Każdy...
Fajne nie? Prawdziwa jazda zaczyna się jednak dopiero wtedy, gdy takie wskaźniki mają być jeszcze statyczne uint32_t * volatile static ptr; -> ../main.cpp:49: error: expected unqualified-id before 'static' ../main.cpp:49: error: expected initializer before 'static' Ktoś mi to wytłumaczy skoro już przy tym jesteśmy? Czemu "const"...
Witam ponownie, Poszedłem o krok dalej i moim planem jest podłączenie każdego z czterech wtryskiwaczy do osobnego pinu Arduino Uno/Nano z Atmega 328p. Pozwoliło mi to na skonstruowanie programu aby sterować każdym wtryskiwaczem z osobna z tą samą częstotliwością i wypełnieniem, ale sygnał do ich wysterowania jest przesunięty około 90° (problem z rozdzielczością...
Pas. static volatile uint32_t get_counter;
Sorry. testy nie byly po kolei. Teraz juz sa: [syntax=c] volatile int xx = 1; volatile int k; static inline void bitband_str_prepare(void) { asm volatile(" \n" "movw r7, #0x84A8 \n" "movt r7, #0x4225 \n" ); } static inline void bitband_str(void) { asm volatile(" \n" "str r6, [r7] \n" ); } static inline void ram_str_prepare(void) { asm volatile(" \n"...
Cze, W moim programie chciałbym wrzucić pewną tablice stałych (dość dużą, zajęła by ona połowę RAMu w F100RB) do pamięci Flash. Problem polega na tym, że jakoś nie potrafię skłonić linkera do tego aby to uczynił. Testowo deklarowałem trochę mniejszą tablicę w taki sposób: [syntax=cpp]volatile static const char test[2][2][2][10] = {............}[/syntax]...
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, Chcę połączyć ze sobą dwie atmegi po TWI korzystam ze standardowej biblioteki do obsługi sprzętowego TWi tak jak w datasheetach. Jak podłączę jednego AVR do np Ds1307 to obsługa jest ok w dwie strony. Problem mam gdy połączę Atmega32 (master) z Atmega8 (slave) tzn gdy z Atmegi32 wysyłam coś np literkę 'q' to jest ona wrzucana do buf2 i ma się...
Napewno [syntax=c]static volatile uint8_t cnt;[/syntax] Jeśli ta zmienna ma być modyfikowana w przerwaniu.
240 Hz na dwie cyfry na wyświetlaczu powinno być ok. ;) [syntax=c] // zmienne statyczne static volatile _Bool new_key = 0; static volatile uint8_t key; // kod do wstawienia w procedure obslugi przerwania { static uint8_t tdiv; static _Bool was_released = 0; static const keys[] = {tu wpisy kolejno kodz klawiszy}; // powinno byc PROGMEM if ((++ tdiv &...
basemodule.h typedef struct { uint8_t blockParam; uint8_t signedMove; uint32_t deviceInitialAdress; }glob; uint8_t returnBlockParam(void); basemodule.c volatile static glob globalVariables; uint8_t returnBlockParam(void) { uint8_t returningValue = globalVariables.blockParam; rprintf("Returning : %d",returningValue...
sa sobie moje wlasne funkcje do zapisu do EEPROMu: uint8_t *_save_src_adr=0; uint8_t *_save_dst_adr=0; volatile uint8_t _save_length=0; ... void _eeprom_save_block(uint8_t *src,uint8_t *dst,uint8_t length) { while(_save_length); _save_src_adr=src; _save_dst_adr=dst; _save_length=length; EECR|=EECR_EERIE; } ... ISR(EE_RDY_vect)...
Nie dodawałem struktury oraz tablicy do której jest odwołanie w pętli, bo jest spora i nie jej problem dotyczy. [syntax=c]#include "stm32f4xx.h" static volatile uint16_t wyniki[3]; static void MX_DMA_Init(void); static void MX_ADC1_Init(void); while (1) { DP[0].wartosc = 5.f*(wyniki[0])/4096; } static void MX_ADC1_Init(void) { RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;...
Dzięki za biblio ;) Ja korzystam od dawna z bibliotek od Mirka z BlueBooka lekko przeze mnie zmodyfikowanych. Odświeżam temat bo jednak mam problem: http://obrazki.elektroda.pl/2645882300_1... http://obrazki.elektroda.pl/2587616400_1... http://obrazki.elektroda.pl/8131694900_1... http://obrazki.elektroda.pl/2415856600_1...
Cześć, Napisałem program, który miał odtwarzać utwór z karty SD o nazwie o.wav . Program poprawie otwiera plik, jednak ze słuchawka nie wydaje dźwięku... Czy mógłby ktoś sprawdzić mój kod czy nie ma tam żadnego błędu ? Myślałem że same wyprowadzenie odczytanych wartości hex z pliku muzycznego i "wypuszczenie" ich na PWM w zupełności wystarczy, ale widocznie...
chodziło mi o xdata static volatile .... jak nie zerowałem w pętli, albo inaczej ustawiałem to zawsze pozostawały śmieci albo wartości z przed resetu.Może coś źle robiłem.
Witam. Po raz kolejny wracam do tematu przerwań: [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile static uint16_t i; volatile static uint8_t k; // główna funkcja programu main() int main(void) { //**************************** SPRZĘTOWY PWM - 1 KANAŁ OC0 (PB3) ****************************************...
Kod poprawiony w oparciu o to co napisałeś: "Można to zrobić na 2 sposoby: albo modyfikujesz indeks widziany przez przerwanie po odczycie/zapisie (z grubsza tak miał działać kod autora wątku, ale nie do końca tak działał), albo blokujesz przerwania na czas operacji na buforze/indeksie (mało eleganckie)." [syntax=c] // UART1 output buffer #define TXBUF_SIZE32...
Jeszcze o static, const i volatile. Stary wyjadacz objaśnił mi to mniej więcej. "Wal gdzie się tylko da static i się nie martw. Wtedy to będzie nie do ruszenia. Nie ważne gdzie to trafi! A jak wiesz, że na pewno nie będziesz wiedział co jest w danej komórce pamięci bo w sumie niby skąd miałbyś wiedzieć co tam jest, to wal przed volatile." O const mówił,...
Walczę od pół godziny z pojawieniem się transmisji na porcie szeregowym, wymłodzilem taki kod [syntax=c] #ifdef __USE_CMSIS #include "LPC17xx.h" #endif #include <cr_section_macros.h> #include "lpc17xx_uart.h" int main(void) { volatile static int i = 0 ; UART_CFG_Type uart_configstruct; // inicjacja struktury dla UART uart_configstruct.Baud_rate...
Witam. Od paru godzin męczę się z niedziałającym USARTem na atmedze32. Na atmedze88 wszystko śmiga jak ma więc przejściówka USB<->RS232 jest ok. Brak zimnych lutów na płytce. Kwarc zewnętrzny (ustawiony jako EXTHIFXTALRES_258CK_4MS - przy czym nie wiem czy tak ma być dla kwarcu 16MHz). Kod zamieszczam poniżej: [syntax=c] /* * softPWM.c * * Created:...
Potrzebuję pomocy w konfiguracji Timer1 (ten mam wolny) ewentulanie modyfikacja obecnej konfiguracji Timer0. Obecna konfiguracja jest dla odliczania odpowiedniego czasu dla ramek RC5 odbieranych przez odbiornik TSOP322 przy taktowaniu procesora z F_CPU=8MHz, w celu oszczędności energii chcę zrobić odbieranie przy częstotliwości 1MHz. Jak widać z obsługi...
Nie jest to kod niezwykły . Rzecz w tym, że jest to kod pozorny , niczemu nie służy. Zadałem już wcześniej pytanie, co było celem: enkapsulacja, oszczędność, konserwowalność - nie udzieliłeś odpowiedzi. Jeśli rozumiem, przestajesz bronić tezy, że wewnętrzny static magicznie daje oszczędność? .... być może nie jest to potrzebne, ale po co zostawiać...
Wydaje mi się że nie. Ale wstawiłem dla pewności : [syntax=c] ISR( TIMER0_COMP_vect ) { static volatile uint8_t cnt; if(cnt>=pwm1) PORTB &= ~(1<<PB3); else PORTB |= (1<<PB3); cnt++; } [/syntax] I nie pomogło.
Gumis-92: Proszę bardzo :) [syntax=c] #include "LPC11xx.h" #include "uart.h" #include <stdio.h> #define MIN_HALF_BIT 640 // 640 us #define HALF_BIT_TIME 889 // 889 us #define MAX_HALF_BIT 1140 // 1140 us #define MIN_FULL_BIT 1340 // 1340 us #define FULL_BIT_TIME 1778 // 1778 us #define MAX_FULL_BIT 2220 // 2220 us #define RC5_PORT LPC_GPIO3 #define...
Witam Podpinam odbiornik TSOP1736 do atmegi16 zgodnie ze schematem: http://obrazki.elektroda.pl/3599928200_1... Jako nadajnik używam diody LD271. Dioda świeci widać to w aparacie. Do procesora wrzucam kod który generuje mi 36kHz dla diody i odczytuje sygnał z odbiornika. // IR LED is connected to PORTC3, // output of TSOP is connected...
[syntax=c] #define BUTTONS_MASK (M1|M2|M3|M4) static volatile uint8_t pressed[4]; ISR(TIMER0_COMP_vect) { static uint8_t licznik; static uint8_t previous[4]; uint8_t current; if (licznik==0) { // wysyłka SPI MULTIPLEX1_ON; } else if(licznik == 1) { ... } //else ... itd asm volatile("nop"); current = PINA; //sprawdzamy stan portu przycisków pressed[licznik]...
Generalnie w takich przypadkach nota układu twoim przyjacielem. Poczytaj to co napisałem w komentarzach. [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> int main(void) { uint8_t i = 0; DDRD = 0xff; //TCCR2A |= (1<<WGM21)|(1<<WGM22); // źle ten tryb jest zarezerwowany TCCR2A |= (1<<WGM21) // CTC //TCCR2A |= (1<<CS20)|(1<<CS21)|(1<&l...
OK, ale sam program po wyrzuceniu wszystkich dodatków to nadal prawie 500 linii. Więc zamieściłem tylko część inicjującą. Czy coś przeoczyłem? static volatile unsigned char key1=0, key2=0, key3=0, key4=0; static volatile unsigned char odczyt_keys=0; static volatile unsigned char odczyt_time=0; SIGNAL(SIG_INTERRUPT6) { if(!(PINB&0x01))...
Witam, Mam problem z transmisją szeregową na ATMEGA8L. Próbowałem wszystkich znalezionych na forum możliwości ale nic nie pomogło. Może zacznę od połączeń: atmega8l <-> MAX3232 <-> PC MAX-sior (właściwie zamiennik SP3232ECP) podłączony jest według zaleceń datasheet'a. Miedzy MAX-em a PC-tem jest zwykły kabel rs232 (w sensie, że nie przejściówka...
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)...
Witam Próbuję napisać w c++ program do komunikacji z moim mikroprocesorem sterującym mostek H. Warto dodać, że w programie Bray Terminal wszystko działa. W uC wgrany jest program odpowiedzialny za komunikację uart. Komunikację podzieloną mam na ramki. Poniżej fragment kodu odpowiadający za sterowanie mostkiem: [syntax=cpp] #include "usart.h" #include...
Dzięki za odpowiedź. mo make clean mam: "Removing all generated output files from output directory: out/ cs-rm -f out/stm32f10x_it.d out/stm32f10x_it.lst out/stm32f10x_it.o make: cs-rm: Polecenie nie znalezione Makefile:290: polecenia dla obiektu 'clean' nie powiodły się make: *** Compiling file: main.c arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb...
Ok mam wszystko. Utworzyłem nowy projekt, został utworzony taki kod LPCOpen Board Library Project w kodzie jest Board_Init. Mam grzebać w board.c ?
Witam Otóż mam taki dylemat ... Mam taki prosty programik robiący mi za licznik modulo 8. Samo liczenie odbywa się w przerwaniu timer'a ale to nie jest kwestia którą chce poruszyć. Po wywołaniu zewnętrznego przerwania, nie da się go przez czas paru/parunastu sekund wywołać. Czego to może być wina ? (pomijając że moja). Czy przypadkiem nie powinno to...
Potrzebuję zmierzyć czas trwania stanu wysokiego, będzie to wielokrotność 1 us. Wymyśliłem użycie timera TMR16B0 i jego wejścia CT16B0_CAP0 do rozpoczęcia odmierzania czasu lecz nie wiem jak zrealizować poprawnie [syntax=c] #ifdef __USE_CMSIS #include "LPC11xx.h" #endif // obsluga przerwania TMR16B0 void TIMER16_0_IRQHandler(void) { if ( LPC_TMR16B0->IR...
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...
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.
Staram się uruchomić PWM w LPC1768 na kanale 1, wydaje mi się że poprawnie skonfigurowałem PWM lecz na wyjściu P2.0 brak zmiany stanu. Oto mój kod: [syntax=c] #ifdef __USE_CMSIS #include "LPC17xx.h" #endif #include <cr_section_macros.h> #include "lpc17xx_pwm.h" int main(void) { volatile static int i = 0 ; PWM_TIMERCFG_Type PWM_config; PWM_MATCHCFG_Type...
Cześć, potrzebuję zmierzyć częstość rzędu kilkudziesięciu kHz a nie mam oscyloskopu. Zrobiłem coś takiego: AT90S2313 + LCD na PORTB; na INT0 mierzony sygnał a na INT1 50 Hz z sieci przez transoptor i 7414. Powinno działać, ale na LCD widać na zmianę 0 i 1. :( Przebiegi na INT obecne. Nie mam pojęcia, dlaczego nie działa, może ktoś z Was wskaże jakieś...
Witam, mam pewien problem z przerwaniami, otóż zastosowałem przerwanie zewnętrzne do zliczania obrotów i przerwanie timera do zliczania czasu w sekundach, ale po włączeniu przerwań timera, zobaczyłem w debuggowaniu że przerwania zewnętrzne zliczają do około 4. Czy jest to możliwe że przerwania się gryzą ze sobą? Proszę uzupełnić tytuł postu- zgodnie...
Uwagi: Przerwanie timera, a nie ADC, z powodów, o których wyżej była mowa. Wszystkie dane poza wektorem wyników powinny być zadeklarowane wewnątrz procediury obsługi przerwania timera z atrybutem static, a nie volatile, a wektor wartości ADMUX - jako static const. Z kolei zadeklarowanie wektora wyników z atrybutem volatile (hiperpoprawnie) powoduje...
Stad też często dla celu debug stosuje się optymalizację na poziomie 1 (O1) lub nawet 0 (O0). Ja wolę zadeklarować jako static a czasem aby śledzić stan w pracy krokowej trzeba jeszcze dodać volatile. Czyli na okrętkę robisz to co robi -O0. static wprowadza tyle różnic w stosunku do normalnej deklaracji zmiennej, że powstaje pytanie o sens takiego...
Witam, chciałbym odkopać temat, ponieważ jest on jedną z wielu części mojej pracy dyplomowej. Średnio radzę sobie ze zrozumieniem idei równania Nersta. Widziałem we wcześniejszych postach równanie postaci: E = Eo - k*T*pH, gdzie: (właśnie z tym mam problem...) 1. rozumiem, że E to nasze napięcie na wyjściu wzmacniacza elektrody, czyli to które podawane...
Dzień dobry! Poniżej kawałek kodu, trochę nie ociosany, co prawda, ale może rzuci jakieś światło na problem. [syntax=c] #include <stdio.h> #include <string.h> #include "stm32f4xx.h" #include "FreeRTOS.h" #include "task.h" #include "timers.h" #include "semphr.h" #include "misc.h" /* moje */ #include "sine.h" #include "timer.h" #include "leds.h"...
Dziękuję wszystkim za podpowiedź i tłumaczenie. Nie chcę zakładać nowego tematu ale mam kolejny problem z tym że tu już tak łatwo mi nie będzie A włąśnie powinieneś, ponieważ temat jest zupełnie inny niż poprzedni. Post wydzieliłem do nowego nadając właściwy tytuł. In file included from C:\Users\Piotrek\Documents\Arduino\K...
Witam mam problem z "pożenieniem" tego wszystkiego funkcja odbierająca stream [syntax=c]void HAL_UART_RxCpltCallback(UART_HandleTypeD... * uart) { if (esp_recv_char == esp_pattern[esp_char_counter]) { esp_char_counter++; if (esp_char_counter == 5) { esp_recv_mux = uart_read_char(uart); uart_read_char(uart); char length_str[5]; char current_char = 0;...
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...
Może coś takiego: [syntax=C]//****************************... // +--+ // | ++----+ // +-++ | // | | // +-+--+ | // | +--+--+ // +----+ Copyright (c) 2009 Code Red Technologies Ltd. // // Microcontroller Startup code for use with Red Suite // // Software License Agreement // // The software is owned by Code...
Nie można. Co da ci to, że Timer1/2 zrobisz static? To musi być volatile. Natomiast istotnie, trudno pomóc, jeśli nie wiadomo w czym jest problem :)
static volatile DWORD Timer1, Timer2; z kolei DWORD to: typedef unsigned longDWORD; probowalem tez wpisywac dokladnie takie same wartosci ja Ty w Twojej funkcji i nic nie pomogło pozatym do obslugi przerwania ustawilem migajaca diodke, jesli sie nie myle od razu po wywolaniu funkcji: SysTick_Conf(); powinno to przerwanie sie generowac co 10ms a wogole...
Cześć, Mam taki fragment kodu: [syntax=c] static const volatile uint32_t systick = 0; uint32_t GetTimeUs(void) { return systick; } void HAL_SYSTICK_Callback() { systick++; }[/syntax] który się nie kompiluje, dostaję taki błąd kompilacji. [syntax=c]../Application/Time.c:31:19: error: increment of read-only variable 'systick'[/syntax] Z tego co wiem powinno...
https://github.com/diymat/ARM-blog-libra... co prawda do ARM ale przerobić sobie do użycia na AVR to nie problem. Biblioteka z callbackami i 5 stanami key-up key-down, click, długi click i double click. [syntax=c] static volatile BUTTON_Status_T Buttons[NKEYS]; [/syntax] Volatile dla całej tablicy struktur. To już świadczy o kiepskiej...
#include <inttypes.h> #include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> #include "lcd.c" #define LED_ON (PORTB|=(1<<4)) #define LED_OFF (PORTB&=~(1<<4)... #define LCD_LIGHT_ON PORTB|=_BV(6) #define LCD_LIGHT_OFF PORTB&=~_BV(6) #define...
Napisałem program bez użycia LPC175x_6x CMSIS-Compliant Standard Peripheral Firmware Driver Library, który co 1 s ma zmieniać stan P3.25 na przeciwny. Do pinu P3.25 podpięta jest dioda dzięki czemu mogłem zaobserwować zmiany i zmierzyć czas. Jednak moje obliczenia nie pokrywają się z wynikiem wykonywanego programu: [syntax=c] #ifdef __USE_CMSIS #include...
ciastek4 : Ale po co ukrywanie zmiennej globalnej, skoro ona właśnie ma być widoczna w innym module. Wiem. Może nie jasno się wyraziłem. Moje stwierdzenie wczesniejsze jest odpowiedzia na pytanie w 1 poście: Czy jest jakis sposob zeby kompilator to normalnie skompilowal zeby nie pisac tego w asemblerze ? Odpowiedź : usuń static w deklaracji zmiennej....
Mój program przedstawiam poniżej, widać że komunikacja i2c działa bo 2CSlaveBuffer I2CWriteLength = 2 zamiast I2CWriteLength = 3. Kiedy miałem 3 otrzymywałem same zera - nie rozumiem przecież zgodnie z tym co pisałeś wysyłam adres 0xD0, adres poczatku pamięci 0, i ponownie adres 0xD0 + 1 czyli 3 ośmiobitowe dane.
Witam Udało mi się rozwiązać problem . Układ działa poprawnie . Może komuś się przyda moje rozwiązanie ? ISR ( ADC_vect) { volatile static unsigned char adc_a ; adc_a ++ ; if(adc_a == 2) {tab_prad [ adc_b ] = ADCH ; adc_b ++ ; if(adc_b >3) adc_b = 0 ; ADMUX |= _BV(MUX0) ; } if( adc_a >3)...
Mam taki (niezrozumiały dla mnie) przypadek: - wewnątrz procedury main() definiuję zmienną strukturalną beż żadnych modyfikatorów typu volatile, czy static; - programowo wypełniam jej pola wartościami; - z main() wywołuję inną procedurę zewnętrzną, do której przekazuję adres tej struktury, np. func(&struktura) - func() jest przystosowana do otrzymywania...
Hej. Pacjent to STM32F401VCT6 taktowany domyślnym zegarem wewnętrznym 16MHz. Uruchomiłem sensor HC-SR04 wykorzystując TIM2 do zliczania długości impulsu ECHO wykorzystując tryb capture oraz DMA. Do rejestru TIM2->PSC ładuje 15, ponieważ chcę aby wartość CNT inkrementowała się co 1us. Kod źródłowy poniżej: [syntax=c] #include "stm32f4xx.h" static...
1. Komentuj bogato swój własny kod, bo sam się w nim pogubisz, a i nam trudniej analizować, nie wiedząc co chcesz w danym fragmencie zrobić. 2. deklarujesz zmienną globalną cod , w przerwaniu nadajesz jej wartość cod=code : 2a. ale jej nie używasz w pętli głównej i nigdzie indziej - do czego więc jest? 2b. aby ją wykorzystać w pętli głównej cod musi...
Kod funkcji włączania i wyłączania np. diody Ten kod będzie powodował, że po pełnym zapaleniu dioda z powrotem zgaśnie i zacznie się rozjaśniać. Linijka z ifem nic nie robi, bo wartość byte nie może być mniejsza od zera ani większa od 255. Poza tym po wciśnięciu przycisku będzie dodawana nowa funkcja przerwania onLamp() bez usuwania starej i będą ze...
Witam, Otóż zainteresowałem się nauką obsługi uC LPC1114/302. Chciałem skonfigurować 3 kanały, na których uruchamiam funkcję PWM na jednym timerze (CT32B1). Do tej pory udało mi się skonfigurować dwa porty : PIO1.1 PIO1.2 ( co widać na Logic Analyzerze) . Nie potrafię wskazać błędu przy PIO1.4. Czy ktoś mógłby prześledzić kod i ew. wskazać błąd ? http://obrazki.elektroda.pl/4923883700_1...
Wstawiam poniżej kod programu. Gdy w programie obsługuje tylko adc problem wyglada inaczej. Gdy wzrasta napiecie na jakimkolwiek pinie to następuje interakcja z dwoma pozostałymi analogami. [syntax=c]volatile uint16_t a; volatile uint16_t b; volatile uint16_t c; static volatile uint16_t wyniki[3]; int main(){ fpu_enable(); system_init(); pll_start(CRYSTAL,...
Pod względem oszczędzania mocy powinieneś oszczędzać instrukcje. 1. Niepotrzebna zmienna sleep i jej obsługa. 2. Wielokrotnie wpisujesz wartości rejestrów w pętli (przykładowo ADMUX). Wystarczyłoby chyba zrobić to przed pętlą 3. int x = ADCret(); tego też raczej kompilator nie ma szans zoptymalizować. Lepiej użyć zmiennej globalnej. 4. static volatile...
To co niżej zasugeruje nie musi Ci pomóc ale spróbuj wykonać. Zmienną globalną zadeklaruj jako: static volatile DATACNT W ten sposób powiesz kompilatorowi aby ochronił jej stan przed przypadkową modyfikacją. Z problemem nie panowania nad wartością zmiennej globalnej sam biłem sie tracąc czas i nerwy. Jak się okazało przerwania powodowały nadpisywanie...
static uint8_t onewire_0_reset(void) ; static void onewire_0_WriteByte(uint8_t data); static uint8_t onewire_0_ReadByte(void); #define WIRE_PORT_0 PORTC #define WIRE_DIR_0 DDRC #define WIRE_PIN_0 PINC #define WIRE_CON_0 3 union int16_t_LSB_MSB { struct { uint8_t LSB; uint8_t MSB; }; int16_t XSB; }; union...
Dodałem zapamiętywanie obsługi sygnałów przed wywołaniem Sequencera, i przywracanie oryginalnego stanu po jego zakończeniu - ale nadal jest SIGSEGV. [syntax=c]#include "epicsThread.h" #include "iocsh.h" #ifndef _XOPEN_SOURCE #define _XOPEN_SOURCE 500 #endif #include "extcode.h" #include <signal.h> #include <stdio.h> #include <unistd.h>...
Faktycznie, temat podlinkowany przez Badmaneq opisuje problem identyczny z moim. Dodałem (a przynajmniej tak mi się wydaje) CMSIS do przestrzeni roboczej, i próbuje kompilować poniższy kod: http://obrazki.elektroda.pl/5455950100_1... Może projekt źle utworzyłem? Tzn nie widzi on folderów które są nad nim w project explorerze? Start kwarcu...
Witam. "Przerabiając" książkę p. Tomasza Francuza "Język C dla mikrokontrolerów AVR" natknąłem się na problem obsługi klawiatury matrycowej w przerwaniach. Klawiatura ma wykorzystywać kolejne ustawianie stanu niskiego na pinach na potrzeby multipleksowania. Niestety wciskanie przycisków klawiatury nie powoduje żadnej reakcji. Co ciekawe (dla mnie) po...
Witam. Krótko, program pobiera z rs 8 bajtów(w pętli while ) ,bajt 1 i 2 wpisuje na pwm a w T2 wysyła prędkość a problem polega na tym że w debuggerze po włączeniu sei program nie chce przejść do linii, gdzie rozpoczyna się pętla while i nie wiem dlaczego (nie działa nawet gdy nie ma ustawionych żadnych rejestrów )(zew kwarc 4mhz). Z góry dziękuję za...
funkcja main zawiera tylko nieskończoną pętlę z definicją zmiennej, aby sprawdzić, czy debugger zatrzyma się na zaznaczonym breakpoincie, niestety tak się nie dzieje. Zdefiniuj zmienną static albo globalną, z atrybutem volatile lub wyłącz optymalizację.
volatile short unsigned int bufor[314]; volatile uint8_t flaga; static uint8_t x=314; ISR(ADC_vect) { if(flaga-==1) bufor[x]=(ADCL | (ADCH<<8)); x--; if(x<1) flaga=0; } ... int main(vpid) { short unsigned int bufor2[314]; ... sei(); ... //Włączenie...
Nie możesz odczytywać kilka razy pod rząd ADC, bo w trybie konwersji ciągłej może się zdarzyć, że wartość zmieni się w trakcie Twojej zamiany. Jeśli np. zmieni się z 99 na 100, to wyświetlisz 199. % 1000 % 100 to też to samo, co %100. Nie ma też sensu zmieniać wartości wyświetlanej aż tak często - do odczytu przez człowieka max. kilka razy na sekundę....
(at)Badmaneq: Moją funkcje SystemInit mam w głównym pliku projektu, tam gdzie jest funkcja main. I wywołuję ją zaraz po wejściu do main. To gdzie mam wrzucić SystemInit ? (at)BlueDraco: Czy w tym numerze Elektronika Praktyczna 2014/4 "32 bity jak najprościej. STM32F0 - nieblokująca obsługa wyświetlacza LCD ze sterownikiem rodziny HD44780. cz. 4" znajduje...
Taki zapis ( definicja )powinien być w jednym pliku C (zmienna globalna) volatile unsigned char stan = CZEKAJ; w pliku headera (chyba sensor.h) tylko deklaracja extern volatile unsigned char stan; w żadnym wypadku nie można dawać w headerze (pliku *.h) includowanym do wielu plików *.c definicji zmiennej statycznej static unsigned char stan = CZEKAJ;...
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,...
Uwaga! 1) Jeżeli zmienną licznik będziesz miał zadeklarowaną wewnątrz funkcji obsługującej przerwanie to przykładowa deklaracja powinna wyglądać tak: static uint8_t licznik = 0; 2) Jeżeli natomiast zmienną licznik zadeklarujesz gdzieś w programie głównym, wtedy powinieneś ją przykładowo zadeklarować jako: volatile uint8_t licznik = 0; po co te "przedrostki"...
Dotychczas obsługiwałem panel dotykowy badając w pętli głównej stan pinu z przetwornika TSC2046 działało to dobrze dopóki kod w pętli głównej się nie rozrósł. Wpadłem na pomysł, żeby podpiąć pod przerwanie lecz co prawda dotknięcie jest sygnalizowane ale kiedy nadal trzymam dotyk i przesuwam po ekranie brak reakcji. Oto mój kod: [syntax=c] uint8_t stan_TP...
Interesuje mnie jak napisać kod korzystając z makra RAMEND które od razu uzupełni rejestr Y. No przecież już go napisałeś: static void __start(void){ asm volatile ( "out __SP_L__, %A0" "\n\t" "out __SP_H__, %B0" "\n\t" "clr __zero_reg__" "\n\t" "out __SREG__, __zero_reg__"...
W AVR306 mozna znalezc taki kod obslugi USARTA dla atmegi128: #include <avr/io.h> #include <avr/iom128.h> #include <avr/ina90.h> /* UART Buffer Defines */ #define USART_RX_BUFFER_SIZE 128 /* 2,4,8,16,32,64,128 or 256 bytes */ #define USART_TX_BUFFER_SIZE 128 /* 2,4,8,16,32,64,128 or 256 bytes */ #define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE...
Error message from debugger back end: value has been optimized out To chyba wszystko tłumaczy. Zmniejsz poziom optymizacji albo zrób je tymczasowo static lub volatile. Ja czasami w czasie debugowania, jak nie jest to problem, robie z volatile aby przy kazdej operacji zapisywane były w pamieci. Proponuje zapoznać się z poradnikiem kolegi szczywronka...
KEY=((PIND & 0x01) & 1); 1. Nazw zmiennych zwyczajowo nie pisze się wielkimi literami 2. Wystarczy: key = PIND >> NR LINII PRZYCISKU & 1; - w ten sam sposób dla każdego przycisku. 3. Nie ma sensu deklarować zmiennych związanych ze stanem przycisków poza procedurą przerwania timera, bo nie są one nigdzie więcej potrzebne. Zmienne keystate powinny mieć...
Tak krótki komunikat można obsługiwać w przerwaniu od odbiornika UART. Przykładowo, kiedyś robiłem tak: [syntax=c]// Przerwanie odbiornika ISR( USART_RX_vect ) { static volatile uint8_t i=0; uint8_t znak; znak = UDR; // pobranie znaku z bufora sprzętowego switch(stank) { // Jeśli pojawi się znak $ pobierz komunikat case 1: if(znak=='$') stank=2; else...
To jest w PCint.h #include "pins_arduino.h" volatile uint8_t *port_to_pcmask[] = { &PCMSK0, &PCMSK1, &PCMSK2 }; static int PCintMode[24]; typedef void (*voidFuncPtr)(void); volatile static voidFuncPtr PCintFunc[24] = { NULL }; volatile static uint8_t PCintLast[3];...
Chciałbym aby program wiedział ile zajmuje pamięci flash. W asm było to proste, to co umieściłem w ostatniej linijce kodu źródłowego (np tekst "END OF CODE", zajmowało ostatnie bajty pamięci, w C tak nie jest, bo w przypadku AVR-GCC teksty znajdują się zaraz za wektorami przerwań. Na szczęście, funcje z sekcji ".fini" znajduja się na końcu kodu: [syntax=avrasm]...
U mnie (Katowice) z DCF77 nie ma problemu, oczywiście zdarza się, że przez jakiś czas nie działa, ale przecież nie musi - wystarczy że złapie sygnał od czasu do czasu. Z tego co zauważyłem, to strasznie przeszkadza w odbiorze DCF77 komputer. Kiedy miałem zasilane układy przez USB to generalnie był problem, gdy je zasilałem osobno - z sieci lub z baterii...
static volatile volatile przerwać static routing
stukać włączyć karta zielonka teflonowa taśma
kalibracja hydrostatu nagłośnienie szkole
Tranzystor ГТ7: Charakterystyka i Zamienniki Enkoder do kuchenki mikrofalowej Zelmer 29Z010 - jaki wybrać?