Kiedyś stosowałem volatile zarówno do struktury jak i do pól (przezorność :] ). Jednak wystarczy do pól. Chyba, że wszystkie mają być tego typu. http://www.elektroda.pl/rtvforum/topic16...
Jeśli struktura jest volatile to każde jej pole również ma taki atrybut. Swoją drogą, pomyśl czy nie przejść na C++ - nie chodzi mi tu o wykorzystanie obiektów, szablonów itd., ale samej składni języka, IMHO o wiele lepszej niż składnia C. Na wstępie odpadają te wszystkie typedefy i struct zmienna, w dodatku można naturalnie przekazywać zmienne do...
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,...
Zrobienie ze wszystkich pól volatile nie jest dobrym pomysłem z trzech powodów - pierwszy - po co pisać 10x volatile skoro można raz. Drugi jest bardziej subtelny - zdefiniowanie struktury z polami volatile powoduje, że nie jest możliwe stworzenie zmiennej o takim typie, ktorej pola nie są volatile. A to może się przydać - np. skopiujemy oryginalną...
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...
Trawić w tym kodzie nie ma zbytnio co: struktura jest tylko żeby nie trzeba było za każdym razem przekazywać oddzielnie 3 wskaźników i maski bitu. Aby uzyskać dostęp do rejestru, są tylko dwa sposoby: statyczny kiedy kompilator zna adres rejestru i może go wkompilować do kodu, albo dynamiczny, kiedy kompilator nie zna adresu. Drugie rozwiązanie opiera...
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...
No to próbuję: [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc 11059200 i okrojony program #include <avr/io.h> #include <avr/interrupt.h> //! Pin mappings #define CHMAX 6 // maximum number of PWM channels #define PWMDEFAULT...
Cześć! Otóż mam spakowaną strukturą (atrybut packed ) która jest volatile . I tutaj mam problem ponieważ kompilator wyrzuca mi następujący warning gdy jje używam (przypisuje coś do niej): multiple accesses to volatile structure member because of packed attribute No właśnie, o co chodzi? Domyślam się że jest zgrzyt gdy pakowana struktura jest volatile,...
https://obrazki.elektroda.pl/3589381800_... Niedawno przedstawiłem wnętrze taniego smartbanda z interfejsem BT, kolorowym wyświetlaczem i kilkoma funkcjami typowymi dla tego segmentu https://www.elektroda.pl/rtvforum/topic3... Teraz opiszę jak zabrać się za programowanie tego układu. Opaską steruje SoC DA14585 firmy Dialog...
https://obrazki.elektroda.pl/7417895700_... Motywacja Jeden ze znajomych poprosił mnie, aby taki śmieszny pad na USB (kształtem przypominający dżojstik od konsoli NES) https://obrazki.elektroda.pl/5837949700_... https://obrazki.elektroda.pl/8178021400_... przerobić tak, aby dało się go podpiąć właśnie...
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...
Cześć, Napisałem poniższy program do obsługi zegara elektronicznego, w zaprogramowanym czasie wyświetla kolejno czas (hh:mm) oraz temperaturę na wyświetlaczu 7-segmentowym. [syntax=c]#include <Adafruit_BMP280.h> #include <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> #include <avr/io.h> #include <avr/interrupt.h>...
Może mój przykład został źle dobrany, ale poprawienie ISR'a lub usunięcie powoduje generowanie identycznego kodu wynikowego, więc problem dalej występuje. Generalnie zmienne, które nie są volatile, nie powinny być używane do komunikacji program-przerwanie (mimo że wiele osób, w tym ja czasami tak robi, tyle że u mnie odnosi się to co najwyżej do tablic)....
Temat ucichł i pozostały pytania bez odpowiedzi, to może przybliżę kolegom działanie espnow z wifi. I przytoczę działający przykład takiego połączenia. Nigdzie w oficjalnych źródłach nie doczytałem, że espnow nie działa z wifi. Spotkałem się tylko z opiniami, że transmisja espnow przestała działać po podłączeniu odbiornika slave do wifi. I to też jest...
Witam, Temat dotyczyć będzie warninga w WinAVR o treści: passing argument 1 of '<nazwa_funkcji>' discards qualifiers from pointer target type Do funkcji przekazuje zmienną typu volatile za pomocą referencji. struct struktura { volatile char x; } volatile struct struktura zmienna; Funkcja(&zmienna); Sama funkcja wygląda tak:...
W sumie to nie wiem co gorsze. Czy brak const czy większość zmiennych volatile. Nie ma sensu wybierać i się ograniczać - `const volatile register void * const * volatile * (register ptr Niektórzy idą dalej i stosują volatile nie tylko w stosunku do buforów ale również całych struktur danych (nawet tablic struktur:)). W końcu to embedded i musi być...
(...) no), może być np #define LED A3, gdzie A3 jest odpowiednikiem zarówno DDRA |= (1 << PA3), PORTA |= (1<<PA3) jak i PINA & (1<<PA3). Umożliwi to definiowanie tablic pinów (np. do sterowania wieloma ledami) jako: const uint8_t pinLED Tworzenie takiego frameworku dla AVR GCC, który pozwalałby na wygodny dostęp do poszczególnych...
A czym niby różni się struktura czy tablica od innej zmiennej? Atrybut volatile działa w każdym przypadku tak samo. Zdecyduj, czy potrzebujesz atrybutu volatile dla argumentu funkcji. Jeśli tak - zadeklaruj argument funkcji jako volatile. Jeśli nie - zrzutuj typ przy wywołaniu funkcji.
Dziękuję za odpowiedzi na mój problem. Zmusiły mnie do poczytania literatury i głębszego zastanowienia się nad problemem. Przyznam że nie wszystkie wypowiedzi zrozumiałem do końca. Na mój dzisiejszy stan wiedzy wymyśliłem następujące może trochę niezbyt eleganckie rozwiązanie. Dodałem do struktury dwa pola i teraz wygląda tak: [syntax=c]struct PozycjaMenu...
Witam Mam problem z rozszyfrowaniem działania tego kodu: typedef struct pojedyncze_bity { unsigned char bit0: 1; unsigned char bit1: 1; unsigned char bit2: 1; unsigned char bit3: 1; unsigned char bit4: 1; unsigned char bit5: 1; unsigned char bit6: 1; unsigned char bit7: 1; }pole_bitowe ; #define T_BIT(adr)...
Witam. Parę pytań, przemyśleń, proszę o wypowiedzenie się. Temat dotyczy programowania embedded C głownie mikrokontrolerów raczej większych 32 bitowych. 1. Stosowanie wielu zmiennych globalnych jest bee Czy w świecie embedded bez dynamicznej alokacji pamięci da się inaczej? Zakładając, że mamy jakieś stałe duże struktury globalne (zawierające mnóstwo...
Jednak się da, bez konieczności tworzenia osobnych struktur i wpisywania nazw tych struktur w inicjalizacji innych struktur :) Nie wiem czy wszystkie kompilatory to zaakceptują.. typedef struct { u8 flags; // BTN_TRANSPARENT | BTN_TOGGLE | BTN_VISIBLE u16 y_size; u16 x_size; const u8 *file; } btn_vars_t; // STALA struktura we flashu... typedef...
Źle rozumiesz pojęcie atomowości przy dostępie do zmiennej. Instrukcja "v--" składa się z dwóch odwołań do zmiennej v: odczytu oraz zapisu. Dostęp jest atomowy, nie cała instrukcja zawierająca ten dostęp. To co zacytowałeś mówi mniej więcej tyle, że odczytując zmienną mającą 4 bajty kompilator użyje instrukcji ldr aby odczytać całość w jednej instrukcji,...
Witaj Jacku. masz świadomość, że przekazujesz strukturę przez wartość, tzn od tej pory oryginał i kopia żyją własnym życiem? Masz twarde powody aby nie użyć np const & ? Tak, mam świadomość. Niestety nie mogę użyć ani referencji ani wskaźnika, ponieważ mam podefiniowane wszystkie piny procka w postaci: #define PA7 = { .PORT = &PORTA, .PIN = &PINA, .DDR...
robisz w main: volatile int i=0; w stm32f4xx_it.h (czy jak tam się nazywa ten header z funkcjami przerwań): extern volatile int i; Zrobiłem jak kazałeś Struktura projektu została wygenerowana przez Atollic'a. To, że z błędu nic nie wynika to właśnie mój problem. Z tego co wyczytałem w różnego rodzaju kursach jeżeli chcemy mieć dostęp do zmiennej w...
Witam Poszukiwałem rozwiązania mojego problemu już po forum ale nie znalazłem rozwiązania, a problem wydaje mi się dosyć prozaiczny aczkolwiek nie umiem go samodzielnie rozwikłać. Mianowicie posiadam w programie prostą strukturę zadeklarowaną jako: [syntax=cpp] struct godzina { uint8_t sek; uint8_t min; uint8_t godz; }; volatile struct godzina TimeOn,...
Michałko twórz przykład wydaje się być pomocny. Jeśli chce te zmienne obrabiać w main to mam je zdefiniować jako extern voliatile? W main ma być widoczna struktura Settings, w nagłówku masz juz przykład [syntax=c]extern settings_t Settings; [/syntax] i gdzieś w kodzie musi wtedy być [syntax=c]settings_t Settings;[/syntax] jeśli volatile jest potrzebne...
1. if'y po przekroczeniu 60 sekund / minut nie zwiększają o jeden, tylko ustawiają na jeden następną jednostkę (minutę / godzinę). Próbuję zgadnąć, czy tego chciałeś. Zerowanie w else mnie tez nie przekonuje, raczej w else po wojskowemu 'nie ma rozkazów, nic nie rób'. Nie wiem jaki był zamiar, ale ta arytmetyka mi się nie widzi. Być może z dwoma a nie...
Witam, dzisiaj miałem czas na zgranie kodu i wyrzucenie z niego tego co nie dotyczy tematu: Dodano po 7 Przepraszam za dziwne znaki w komentarzach ale przerzucałem z Windowsa na Linuxa i nie konwertowałem kodowania. Będę wdzięczny za pomoc. Sławek
#include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/pgmspace.h> int g=0; volatile c=0; SIGNAL (SIG_INTERRUPT1) { if (c==0) c=1; else c=0; } main(void) { PORTB=0xf0; DDRB=0x0f; PORTD=0x0c; DDRD=0xf3; while(1) { GIMSK...
No właśnie cały czas wyświetlacz wyświetla mi 0. Wcześniej miałem 1000 ms opóźnienia ale to niczego nie zmieniało Dodano po 51 Podokładem trochę tych delay, ale wyniku na wyświetlaczu to nie zmieniło [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include...
Tam kod pomieszałem i tego Bank1_SRAM3_ADDR niema: Dodano po 7 Mógł byś pokazać jeszcze jak odwołujesz się do pamięci w trakcie zapisu i odczytu ? Dodano po 24 Coś się chyba rozsynchronizowuje, ponieważ przy takim kodzie: Dodano po 25 Dla testu ustawiłem tak: [syntax=c]FSMC_Bank1->BTCR[1] = 0x0fffffff; FSMC_Bank1E->BWTR[0] = 0x0fffffff;[/syntax] I teraz...
Witam! Mam problem z timerami w języku C (w moim projekcie) dlatego zwracam się do Was o pomoc. Napiszę od początku, żeby przedstawić o co mi chodzi. Zbudowałem kiedyś sterownik taśmy led RGB oparty na mikroprocesorze attiny2313, w którym za pomocą jednego przycisku zmieniam podstawowe kolory na pasku ledowym (czerwony, zielony, niebieski) oraz ich...
Witam, mam dwa pliki projektu w C: interrupt. i main.c (dla uproszczenia). interrupt.c: static volatile TFrame Frame ={0}; SIGNAL (SIG_INTERRUPT0) { (...) //m.in. zmienia sie struktura Frame } main.c: extern TFrame Frame; void main (void) { (...) sei(); while (1) { if (Frame.state...
To zamiast RTC.CNT wpisz tylko RTC, wtedy pojawi ci się znacznik, że jest to struktura (taki plusik) i będziesz mógł ją rozwinąć, obserwując wartości jej pól. Niewykluczone, że zadziała też RTC_CNT. Właśnie niestety nie działa. Zarówno wpisanie RTC, RTC_CNT czy PMIC_CTRL w oknie watch zwraca: Unknown identifier Potrzebuje tej funkcjonalności gdyż chciałbym...
Mam problem z uruchomieniem prostego programu na ATMEGA8. Mega jest podpięta z SN75176 (odpowiednik MAX485) i mam podłączone dwie takie płytki. Każda płytka ma przycisk i element wykonawczy (triak). Program ma za zadanie zbierać informacje z sieci (gdy wciśniemy przycisk na płytce B, powinien się załączyć triak na płytce A i odwrotnie) i w razie potrzeby...
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...
A spróbuj to: [syntax=c] /* Program do przetwarzania sygnału z 6 sygnałów 1-2ms (do sterowania serw modelarskich) na wypełnienie PWM. kwarc 11059200Hz procesor ATMega8 Wypełnienie PWM- 0 w okolicach sygnału 1.5ms Zwiększa się od 0 do max w zakresie 1.5-2ms Zwiększa się w zakresie 1.5-2ms od 0 do max Co 20us sprawdzamy stan pinów PORTB na który są podawane...
Programowy PWM jest w nocie Atmela 136. Deklarują że obsłuży do 23 kanałów. Przerobiłem ten program- sterowanie jest z sygnałów serw- czyli sygnał 1-2ms jest przerabiany na PWM. Wklejam- ale ew. przeróbkę to zrób sam- albo "z małą pomocą przyjaciół". Bo ja- to po nowym roku. [syntax=c] /* \section OA Original author Andy Gayne is the original author...
Witam, skonstruowalem zegar widmowy, udalo mi sie zaprogramowac napis (wyglada przyzwoicie) ale pojawil sie problem, wyswietla mi sie, tzn gdy wlaczam diody na wyliczonych pozycjach (do 60) jest okej, natomiast gdy probuje wyswietlic cos na wyzszych katach (powyzej 60) jest problem i nie wyswietla sie nic, dziwna sprawa bo programowo robie tak samo...
Struktura ma w pliku stm32f4xx_rcc.h , jest to systemowy plik płytki. [syntax=c] typedef struct { uint32_t SYSCLK_Frequency; /*!< SYSCLK clock frequency expressed in Hz */ uint32_t HCLK_Frequency; /*!< HCLK clock frequency expressed in Hz */ uint32_t PCLK1_Frequency; /*!< PCLK1 clock frequency expressed in Hz */ uint32_t PCLK2_Frequency; /*!<...
Jest taka nota Atmela 136. Jest tam opisane jak zrobić wiele kanałów PWM z pomocą jednego timera 8bit. Zrobiłem to na ATMega8- sterowanie sygnałem takim jak dla serw 1-2ms. Plik .c [syntax=c] //* \section OA Original author //* Andy Gayne is the original author of this application note. //*/ //program z noty Atmela 136 //przerobiony na ATMega8, kwarc...
Witajcie, mam problem nad którym siedzę juz kilka dni i zatrzymałem się nie wiedząc gdzie tkwi problem. Otóż chcę obsługiwać zegar RTC PCF8563 po I2C - czytać i zapisywać z niego dane (datę i czas). Projekt mam podzielony na kilka plików, całość pisana w Code Blocks 10.5 i kompilowana w AVR GCC. Mam zdefiniowaną strukturę do zapisu danych z zegara do...
Nadajnik (xmega 128a3, TRYB = 1): [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> #include <string.h> #include <avr/pgmspace.h> #include <stdbool.h> #include "SPI.h" #include "nRF24L01.h" #include "nRF24L01_memory_map.h" #include "twi_master_driver.h" #include...
No niestety, ale zakomentowanie linii main.c powoduje błędy w czasie kompilacji: **** Build of configuration Debug for project LPC17_CAN_LedControl **** make all Building file: ../src/main.c Invoking: MCU C Compiler arm-none-eabi-gcc -D__REDLIB__ -D__BUILD_WITH_EXAMPLE__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv1p30_LPC17xx -I"C:\Users\...\Documents\lpcxp...
Witam! Mam troche amatorskie pytanie, ale nie mogę się połapać co robię nie tak.. Miałem swój działający program kompilował się normalnie, ale gdy zrobiłem sobie make clean i chciałem go na nowo skompilować za pomocą make, to już przestał się kompilować :shocked!:, czego nie rozumiem teraz generalnie dostaje błąd: [syntax=bash]/home/tomek/Pobrane/FreeRTO...
excray - pomęczyłem wczoraj te procedury. I jestem zachwycony! Plusy: - potrzebują mało zasobów Minusy: - trzeba uważać, żeby prawidłowo rozpisać wszystkie stany automatu Rozwiązanie zaproponowane w moim pierwszym poście (niestety nie padła odpowiedź czemu tak się ono zachowuje), drugie rozwiązanie tego Niemca oraz rozwiązanie zaproponowane przez Kolegę...
https://obrazki.elektroda.pl/5009750700_... Witajcie moi drodzy Oto druga część mojego praktycznego tutoriala dla ośmiobitowego mikrokontrolera PIC18F2550 od Microchipa i programatora SDCC . W tym temacie omówię podstawowe operacje cyfrowego IO na prostych przykładach. Spis części (osobnych tematów) tutoriala Tutorial podzielony jest...
No bo teraz musisz zmienną zadeklarować w pliku .c, o czym pisaliśmy już z 5x. Warning jest od tego, że volatile przy definicji struktury jest zbędny. 4\/3!!
volatile przerwać typedef volatile obiekt volatile
wykonać ścieżek oporowy arduino zegar matryca poduszka fotelu astra
wzmacniacz rduch wzmacniacz rduch
Zmywarki z pokrętłami: Bosch, Electrolux, Beko, Amica Dławienie nowego silnika skutera 4T 80 cm³ na zimno