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]
Wszystkie "wewnętrzne" wystarczą - reszta jest zbędna. 4\/3!!
Do funkcji przekazuje zmienną typu volatile za pomocą referencji. Ja tam widzę zwykły wskaźnik a nie referencję. Funkcji nieodpowiada to że to co dostaje jest typu volatile. A na czym to "nieodpowiadanie" polega? Próbowałem to zwalczyć rzutując argument ale nic to nie daje. To znaczy czego nie daje? Czy ktoś wie jak rozwiązać ten problem? Ale jaki...
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...
le nie ma tam słowa o FMC . No bo FMC po skonfigurowaniu to po prostu pamięć w przestrzeni adresowej - czyli po prostu piszesz lub czytasz do/z tego adresu. Czyli DMA memory to memory. Dla przykładu u mnie w projekcie teraz używam banku 1, 16 linii danych i szyny adresowej A2 jaki DC. Po sonfigurowaniu FMC [syntax=c]typedef struct { volatile uint16_t...
DDRB, PORTB i inne są rejestrami, ale co znaczące można uzyskać ich adres. Utwórz sobie strukturę, w której będziesz przechowywał wskaźniki na rejestry oraz jakąś maskę bitu nad którym chcesz operować. [syntax=C]#include <avr/io.h> #include <macro.h> #include <stdint.h> struct ow_pin { volatile uint8_t* pin; volatile uint8_t* port;...
Hard Fault może oznaczać włączenie przerwania do którego nie napisano obsługi. Mylisz się. Standardowa rozbiegówka definiuje "słabe" handlery przerwań zawierające puste nieskonczone pętle. To nie ma nic wspolnego z hardfault'em. Hardfault leci generalnie na 1) dostęp do nieistniejącej pamięci, 2) nierozpoznaną instrukcję rdzenia, 3) nad użycie magistral...
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...
Ad 1: [syntax=c]// bitfield definitions typedef union { struct { unsigned T2CKPS :2; unsigned TMR2ON :1; unsigned TOUTPS :4; }; struct { unsigned T2CKPS0 :1; unsigned T2CKPS1 :1; unsigned :1; unsigned TOUTPS0 :1; unsigned TOUTPS1 :1; unsigned TOUTPS2 :1; unsigned TOUTPS3 :1; }; } T2CONbits_t; extern volatile T2CONbits_t T2CONbits (at) 0x012;[/syntax]...
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...
Odpowiednie typedefy są w nagłówku stdint.h Co do podziału pomiędzy przerwanie a program główny to pewnie zapomniałeś modyfikatora volatile przy deklaracji zmiennych, które są dzielone pomiędzy przerwaniem a main(). Co do "tablicy czujników": struct czujnik { uint8_t adres; /* do wyboru czujnika na szynie */ uint8_t ileProbek; uint16_t probki[ROZMIAR];...
Jeśli zaś wywołana funkcja wywołana nawet z takiej pętli będzie miała argument bez volatile to w odróżnieniu od pętli głównej main() która nie wie co się dzieje w komórce pamięci 0x0060 - to nasza funkcja otrzyma prawidłowy adres argumentu ! i na wejściu odczyta aktualną - zmienianą w przerwaniu wartość tej komórki. Absolutnie nie. To zależy od kompilatora...
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)...
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...
kawałek kodu: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #define BAUDRATE B115200 #define MODEMDEVICE "/dev/ttyS0" #define _POSIX_SOURCE 1 #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; int...
Niestety nie mam żadnego filmiku. Sprawuje się REWELACYJNIE. Za to podrzucę Ci gotowca bo ten na stronie wymaga sporo poprawek i domysłów co gdzie jest. Jest to wersja pierwotna która przechowuje w tablicy RAM. Funkcje których tutaj nie ma robią: LCDINIT - inicjalizacja wyświetlacza LCD_POS - ustawia pozycję: wiersz, kolumna LCD_CLS - czyści ekran LCD_PSTR...
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...
https://obrazki.elektroda.pl/9337556500_... Pewna wyjątkowa osoba zasługiwała na równie wyjątkowy prezent, a że nie jestem fanem kupowania niespodzianek, postanowiłem "zrobić" coś własnym rękami. 1. Wstęp, motywacja 2. Zarys konstrukcji 3. Płytka z diodami - projekt (łączenie diod) 4. Płytka z diodami - projekt (zatrzaski) 5. Eagle...
Spróbuj tego. Nie testowałem, ale powinno zadziałać. HID.cpp [syntax=cpp] /* Copyright (c) 2011, Peter Barrett ** ** Permission to use, copy, modify, and/or distribute this software for ** any purpose with or without fee is hereby granted, provided that the ** above copyright notice and this permission notice appear in all copies. ** ** THE SOFTWARE...
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...
https://obrazki.elektroda.pl/1570592100_... Witajcie, zapraszam na relację z konstrukcji zegara na PIC18F2550 napisaną w formie tutoriala, wszystko krok po kroku. Pokażę tu jak i z czego tworzyłem prosty projekt DIY na prośbę jednego z czytelników. Wykorzystamy tu wyświetlacze 7-segmentowe, rejestr przesuwny, obsłużymy przyciski a...
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...
Poprawiłem kod według podanych porad (zastosowałem instrukcję switch oraz usunąłem zbędne volatile ze zmiennych), zmodyfikowałem również funkcję konwersja tak żeby wykorzystywała operację modulo. Ponadto Microsoft Copilot zaproponował użycie struktur do zwracania kilku wartości z funkcji zamiast wskaźników. [syntax=c]#include <iostream> #include...
https://obrazki.elektroda.pl/2123084800_... Przedstawię tu cztery praktyczne sytuacje w których ChatGPT rzeczywiście pomogło mi w programowaniu. Sytuacje będą obejmować różne języki i tematyki, będzie C i wyświetlacz 7-segmentowy, będzie Javascript, trochę HTML, a również Winsock i wysyłanie żądania HTTP. Nie zapomnę też o prostej...
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ą...
No i masz powielone definicje struktur. Zrób to tak: 1. W nagłówku zdefiniuj samą strukturę: struct cośtam { ... }; 2. Potem w pliku .c do którego dołączasz ten nagłówek zdefiniuj zmienną tego typu: volatile struct cośtam jakaśtam; 3. W nagłówku wyexportuj tą zmienną: extern volatile struct cośtam jakaśtam; Powinno działać. 4\/3!!
[syntax=c]#define COUNTERMAX (uint32_t)(.5*1000) volatile struct { uint8_t cnt:4; }binary_counter; volatile uint32_t counter; void SysTick_Handler (void) { counter++; if(counter >= COUNTERMAX) { counter = 0; binary_counter.cnt++; } }[/syntax]
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...
Przecież przy deklaracji w pierwszym kodzie jak byk stoi volatile :) [syntax=cpp]volatile struct godzina TimeOn, TimeOff;[/syntax]
To nie będzie działać. (at)ElektrodaBot Użyj schmatu z tego kodu Input to odczytany procent tlenu Setpoint 5.5% tlenu Oudput sygnał do serwa Funkcje docount i microseconds oraz rpm nie będą potrzebne w przypadku [syntax=arduino]#include <Servo.h> #include <PID_v1.h> volatile unsigned long MicrosecondsPerRevolution = 0; const unsigned long...
Mam poważne wątpliwości czy kombinacja softwareowego USB i synchronicznego (busy waits!) TWI ma szansę zadziałać. Chyba faktycznie te synchroniczne i2c nie działa, bo mi się rozłącza z usb. już się bawię z isr: nwm o co chodzi z tym attiny ale mi hardware nie działał choćbym się zesrał, ostatecznie na scl dałem mniej więcej taki https://obrazki.elektroda.pl/1633124600_...
skompiluj i wrzuć to: [syntax=c] /* * GccApplication1.cpp * * Created: 2024-09-02 16:42:56 * Author : tos */ /* * main.c * * Created on: 11 sie 2024 * Author: Dzieci */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/wdt.h> #include <avr/eeprom.h> #include <avr/sleep.h> #include...
Można odczytywać stan wejść w przerwaniach uzyskiwanych przy użyciu setitimer() - pewnie od systemu zależy, jakie będą odstępy czasy między nimi, można zadeklarować, jakie mają być, ale jak się zadeklaruje bardzo małe, to wychodzą większe, niż przy zadeklarowaniu nieco większych - a to dlatego, że program przestanie zdążać z obsługiwaniem przerwań....
(...) 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...
Czy ktoś wie co tu się dzieje co to za can_block_p? i co ten fragment robi. Ogólnie wiem że volatile powoduje ze to nie będzie optymizowane.. [syntax=c] volatile struct st_can __evenaccess * can_block_p; can_block_p = (struct st_can __evenaccess *) 0x90200;[/syntax]
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...
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>...
AVE... We wszystkich układach, z którymi ja miałem do czynienia wartości były równane do prawej, inaczej pisząc little endian. W przypadku MCU ma to znaczenie tylko dla timerów/liczników i ADC, i tylko wtedy, gdy chcemy by to miało znaczenie. Dla przykładu weźmy PIC16F1827. Układ ma 16-bitowy Timer1, który jest inkrementowany albo przez wybrany pin,...
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....
[syntax=c]volatile uint8_t num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; volatile uint8_t time[6] = {0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F}; volatile uint8_t d = 0; volatile uint8_t counter = 0; volatile struct tm* t = 0; volatile uint8_t hour, min, sec, day, month, year;[/syntax] Atmega8, chcę zrobić w głównej pętli obsługę przycisków,...
"Przydomek volatile wyłącza stosowaną przez kompilator optymalizację w stosunku do zmiennej. Używa się go wtedy, gdy dana zmienna jest modyfikowana przez nieznaną kompilatorowi formę (np. funkcję przerwania, itp.)." Zawsze to ustawiam aby nie pozwolić GCC na bycie 'za mądrym'. Przykład - mój kod w poście: volatile struct Work state; volatile struct...
Nie ma to jak wrzucać dokładny kod błędu... main.c:32:32: error: Roleta_EEPROM causes a section type conflict with Roleta_EEPROM2 volatile struct Roleta_offsets Roleta_EEPROM[7] __attribute__ ((section(".eeprom_mem&... __attribute__ ((aligned (32))) = ^ Jak chcesz to mieć...
#define int i32 typedef i32 (*TCpintd_InitFunction)(stru... Cpintd_Driver* instance); struct Cpintd_Driver { struct Cpintd_Device* instance; TCpintd_InitFunction init; }; struct Cpintd_Device { volatile struct Hardware* hardware; struct CSL_CpIntdCfgInfo configuration; }; Ktoś pomógłby mi zaalokować pamięć dla wskaźnika...
Wszystko zależy od kontekstu w jakim używa się zmienne volatile. Wezmy najprostszy przypadek: [syntax=c] struct shared { uint8_t tab[16]; uint8_t idx; }; struct shared s; void isr(void) { s.tab[s.idx] = 1; } int main(void) { s.idx = 5; irq_enable(); while(1){ while(!s.tab[s.idx]); /*Do something*/ s.tab[s.idx] = 0; } } [/syntax] Oczywiście wiadomo,...
Może to dlatego, że GIOB to jest makro a nie zmienna. Wydłubałem trochę kodu z twoich plików źródłowych: [syntax=c]#define __IO volatile typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; #define PERIPH_BASE ((uint32_t)0x40000000) #define...
Jeśli masz zmienną / stałą, to możesz jej nadać wartośc początkową jak każdej innej - to w jakiej sekcji się znajduje nie ma znaczenia. No tak. Zupełnie nie pomyślałem. Bo zastanawiałem się gdzie miało by być takie przypisanie wartości początkowej. I w ogóle nie pomyślałem o inicjalizacji ;p Nie mogą się zmienić o +4. Jeśli masz np uint8_t, uint16_t,...
Panowie koledzy mam pytanie odnośnie zmiany biblioteki napisanej w Arduino na C . Czy dobrze to zmieniłem Byte na Char czy powinno być uint8_t ? boolean na bool. Tylko problem przy class odpowiednik w c to struct, ja zmieniłem na typedef struct ostrzeżenia znikły ale w pliku .c nie są widoczne funkcje tak jakby nie zadeklarowane w pliku .h do tego jest...
Witam, przeglądałem posty na temat pól bitowych, sam ich czasami używam, ale potrzebuje stworzyć tablice pól bitowych, a dokładnie to chcę odwoływać się do pól poprzez indeks, a nie tylko nazwe. Wydawałoby się to proste: struct TPole{ unsigned char bit:1; }; volatile struct TPole Pole[100]; i teraz odwołanie powinno wyglądać :...
Cześć Jestem początkujący z Arduino. Ktoś wie jak naprawić ten błąd? //BUTTON BOX //USE w ProMicro //Tested in WIN10 + Assetto Corsa //AMSTUDIO //20.8.17 #include <Keypad.h> #include <Joystick.h> #define ENABLE_PULLUPS #define NUMROTARIES 4 #define NUMBUTTONS 24 #define NUMROWS 5 #define NUMCOLS 5 byte buttons .stateChanged ) { switch (buttbx.key...
[syntax=c]char *StructPtr; StructPtr =(char*) &Mod03.ModTempSet; aa= (int)StructPtr;[/syntax] rozumiem że "aa" jest typu "int". Ty do niej przypisujesz wartość wskaźnika "StructPtr". "int" zazwyczaj ma 4 bajty a wskaźnik 8 bajtów, więc najprawdopodobniej 4 bajty z 8 bajtowego wskaźnika nadpiszą jakąś inną zmienną. Raczej to powinno wyglądać tak:...
typedef struct volatile przerwać typedef volatile
mikrofon bezprzewodowy nadajnik numer telefon dziwna bufor grzałka
Pomylenie biegunów akumulatora w Renault Espace 4 Pikający sygnał w radiu Peugeot 407 kombi