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...
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,...
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)....
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,...
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...
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ą...
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!!
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.
Zmien: [syntax=c] SetCVD(capar[i].excaplow, capar[i].caplow); [/syntax] Kolejna sprawa, wyrzuc const z deklaracji bo nie bedziesz mógł zmieniać wartości w strukturze. Poczytaj również o tym kiedy się używa volatile (w twoim wypadku najprawdopodobniej jest niepotrzebne).
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:...
Ale tu nie mówimy o tym jak konkretny kompilator, na konkretną architekturę ma to rozwiązane. Być może avrgcc tak właśnie postąpi. Jego prawo. Ale nie obowiązek. Dlatego nie zgodziłem się z twierdzeniem kol JacekCz Mówimy o tym co gwarantuje volatile. A to wynika bezpośrednio ze standardu języka C. A tam nie ma nic o tym jakoby takowej zmiennej nie...
Te twoje trzy wskaźniki uimeść w unii - bedziesz miał jeden wskaźnik, do którego odwołasz się przez pola unii. W sturktudrze można użyć volatile i można takiemu polu przypisać zmienną nie-volatile.
Sprawdziłem. Zmieniłem flagi ze struktury na zwykłe volatile. Bo nie wiem czy to struktura ma być volatile czy jej elementy. No i stałe wypełnienie- jakieś 80%. Powinno reagować na zmianę długości sygnału- a nie reaguje. Patrzę- no i powinno być dobrze. A nie jest.
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ć...
Dzięki za zainteresowanie. Dodałem do struktury volatile. Spowodowało to tylko, że podczas przepełnienia licznika Timera2 3 pierwsze segmenty gasną, a na ostatnim pojawia się 1. Natomiast po usunięciu linii "toDisplay[0] = 0xBF;" segmenty są wyłączone, nic nie wyświetlają. Co może powodować, że zawartość tablicy "toDisplay" po przepełnieniu Timera2...
Chyba cała struktura: [syntax=c] volatile GSM_communication_t GSM_communication; [/syntax] nie musi być zadeklarowana jako volatile.
1. Sformatuj kod bo się nie da czystać 2. Nie deklaruj całych struktur/buforów jako volatile bo to nadużycie
Mamy funkcję, która przyjmuje np. następujący argument funkcja(uint8_t argument) i przekazujemy jej element tablicy struktur, który jest volatile. GCC będzie krzyczał Może weź najpierw to sprawdź, bo teraz już trochę "popłynąłeś". 4\/3!!
I jeszcze jedna propozycja wykorzystania pól bitowych w przykładzie Electixa bez konieczności definiowania całych struktur bitowych: [syntax=c] #define bit_Field(var, bit, len) ((*(volatile struct{uint32_t:(bit)%32;uint32_t fld:len;}*)\ ((uint32_t*)&(var)+(bit)/32)).fld) // var - nazwa zmiennej // bit - numer pierwszego bitu pola bitowego // len - długość...
Te deklaracje umieść w pliku irq.h [syntax=c]struct status { uint32_t adc:1; uint32_t rtc:1; }; extern volatile struct status sts;[/syntax] i plik ten dołącz do main.c i irq.c w irq.c lub main.c umieść ta definicję [syntax=c]volatile struct status sts={0,0};[/syntax]
Co to znaczy różne typy, różne struktury i uniwersalny kod do nich?
Linia z #define to makro preprocesora, po, nomen omen, definicję i opis odsyłam do Googli. :) To makro przyjmuje wskaźnik, rzutuje go na wskaźnik na strukturę pole_bitowe (słowo kluczowe volatile to zakładam, że wiesz, co robi) i zwraca samą strukturę. Prawdopodobnie da się to opisać jaśniej, bardziej poprawnie i wciąż po polsku, ale mi się już spać...
1. nie wyobrażam sobie programowania embedded, żeby choć raz na miesiąc nie rozwinąć C do ASM i zobaczyć co wychodzi. Z poczucia obowiązku, procedur w korporacji lub własnej ciekawości. Dyskusja o funkcji się skończy. Znalazł byś statyczny blok pamięci (tzn istniejący przed załadowaniem programu, o jakieś drobne atrybuty różniący się od 'zewnętrznego...
(at)Piotrus_999 To nie Ty czasem stosujesz volatile dla tablic struktur? Chciałbym zaznaczyć, że taki zabieg również generuje średnio wydajny program. Bo niby jaką wartość merytoryczną niesie wypowiedź typu: No właśnie to było dziwne bo w strukturach packed nie było :). A kto włącza to globalnie? Pewnie w jakimś pluginie do eclipsa (at)qazpylades ładnie...
Pomogło dodanie volatile w strukturze. Dzięki, teraz wszystko działa jak należy. [syntax=c]struct GLOBAL_FLAGS //brief Flags for status information { //! True when PID control loop should run one time volatile uint8_t pidTimer:1; volatile uint8_t dummy:7; } gFlags = {0, 0};[/syntax] Zastanawiam się tylko dlaczego nie było to zaimplementowane w kodzie...
volatile uint8_t tab1[10]; tab1 jest wskaźnikiem z niejawnym modyfikatorem const do tablicy zmiennych typu uint8_t z modyfikatorem volatile
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...
Cała dyskusja na temat volatile powyżej jest błędna - użycie tego słówka przy polach struktury TPIN jest w 100% prawidłowe i KONIECZNE. Proponuję więc szukać problemu w innym miejscu, bo to akurat miejsce jest właśnie takie jak ma być. Porównywanie wartości zmiennych z oczekiwaniami przy włączonej optymalizacji jest bezcelowe i doprowadza do takich...
Wciąż nie wiem, czy to ja gdzieś robię błąd, czy też jest to wina kompilatora - pierwszy raz mam takie zjawisko, a zawsze bezboleśnie używałem różnych takich konstrukcji.... Ponieważ jest to zmienna lokalna może być przechowywana tylko w rejestrach procesora lub cos w tym rodzaju. Spróbuj ja zrobić volatile.
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...
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,...
Jeżeli chcesz koniecznie koniecznie wykorzystać metodę, o której pisał tmf, możesz zrobić tak: [syntax=c] typedef struct _PortBits { unsigned b0 : 1; unsigned b1 : 1; unsigned b2 : 1; unsigned b3 : 1; unsigned b4 : 1; unsigned b5 : 1; unsigned b6 : 1; unsigned b7 : 1; } tPortBits; #define PORT_BITS(p) (*(volatile tPortBits*)&(p)) #define SCLK_RF_PORT...
Witam, przewertowałem już kilka tematów i specyfikację avr-gcc ale nie znalazłem odpowiedzi na moje pytanie. Mianowice czy da się w jakiś sposób zrobić aby zmienna (nie wskaźnik) w strukturze [syntax=c] struct _A { volatile unsigned char pa; }; [/syntax] odpowiadała adresowi np. 0x1B (PORTA w Atmega32). Wiem że taki efekt można uzyskać za pomocą wskaźników...
Witam wszystkich:D mam tak napisana strukturę w pliku main.c: struct TMenuItem{ volatile unsigned char tekst[15]; volatile unsigned char start_x; volatile unsigned char ID; volatile unsigned char Page; volatile unsigned char Up; volatile unsigned char Down; volatile unsigned char Start; volatile unsigned char Stop; volatile unsigned char Length; } Menu[MenuItemCount];...
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...
Dzięki, a teraz trudniejsze pytanie jak dla mie. O co chodzi w takim zapisie typedef struct S_TC { int dana1; int dana2; ... } *PS_TC; potem jest napisane coś takiego #define TC ((PS_TC)0xAAA10) Potem jest odwołanie do struktury poprzez wskaxnik
AVE... Do wszystkich funkcji podajesz nazwę bitu w rejestrze portu i nazwę bitu w rejestrze kierunku. Przykładowo dla PICa te rejestry to PORTx i TRISx, gdzie x to nazwa portu (A, B, C, etc.). Zatem przykładowo kod dla PIC16F do sprawdzenia obecności dwóch sensorów na dwóch pierwszych pinach portu A i ustawienie stosownych flag w dedykowanej ku temu...
Wydaje mi się że zliczanie timerem czasu między impulsami nie będzie jakoś znacząco mniej zasobożerne. Timer ma swoje przerwania, wiec się raczej mylisz... Co do podanego kodu obsługi przerwania INT0 , to z dużym prawdopodobieństwem samo wywołanie transmisji po RS może być dodatkową przyczyną problemów, gdyż obsługa tego przerwania jest nieoptymalna...
Problemem u Ciebie jest to że nie zauważasz o czym jest generalna myśl tylko łapiesz się z hasła typu misra. Pisałem że nie lubię wodotrysków nieczytelnej trikologii No odnoszę całkiem inne wrażenie po kodzie, który czasami umieszeczesz na tym forum. Const nie używasz bo niby nie jest w duchu języka C. Używasz bezpodstawnie volatile dla całych tablic...
Różnice rzędu 2 instrukcji jakoś do mnie w tym przypadku nie trafiają. Czyli różnice czterech czy sześciu bajtów flasha (zakładam że na AVR jedna instrukcja ma 2 bajty) do Ciebie nie trafiają, ale różnica jednego bajta w RAM już trafia? Widzisz niekonsekwencję? Ja tu data race nie widzę. Czy jest coś polem bitowym czy int-em. (i abstrahujmy od tego...
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...
Nie do końca umiem wyjaśnić, dlaczego C++ różni się tutaj od C, ale mam inną propozycję, rodem z ANSI C :) Przykładowy kod można przepisać: #include <stddef.h> typedef struct { int first; int second; int third; } type_t; #define ADDRESS 0x12345678 const int data = (ADDRESS + offsetof(type_t, second))*2; int main(void)...
Witam, Mam pewien problem i nie bardzo pomysł na jego rozwiązanie. Mam program zegara i czujnikami dallas18b20 i wszystko fajnie działa. Potrzebowałem uruchomić dodatkowo przetwornik adc i zaczęły się schody. Gdy skonfigurowałem przetwornik program po dojściu do momentu inicjalizacji przetworika się wiesza, a dokładniej wygląda, jakby procek się resetował...
Ź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,...
(...) diody Twój kod wykorzystuje kreatywne podejście do mapowania pinów mikrokontrolera na struktury, które można łatwo używać w programie. Chociaż metoda, którą zaproponowałeś, jest funkcjonalna, to istnieje kilka obszarów, które można ulepszyć, aby kod był bardziej zwięzły i czytelny. Oto kilka sugestii: 1. Uproszczenie makr: Twoje makra wykorzystują...
6 - każdą (debilną) funkcję jak ją nazwałeś da radę przerobić na normalną 7 - szukaj błędu po #endif zgodnie z komunikatem a nie wewnątrz warunku 8 - naucz się rzutowania typów bo w tym przypadku specyfikator volatile nieco zmienia traktowanie zmiennej slowo0. Poza tym jak używasz jakiegoś srodowiska, które domyślnie zamienia unsigned char na char -...
Dziękuję koledze LordBlick, poprosiłem go o odblokowanie tematu, bo wydaje mi się, że mimo pozornej prostoty problemu warto się nad nim chwilę zastanowić. Zanim przejdę do odpowiedzi na post #3, powiem dwa słowa o makrodefinicjach. Wiele osób z nich chętnie korzysta, w pokazanym wyżej przykładzie zdecydowanie lepiej posługiwać się makrami LED_ON i LED_OFF...
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...
Hej, mam następujący problem. Napisałem niewielką klasę opakowującą ADC1 dla STM32L4 (tak, piszę w C++ ;) ). Jako, że chciałbym aby była dość ogólna, wskaźnik do adc przechowuję jako pole volatile ). Np. nie działa: [syntax=c] this->p_adc->CR |= ADC_CR_ADDIS; this->p_adc->CR &= ~ADC_CR_ADEN; [/syntax] ale to już działa (mimo, że jest wołane w tej samej...
Linijka : [syntax=c]volatile struct st_can __evenaccess * can_block_p;[/syntax] oznacza definicję wskaźnika o nazwie can_block_p, na strukturę typu st_can. Linijka: [syntax=c]can_block_p = (struct st_can __evenaccess *) 0x90200;[/syntax] inicjalizuje wskaźnik can_block_p adresem 0x90200 rzutowanym na typ struct st_can __evenaccess *. Modyfikator volatile,...
Cześć, Mam taki problem z AT91SAM7256. Mój kod przy optymalizacji=0, zajmuje 44280Kb. Wszystko działa poprawnie. Jeśli dodam do kodu taką linijkę (kod zajmuje 44372Kb): config |= (1 << 13) | (5 << 10) | (7 <<3); (zmienna config jest w strukturze i jest typu volatile unsigned short) to niestety program zaczyna wariować. Przesyła mi...
Rozwiązanie z postu powyżej jest najlepszym według mnie: if(v) PORTB |= (1<<PB3); else PORTB &=~(1<<PB3); Żeby jednak traktować pojedynczy bit portu jako osobną zmienną można wykorzystać fakt, że rejestry io posiadają swój adres w przestrzeni danych, przez co można uzyskać adres i rzutować wskaźnik na jakąś bardziej...
nie jestem pewny czy dobrze ustawilem bo w C18 nie ma takiej struktury jak CONFIG3H , zrobilem tak #define CONFIG3H *((volatile unsigned int *) 0x300005) ; a pozniej CONFIG3H &= 0b11111101; jesli to jest OK to nic nie dało :(. Tylko ze inne piny ktore moga byc takze jako AD dzialaja jako I/O(dzieki ustawieniu ADCON1), wiec wydaje mi...
Jacek o czym Ty piszesz. Volatile niczego nie chroni. Tylko mówi że zmienna moze być modyfikowana przez coś czego kompilator nie widzi i de facto oznacza ze musi odczytywać i zapisywać do pamięci używaną danę przed i po każdej operacji. Działa to tak samo dla każdego rodzaju danych (tablice, struktury, unie) Skompiluj sobie np. [syntax=c]volatile int...
W moim przypadku to: volatileprzycisk tablica_przyciskow[4] = { {.pin = KEY_UP}, {.pin = KEY_DOWN}, {.pin = KEY_OK}, {.pin = KEY_CANCEL} }; dzięki za pomoc.
no dobra, ale te wszystkie volatile uint8_t * volatile niezbyt dobrze wygladaja /; wygladaja wrecz lewo... Zrób strukturę, będzie wyglądało lepiej... moze ((noinline))? czy wlasnie tego slowka szukam? <: Można, bo w tym przypadku rozwijanie funkcji _eeprom_save_block() to nadoptymalizacja, ale to raczej z tego właśnie powodu. Jako alternatywa dla...
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...
W pliku LPC1768.h masz taką definicję: #define CCR (*(volatile unsigned char *)0x40024008) w pliku core_cm3.h masz taką linijkę: typedef struct { ... __IO uint32_t CCR; /*!< Configuration Control Register */ ... } SCB_Type; Definicja z pierwszego zostaje wstawiona do drugiego i powstaje chaos. Nie ma tu prostego rozwiązania, możesz spróbować...
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...
Nie wiem czy to ma znaczenie ale masz trochę inną sekwencję niż w dokumentacji Sprawdzę to, dzięki. Poza tym czemu raz używasz biblioteki a raz walisz po rejestrach ? Biblioteki używam żeby wygodniej było, a po rejestrach żeby kolega Freddie Chopin się nie czepiał, że tylko biblioteki używam ;). A na poważnie, to ciężko odpowiedzieć czemu. Projekt...
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>...
Witam, mam pytanie dotyczące działania modyfikatora volatile zastosowanego przy definiowaniu obiektu klasy/struktury. Książki/poradniki, na które trafiłem, nie tłumaczą zagadnienia zbyt dokładnie, zaś lektura standardu języka mnie przerasta :) Na logikę i zdrowy rozsądek, wydawało mi się, że "ulotność" obiektu implikuje "ulotność" wszystkich jego składników....
Czy jest gdzies opis formatu pliku REL ? No właśnie nie widzę opisu. *.rel jest skompilowanym plikiem asemblera do linkowania. Można uprościć sobie życie i zapisywać obraz w postaci pliku *.s i kazać kompilować do *.rel samemu SDCC. W ten sposób strzeżemy się przed ewentualną zmianą struktury pliku *.rel spowodowaną rozwojem samego SDCC. Może takie...
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;...
Poradnik spoko - zauważyłem lepszą przydatność wygenerowania pojedynczego pliku nagłówkowego z rejestrami, skrojonego na miarę, w postaci struktury unii, niżeli używanie wyciętych fragmentów pliku nagłówkowego. Niestety trzeba uważać przy tworzeniu takiego pliku nagłówkowego i pilnować poprawności z dokumentacją: [syntax=c] #include <stdint.h>...
W poprzednich odcinkach wiel;e osób zwracało ci uwagę, że tłumaczysz starocie, w dodatku starocie, w któych jest masa błędów i merytorycznych i implementacyjnych. Proszę nie brać tych uwag do siebie - krytyka dotyczy autora artykułu, co wynika zapewne z faktu, że od jego napisania upłynęły 2-3 dekady! Niemniej biorąc pod uwagę także krytykę wcześniejszych...
Jeśli chcesz gotowego rozwiązania to napiszę jak sam robię takie systemy: Deklaruję pewną strukturę globalną, koniecznie volatile, w której umieszczam flagi w zależności od tego ile ich potrzebuję, np.: [syntax=c]volatile struct sZmienna { unsigned char Pomiar :1; unsigned char Timer :1; unsigned char Odswiez_LCD :1; //itd. }Zmienna;[/syntax] Następnie...
Cześć, próbuję zdefiniować sobie struktury, które pozwolą na dostęp do pamięci USB w bardziej cywilizowany sposób. Mniej więcej coś takiego: [syntax=c]#include <cstdint> #include <new> struct BufferDescriptionTableEntry { volatile uint16_t addr; volatile uint16_t count; } __attribute__((packed)); struct EndpointBufferDescription { BufferDescriptionTableEntry...
A może coś takiego [syntax=c] typedef struct{ u08 b0:1; u08 b1:1; u08 b2:1; u08 b3:1; u08 b4:1; u08 b5:1; u08 b6:1; u08 b7:1; } volatile IO; IO * const pora=(IO*)&PORTA; #define PORTA0 pora->b0 #define PORTA1 pora->b1 ... [/syntax]
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 serdecznie! Natknąłem się na taki oto problem. Napisałem sobie funkcję, która służy do ustawiania rejestru Mach Control Register i wygląda tak: MCR ustawia jeszcze dodatkowo przerwanie dla Mach3 i reset dla Mach2. Czy ktoś z Was, szanowni Koledzy spotkał się już z takim problemem? Albo orientuje się skąd on może wynikać? Czyżby symulator był błędnie...
Wewnętrzny oscylator jest hiperdokładny nawiązując do zawrotnie szybkiego RC5 ;] dsPIC33FJ obłożony ciężko robotą dekoduje mi perfekcyjnie RC5, chodzac z wewnetrznego zegara... Dodatkowo, można spróbować wyjaśnić, czym jest to przestępstwo: a lot of fun . Moze warto zastosować lokalne zmienne i na nich operować w kodzie przerwania, a dopiero pod koniec,...
struct portb { unsigned DS:1; unsigned RW:1; unsigned AS:1; unsigned :2; unsigned LOAD:1; unsigned :1; unsigned CS:1; }; volatile struct portb* const Portb = (volatile struct portb*)&PORTB; Bez const kompilator nie ma pewności, że Portb będzie zawsze pokazywać na adres i/o i operacje bitowe będą dostępne....
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...
I jeszcze jedno czy mógłby ktoś po ludzku wyjasnić co oznacza "pamięć o dostępie swobodnym" To znaczy, że masz dowolną kolejność dostępu do danych (np. możesz czytać kolejno spod adresów 1, 6, 2, 9, 10, 3 , a nie tylko kolejne 1,2,3,4,5 lub 8,9,10,11). Nazwa powstała dla odróżniena takiej pamięci od pamięci z dostępem sekwencyjnym (np. pamięci taśmowe...
Np coś takiego [syntax=c]struct{ unsigned int ModTempSet; unsigned int ModTermAkt; unsigned int ModObn; unsigned int ModAdr; unsigned int FAKE; unsigned int PUMP; unsigned char End; }Mod03; char *StructPtr; volatile int a, b; StructPtr =(char*) &Mod03.ModTempSet; //adres poczatku aa= (int)StructPtr; StructPtr =(char*) &Mod03.End; //adres konca bb= (int)StructPtr;...
Nie wiem jak v3.4.1 ale w v3.4.3 efekt jes taki: struct biciki{ unsigned bicik1:1; unsigned bicik2:2; unsigned bicik3:1; }; struct biciki pole; ... int main(void) { pole.bicik1=1; pole.bicik2=3; pole.bicik3=1; ... //po kompilacji dla "struct biciki pole" ... 27:m128.c **** pole.bicik1=1; 148 .LM8:...
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...
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...
Może są inne błędy, ale: [syntax=c]volatile struct tm* t = 0;[/syntax] raczej nie wróży nic dobrego. t będzie wskazywało na komórkę pamięci o adresie 0 - rejestr R0 mikrokontrolera. Jeśli używasz wskaźników to musisz sobie przydzielić pamięć na strukturę na którą wskazują.
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...
Adresy urządzeń najlepiej zapisywać jako stałe preprocesora, a makra dostępu do rejestrów opierać właśnie o ten jeden adres (ewentualnie stworzyć strukturę i zrobić makro lokujące ją na stałe w przestrzeni).. coś w rodzaju: #define BASEADDR 0xFF00 #define rtl_io8(addr) (*(volatile u8*)(BASEADDR + (addr))) #define...
#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...
Witam. Bardzo was proszę o podawanie stron internetowych w których znalazłbym odpowiedzi do tych pytań: Przesłanki do konstrukcji i stosowania. języki w programowania. Wymagania dla JP. Panorama JP. Definicja JP. Elementy przetwarzania kodu źródłowego. C. Bibliografia. Leksyka C. Jednostki leksykalne C. Odst©py. Komentarze. Identyfikatory. Sowa...
Dzięki za pomoc. Skorzystałem z funkcji w core_cm3 [syntax=c]uint32_t __REV16(uint16_t value) { uint32_t result=0; __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) ); return(result); }[/syntax] i wszystko działa już poprawnie. Z tym 8051 i AVR rzeczywiście nie korzystam ze zmiennych 16bit (sięgam do pojedynczych bajtów) wiec zapewne też...
Mam następujący problem: dostaję ciąg znaków z rs'a, który zapisują do jednej zmiennej i chcę z tego ciągu wyciągnąć dwa podciągi i zapisać je do jednego wiersza tabeli struktur. Definicje: //przed main: #define UART_MAXBUFF 37 char uart_rx_buffer[UART_MAXBUFF+1]; //w main: char bufor[20] = ""; volatile typedef struct...
W zasadzie jedynie słuszne poziomy to 2, 3 i s. Jeżeli używasz funkcji _delay_ms() i _delay_us() to nie wolno Ci stosować poziomu optymalizacji mniejszego niż 2, w przeciwnym wypadku będziesz miał w 'ciasnych' pętlach opóźnienia obliczenia zmiennoprzecinkowe. Osobiście najczęściej stosuję optymalizacje ze względu na rozmiar kodu (s), która w większości...
(at)stmx nie wiem jak Ty zaczynasz poznawanie nowych języków Od nauki podstaw z książek. Wycięta złośliwość Tutaj na przykład dowiedziałem się jak utworzyć zmienną i jak zapisać do niej wartość: Oooo.... Twierdzę że daleko Ci do tego. odpowiedz np na pytanie co to za słowo volatile i co ono tam robi. Wycięta złośliwość I dzięki temu mogę poznać całą...
Spróbowałem Twojego pomysłu z NOLOAD: [syntax=c] ._heap (NOLOAD): { . = ALIGN(4); __heap_start = .; PROVIDE(__heap_start = __heap_start); . += __heap_size; . = ALIGN(4); __heap_end = .; PROVIDE(__heap_end = __heap_end); } > sdram .frame (NOLOAD): { . = ALIGN(4); __frame_start = .; PROVIDE(__frame_start = __frame_start); . = ALIGN(4); *(.frame) . = ALIGN(4);...
Według mnie jest to problem z optymalizacją, wyłącz optymalizację i sprawdź wynik. Już po raz kolejny widzę tego typu problem. Możesz jeszcze spróbować czegoś takiego: void DoUSART(unsigned char * volatile data, uint8_t length) { data++; for(uint8_t i=0; i<length; i++, data++) { UDR=*data; } } a tak po za tym to...
Witam , Kolejny problem C-beginners , Usiłuję rozsupłać dostęp do rejestrów GPIORx procesorów AVR, ponieważ nic zadowalającego nie wymyśliłem , pozwolę sobie tylko nazwać problem. Potrzebuję umieścić zmienne na portach GPIORx , aby móc wymusić / usilnie domagać się , od kompilatora wykorzystania znanych instrukcji szybkiego dostępu bitowego do rejestrów...
Może wystarczy utworzyć dwie funkcje operujące na tablicy bajtów: pierwsza pobierająca konkretny bit, druga do wymuszenia wartości konkretnego bitu: uint8_t getbit(const uint8_t* arr, uint8_t bitnum) { uint8_t mask = 1; if(bitnum & 2) mask <<= 2; if(bitnum & 1) mask <<= 1; if(bitnum & 4) mask...
Czytaj ze zrozumieniem. Opuściłeś sekcję rejestrów wyjściowych, która tutaj powinna być pusta: asm volatile("sbi %0, 0x07" : : "I" (_SFR_IO_ADDR(PORTB))... Zresztą po co komu taka wstawka? Przy optymalizacji -Os lub -O2 avr-gcc generuje dokładnie taką samą instrukcję dla kodu PORTB |= 0x07; Pozdrawiam,...
W mojej strukturalnej "bibliotece" większość z tych funkcji była typu inline i takie będą domyślnie w nowej "bibliotece". Dopiero zaczynam zabawę z C++na uC, dlatego też tworzę wszystko po kolei, żeby błędy się nie nawarstwiały :) Pytanie techniczne. Przy deklaracji obiektu globalnego można wywołać jego konstruktor? Czytałem, że czas jego [konstruktora]...
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...
Cześć Musisz zdefiniować parę struktur - ich deklaracje znajdziesz w pliku "usb.h". Parametr o który pytasz powinien być wskaźnikiem do struktury : //--------------------------------------... //! \ingroup usb_api_struct //! \brief Main USB structure used to store the states of the various //! components, such as...
Nie wiem po co się tak męczyć. Pamięć zewnętrzna jest zamapowana do tej samej przestrzeni, w której jest wewnętrzna pamięć ram. Można więc posiadać wskaźnik, który będzie wskazywał komórkę w wewnętrznej pamięci, a po przypisaniu innego adresu może wskazywać na zewnętrzną pamięć. Gdyby napisać: struct jakis_skomplikowany_obiekt* my_obj = (void*)0x2345;...
Witam ! Piszę program do sterownika oświetlenia, napotkałem się na następujący problem , oto kod : [syntax=c] #include <stdio.h> #include <stdlib.h> #define PIN_TRIAC (0) static struct { volatile enum States {ON,OFF} state; // stan wlaczony czy wylaczony volatile char pval; // wartosc mocy w % od 0 do 100 void (*TurnOn)(void); //wlacz void...
volatile przerwać typedef volatile volatile struct
płyta gazowa bezpiecznik komponentu label wykręcić śruba
pralka electrolux mikrokomputer cobra1
Toshiba TC5565APL-12 SRAM 8KB 120ns DIP-28 – parametry, zamienniki, zastosowania Schemat układu wspomagania kierownicy SsangYong Musso – hydraulika, ciśnienia, regeneracja