Który numerek (9, 14 czy 5) mam wpisać w kodzie w digitalRead()? D5 albo 14 :) czyli digitalRead(D5) lub digitalRead(14) Konwersja pinów w ArduCAM UNO jest jak w poniższym listingu. Oznaczenia "Physical PIN" możesz zignorować. [syntax=c] static const uint8_t SDA = 4; static const uint8_t SCL = 5; static const uint8_t SS = 15; static const uint8_t MOSI...
digitalWrite(14, HIGH) ustala stan wysoki na A0. 15 to A1, 16 to A2, 17 to A3, 18 to A4, a 19 to A5. Z kodu Arduino HAL: Dodano po 6 Przyjrzałem się jeszcze raz Twoim zdjęciom dokładnie - faktycznie podłączyłeś ledy również na A0-A5. Tak to jest, jak użytkownik nie umieszcza schematu, a ten co ogląda zdjęcia niekoniecznie musi rozróżniać kolory ;) Dodano...
Może masz jakiś lewy DS18B20, spróbuj użyć konwertera poziomów logicznych, zasilasz DS normalnie z 5V, podciąganie ~2k podłączasz po stronie niskiej, ~5k po stronie wysokiej, GND wspólne. No i popatrz na zwykłym UNO/NANO 5V czy odczyty są racjonalne. Kupiłem kiedyś kilka DS, które zachowywały się bardzo dziwnie, odczyty skakały po pół stopnia co 1s,...
Zakomentowałeś atrybut PROGMEM, więc nie ma prawa działać: static const char /*PROGMEM*/ font5x8[] = {
Zgaduję, że pierwszy problem polega na tym, że Kolega deklaruje stałą tablicę jako zmienną. Proponuję poprzedzić deklarację tablicy słowami static const, a potem marudzić dalej.
Sądzę, że powinno być tak:[syntax=c] static const char *my_message_str_tab[] = { "E memory allocation error",//MY_MESS_MEM_ALOC_ERROR "W nastepny komunikat", //MY_MESS_COS_TAM_WARN "W kolejny" //MY_MESS_KOMUNIK_AAAA };[/syntax]
Bezpieczniej i lepiej wg mnie w takich sytuacjach zamiast: [syntax=c] static char *hello = "Witaj Swiecie!"; static char *msg = "PUTCHAR Napis: ";[/syntax] używać: [syntax=c] static const char hello[] = "Witaj Swiecie!"; static const char msg[] = "PUTCHAR Napis: ";[/syntax] 1. I tak nie manipulujesz potem tymi wskaźnikami na string więc po co one są?...
Jutro dojadą zamówione moduły konwerterów RS485 na MAX3485; https://obrazki.elektroda.pl/2754812400_... Widok testowego softu; https://obrazki.elektroda.pl/5463453600_... Tymczasowo dioda R (RGB na płycie); podłączona jako pin zmieniający kierunek transmisji dla MAXa; https://obrazki.elektroda.pl/6780784900_...
Warto tu jeszcze zwrócić uwagę na to, że nie zawsze numer pinu GPIO odpowiada numerowi pinu na używanej płytce. Numery na płytce, czyli Dx to jest alternatywny sposób numeracji dla Arduino Core - to są stałe, którym przypisane są właściwe numery GPIO. Ważne tylko jest statyczne IP, bo inaczej prędko nasze urządzenie IoT się "zgubi" lub nawet zamieni...
Czy można się jakoś przed tym zabezpieczyć ? W skrypcie linkera należy włączać sekcję poprzez zapis:[syntax=c]KEEP (*(.nazwa_sekcji))[/syntax] albo użyć atrybutu 'used':[syntax=c]static const int dummy __attribute__((__used__)) = 1234;[/syntax]
Zdaje się, że pominąłeś deklarację typu elementu tablicy jako char, czyli są inty. Więc ten napis chyba tam jest, tylko litery będą oddzielone zerami. Spróbuj dodać tam char, np. static const char test[] = {...} Nie było żadnych ostrzeżeń kompilatora w tej linijce? Druga opcja jest taka, że linker wyrzuca tą tablicę ze względu na brak odwołań, ale wtedy...
Zrób coś w tym stylu: #include <avr/io.h> #include <util/delay.h> static uint8_t kolo[4]; static const uint8_t maski[4] = {_BV(0), _BV(1), _BV(6), _BV(7)}; static const uint8_t wszystkie_maski = _BV(0) | _BV(1) | _BV(6) | _BV(7); int main(void)...
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
Jaka jest częstotliwość pracy mikrokontrolera? Min. dozwolony czas stanu niskiego i wysokiego linii E to 500 us. Nie widzę w kodzie opóźnień, które by to gwarantowały. Inny kwiatek: niepoprawna deklaracja łańcucha - powinno być: static const char text[] = "äbcd"; Sekwencja inicjująca wyświetlacz też wygląda podejrzanie - brak opóźnień...
Zademonstruję Ci: Nowy projekt w Atollic for STM32: Bez modyfikowania skryptu linkera: https://obrazki.elektroda.pl/4714547300_... A teraz Twoje przezroczyste przypisanie: https://obrazki.elektroda.pl/8906289200_... Dopiero po dodaniu do skryptu linkera: https://obrazki.elektroda.pl/4995382700_...
[syntax=cpp]static const int led = A0; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { int x = Serial.read(); if (x == '1') digitalWrite(led, 1); if (x == '0') digitalWrite(led, 0); }[/syntax] Korzystaj z dokumentacji. Jeden z przykładów realizuje dokładnie to, co chcesz zrobić. http://arduino.cc/en/Tutorial/PhysicalPi...
Jest w Arduino IDE ... oryginalnie w IDE nie ma wsparcia dla Atemeg 16/32, trzeba szukać i dograć odpowiednie pliki z zewnątrz. A te, które są w internecie mają błędy. Trzeba poprawiać. W załączniku bootloader taki właśnie. U mnie działa na IDE 1.5.8 Instalacja dodatku: - plik ...\hardware\arduino\avr\boards.txt zastapić nowym z załącznika - utworzyć...
Znalazłem kod obsługi wyś 7-segmentowego, pozmieniałem rejestry pod swój mikro procesor (ATmega32). Tylko mam problem z linia " static const uint8_t __flash DIGITS To standardowy błąd eclipse i pluginu do AVR, nie wpływa ten błąd na kompilację, jedynie na "podkreślanie" składni w Eclipse. Rozwiązanie tego problemu znajdziesz m.in. w tym wątku: https://forum.atnel.pl/topic15543.html#p...
To jest oczywiście nieprawda. Nawet gdyby nie były zdefiniowane przez odpowiednie stałe te piny, to można użyć bezpośredniej numeracji GPIO. To się nawet nie kompiluje dla NODE MCU z ESP8266. Piny 12-15 mieszczą się w 11 dostępnych w ESP8266. To jest ta sama ilość dostępnych pinów dla Node MCU i WeMos. [syntax=c]static const uint8_t D0 = 16; static...
Zamiast Wire.begin(2, 1) powinno być Wire.begin(D2, D1) lub Wire.begin(SDA, SCL). Adresy DX oraz SDA, SCL są zdefiniowane w bibliotece ESP8266 dla płytki nodemcu: [syntax=c]#define PIN_WIRE_SDA (4) #define PIN_WIRE_SCL (5) static const uint8_t SDA = PIN_WIRE_SDA; static const uint8_t SCL = PIN_WIRE_SCL; #define LED_BUILTIN 16 static const uint8_t D0...
Chodzi o deklarację zmiennej data W tym przypadku wystarczy, że bufor data zadeklarujesz jako static. Masz tu jeszcze kilka błędów. Funkcja receive zwraca char a Ty próbujesz zwrócić char *. Dodatkowo w main próbujesz przypisać to co zwraca receive do tablicy buffer (co sie nie powinno skompilować). Spróbuj tak: [syntax=c] static const unsigned char*...
Nano czyli ATMega328P... biblioteka od SIM800, do tego LCD i brakło Ci RAMu. lcd.print przyjmuje string... a używanie typu string na 328P to bardzo zły pomysł. Albo zainwestuj w Mega 2560 Pro, albo zacznij bardzo szanować pamięć. Komunikaty trzymaj jako static const char albo inline jako F("tekst") . Czyli zamiast: lcd.print("status GSM = IDLE "); daj...
Proszę o pomoc. Używam AVR Studio7 i pierwszy raz próbuję skorzystać z pamięci programu do zapisania i odczytów tekstów. Moje dotychczasowe próby kończyły się niepowodzeniem. Poniższy kod kompiluje się bez błędów ale z odczytem było już tylko źle. [syntax=c] #include <avr/io.h> #include <avr/pgmspace.h> int main (void) { static const char...
1. vTaskDelay możesz pogonić i wpisać tam jakiś delay_ms albo inną funkcję która czeka określoną ilość milisekund. 2. Strukturę Crc7 i funkcje na niej operujące możesz również pogonić, to służy do wyliczania CRC (ja z tego korzystam, bo muszę, ale Ty pewnie nie musisz ;) ). Zamiast spispi((crc.crc<<1)|1) zrób spispi(0x00) 3. [syntax=C] static...
Masz jeden błąd - Next_step nigdy nie przyjmie wartości 0, co najwyżej 1. Jeśli chodzi o C, to sugerowałbym użycie tablicy: enum { NUM_STEPS = 16 }; enum { STEP_MASK = 0x3f }; /* * Układ portu B: x x I12 I02 I11 I01 Ph2 Ph1 */ static const uint8_t steps[NUM_STEPS] = { /* dla avr-gcc można użyć literałów binarnych:...
Już chyba wiem co i jak... ;) Spróbuj takiej modyfikacji (do mojego pierwszego programu): --- klaw.c2009-01-08 21:24:31.000000000 +0000 +++ klaw.c.new22009-01-08 22:52:53.000000000 +0000 (at)(at) -1,5 +1,8 (at)(at) +#define F_CPU 4000000UL /* czy jaką tam miałeś F_CPU */ + #include <avr/io.h> #include <avr/pgmspace.h> +#include...
Witam, Panowie dziękuję za cenne uwagi. Mam jednak do nich pytanie: [syntax=c]// Definiuje nowy typ - tym razem dla mniejszej wygody typedef char Int8; // Napisy w pamięci programu static const Int8 PROGMEM Text_A[] = {" blebleble1 "}; static const Int8 PROGMEM Text_B[] = {" blebleble2 "}; static const Int8 PROGMEM Text_C[] = {" blebleble3 "}; static...
const int liczba=10; może niestety wiązać się z rezerwacją miejsca w pamięci. Przykład dondu był zbyt trywialny i dlatego wyszło, że oba sposoby prowadzą do tego samego. Pomiędzy define a const zmienna są istotne różnice. Np. można pobrać adres zmiennej, lecz nie etykiety. Aby oba sposoby były w miarę równoważne lepiej stosować static const zmienna....
Jeśli biblioteka komunikuje się na poziomie zdefiniowanego interfejsu np. jakaś do GSM używając UART to jest jej obojętne jak UART jest obsługiwany przez UNO, ESP czy DUE. Jeśli sama ustawia coś w rejestrach by aktywować/sterować niskopoziomowo z UART/SPI to się nie uda. Ale w Arduino używa się gotowych funkcji typu SPI.begin() i to zadziała na wszystkich...
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;...
Fajnie, że Ci program działa. Kilka sugesti: 1) nazwij jakoś te flagi. Możesz uzyć np: struct { unsigned mute:1; unsigned inna:1; } flags; /* dalej w kodzie */ flags.mute = 1; 2) używasz "magicznych stałych" w stylu 0xFD, 0x18, 63 itd. Wszystkie powinny być opisane i zdeklarowane na początku pliku za pomocą static const ... albo #define...
W ten sposób tylko skonfigurowałeś pin jako wejście z podciąganiem, a stan został 0, bo po resecie rejestr GPIOB->ODR jest domyślnie = 0. Żeby wymuszać stany można zdefiniować sobie proste funkcje: [syntax=c] static inline void gpio_pin_LO(GPIO_TypeDef * const port, T_GPIO_PIN pin) { port->BRR = pin; } static inline void gpio_pin_HI(GPIO_TypeDef * const...
Chciałbym zwrócić uwagę na odczyt wyniku konwersji: [syntax=c] ... uint16_t ConversionResults[ADC_CHANNELS]; // zmienna 16bitowa ... ADMUX = 0x60; // AVCC with external capacitor at AREF pin, left adjust result; // left adjusted, czyli przesunięty o 6 bitów w lewo !!! ... static const uint8_tChannelMUX[ADC_CHANNELS] = {0x61, 0x62, 0x63}; // włączony...
Mam poniższy kod: #include <TinyGPSPlus.h> #include <SoftwareSerial.h> static const int RXPin = 4, TXPin = 3; static const uint32_t GPSBaud = 4800; TinyGPSPlus gps; SoftwareSerial ss(RXPin, TXPin); void setup() { Serial.begin(115200); ss.begin(GPSBaud); } char buffer[25]; void showData()...
W odróżnieniu od asemblera kompilator dobrze sobie poradzi z takimi obliczeniami. Wyoptymalizuje jak należy. W to nie wątpię (poradzi sobie z optymalizacją). Natomiast jeśli chodzi o asemblera to programista musi o wszystko zadbać. Jednak nie ulega wątpliwości, iż zarówno zapis, jak i odczyt jest dziwaczny. A najgorsze jest to, że wszelkie obliczenia...
dzięki wielkie static const i PROGMEM rozwiązały sprawę.
Dlaczego nie mozesz zainicjalizowac od razu ? static const int A[] = {...};
Chodzi mi o umieszczeni np: static const uint8_t myArray[] = "taki sobie string"; we FLASH ale gdy się nigdzie tego nigdzie nie użyje. Żeby kompilator umieścił to we FLASH to muszę to gdzieś użyć.
Jeśli tablica deklarowana jest wewnątrz funkcji to samo const sprawy nie załatwia, ale static const już tak.
(...) .db "Jakis napis",0x0a,0x0d, 13,12, 0 lpm acc, z (lub z+) A co to za potworki? Znak końca linii (i do tego windowsowy :/) też nie jest potrzebny, wystarczy samo zero, chyba że urządzenie komunikuje się z windowsowym terminalem tekstowym przez rs-232. I skąd się wziął akumulator w AVR? W C robisz tak (avr-gcc): #include <avr/pgmspace.h>...
a co masz w deklaracji tablicy czcionki? taki zapis: static const char font5x8[] PROGMEM = { ... } ???
int f=4; int n=1000; #define baza f*n int zbior[baza]; ale stała jako liczba ? jeśli masz na myśli: static const int f=4; static const int n=1000; #define baza f*n int zbior[baza]; to też zwraca błąd wychodzi na to że tylko stała w postaci liczby, aż mi się nie chce wierzyć że się nie da.
Tak dla "usystematyzowania sprawy" przyklad ponizej... pozdrawiam int **array; static const int Rows = 6; static const int Cols = 8; array = new int*[Rows]; if (array != NULL) { for (int i = 0; i < Rows; i++) { array[i] = new int[Cols]; } } for (int i = 0; i < Rows; i++) {...
[syntax=c] DCB PortDCB; COMMTIMEOUTSCommTimeouts; HANDLE hPort; const unsigned short const_bufo=256; //maksymalna iloϾ danych odczytywana jednorazowo z portu const unsigned short const_bufn=1024; //wielkoϾ bufora nadawczego const unsigned short const_stos=65535; //wielkoϾ Stosu odbiorczego (maks 65535) const unsigned...
A czemu nie zrobisz po prostu funkcji tłumaczącej tablicy na strukturę z constami? W tym wypadku można tylko raz zrealizować przypisanie:[syntax=c] conf = readConfiguration(eeprom_configuration)[... de facto zainicjować pola const w deklaracji zmiennej conf. Każde następna próba modyfikacji conf w programie wywali błąd typu:[syntax=bash]...
myip, netmask i gwip masz zadeklarowane jako stałe (const) zatem nie możesz dynamicznie zmieniać ich wartości w programie. Usuń static const sprzed deklaracji i spróbuj. Pozdr
Obiekty oznaczone jako static są widoczne tylko w obrębie lokalnego modułu. Nie można eksportować funkcji statycznych tak samo jak nie można modyfikować zmiennych const. Jeśli funkcja ma być eksportowana, musisz zrezygnować ze static.
Wykluczone! _delay_ms jest makrem które działa tylko na wartościach stałych, użycie zmiennej spowoduje wkompilowanie biblioteki liczb zmiennoprzecinkowych a same opóźnienie będzie się miało nijak do tego oczekiwanego. Time może być stałą preprocesora (#define), nigdy zmienną. Dla zmiennej lepiej napisać osobną funkcję, która w pętli wykonuje _delay_ms(1)...
Wnioski są proste: wszystko, co jest zadeklarowane na poziomie zewnętrznym z atrybutem const i wszystko, co jest zadeklarowane wewnątrz procedur z atrybutami static const ląduje tylko w pamięci nieulotnej (o ile ktoś nie zaszalał ze skryptem konsolidatora). Oczywiście należy przy okazji mieć świadomość tego, jak należy użyć const w C deklarując stałą...
le jeżeli utworzę tablicę globalną jak poniżej: static const uint8_t tablica Nie. Co zrobi kompilator tego nie wiesz, bo modyfikatory static i const nie służą określaniu położenia zmiennych, czy tablic w pamięci. const ci jedynie daje tyle, że próba modyfikacji takiej tablicy powinna zakończyć się błędem podczas kompilacji. Oczywiście w praktyce, na...
A przypadkiem nie powinno być : static const unsigned short const sintable[23443] = {wszystkie wartosci}; ehh... sintable i tak i tak jest const
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ł,...
opcje są dwie: 1) wpisanie adresów bezpośrednio w kod w ten sposób: filename1;email addres (at) 1 filename2;email addres (at) 2 filename3;email addres (at) 3 filename4;email addres (at) 4 wtedy trzeba będzie dodać coś takiego [syntax=csharp] public Dictionary<string, string> _addressList; public Dictionary<string, string> AddressList { get...
Freddie Chopin - dzięki za podpowiedź, w wolnej chwili poczytam. Michałko12 - oczywiście masz rację, użyłem skrótu myślowego, chodziło mi o static const typ nazwa_zmiennej = wartość , by była to stała we Flash. Pozdrawiam, KT
Działa Napisz co było przyczyną niedziałania. chociaż z podejrzaną częstotliwością Co to znaczy podejrzana częstotliwość? Ale chyba te 10ms co jakie powinno być wyzwalane KeyProc() nie jest jakieś sztywne Jeśli jest tak jak w kodzie zamieszczonym we wcześniejszym poscie to jest to sztywne i ma prawie 10ms. Autorepetycje następują z różnymi czasami...
W LPCXpresso możesz bardzo łatwo tablicę ulokować, żeby rozpoczynała się od konkretnego adresu pamięci Flash. Klikasz w ustawienia projektu, pojawi się okno http://obrazki.elektroda.pl/3748232500_1... 1. Wybierasz MCU settings . 2. Klikasz Edit po czym pojawi się okienko konfiguracyjne pamięci. 3. Upewniasz się, że jest zaznaczona pamięć...
No i wszystko jasne skoro masz tablicę static const uint32_t image_data_rss która jest 32 bitowa, a w funkcji masz uint16_t *picture to co się dziwisz, że źle wyświetla. Tak jak pisałem wyeksportuj obrazek do formatu RGB565 i będzie ok.
Test_Board to klasa, która ma testować poniższą klase Board. Z racji tego, że część jej kodu jest chroniona to wystepuje deklaracja friend class Test_Board ; Problem leży w tym, że gdy w klasie Test_Board próbuje wywołać funkcję put_move kompilator wyrzuca: error: ‘bool board::Board::put_move(board::pos_X, board::pos_Y, board::_eplayer)’...
Nie definiuje się zmiennych z nadana wartością poczatkową w plikach nagłówkowych - co najwyżej deklaruje jako extern. Ewentualnie można inicjalizować w nagłówkach stałe statyczne (static const). Definicje zmiennych globalnych z nadaną wartością początkową muszą być w plikach c/cpp.
Czy biblioteka ESP NOW ma jakąś funkcjęsprawdzania RRSI? Chodzi chyba o RSSI? W trybie ESP-NOW możesz sprawdzać siłę sygnału odbieranych pakietów, ale w tym celu trzeba zdefiniować funkcję callback dla trybu promiscuous (kod dla ESP32):[syntax=c]esp_wifi_set_promiscuou... esp_wifi_set_promiscuous_rx_cb(&promiscu... ... void promiscuous_rx_cb(void...
Warto dodać, że jak od każdej reguły, także tu są pewne wyjątki - w plikach nagłówkowych czasami umieszcza się definicje funkcji static inline - efektem jest osadzenie w kodzie dołączającym nagłówek tychże funkcji, można także umieszczać definicje zmiennych static const - takie zmienne efektywnie zachowują się jak symbol zdefiniowany przez #define.
Witam Chciałbym pod konkretnym adresem w pamieci flash (dla PIC32MX675F256H) umieścić odpowiednie dane, jak to zrobić? Próbowałem coś takiego static const unsigned char __attribute__((address(0x9D0... ) bufor[2] ="0"; ale nie do konca chce działać, kompilator C32 lub XC32.
Cześć, zmierzyłem się z tym samym problemem w czytniku Lumos, którego udało się reanimować :) W trybie recovery (robot z otwartym brzuchem) nie można nic zrobić na wyświetlaczu, ale da się z adb (Android Debug Bridge) i USB. Po poprawnym dodaniu urządzenia można sprawdzić jego stan, np.: adb devices List of devices attached 0123456789ABCDEF recovery...
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...
Piszę program na Atmegę8 z zastosowaniem przetwornika ADC i poległem na zmiennych. Będę odczytywał wartość napięcie w zakresie 0,370 - 0,693 i zamieniał je na temperaturę. Zdjąłem charakterystykę f(v) = mc+b i próbuję zaprząc procesor do działania. Na razie przetwornik (chyba) nie ruszył, bo nie widać zmian na wyświetlaczu, ale póki co zająłem się sprawdzaniem...
Można też ładnie zoptymalizować dostęp do poszczególnych bitów: static const PROGMEM bit_masks[8] = { 0x80, 0x40, 0x20 ... }; inline bool getBit(const uint8_t memory[], uint8_t bitnum) { const uint8_t cellIndex = bitnum / 8; const uint8_t maskIndex = bitnum % 8; return memory[cellIndex] & pgm_read_byte(&bit_masks[maskInd...
Witam, Kolego atom1477 z ciekawości uruchomiłem Twój projekt, z tym że zmodyfikowałem tak main-a, że najpierw wypełniam ALGO_TAB jakimiś tam danymi, a później jednorazowo kasuję sektor i te dane zapisuję do FLASH-a i u mnie działa zawsze ok, niezależnie od poziomu optymalizacji. Nie chciało mi się już robić jakiegoś porównywania danych, to co zapisuję...
Władowałeś zmienne (bo na pewno to nie są stałe): double Kp = 0.9; double Ki = 50; double Kd = 0.0001; do pliku nagłówkowego, który jest includowany w kliku plikach c i się dziwisz, że masz redefinicję? Jeśli nie zmieniasz wartości Kp,i,d to zadeklaruj je jako stałe: static const double Kp = 0.9 albo: #define Kp 0.9
To co piszesz nie jest prawdą. Kompilator optymalizuje taki zapis, dopóki ktoś nie próbuje pobrać adresu DP to kompilator nie utworzy instancji tej zmiennej. Aby mieć pewność co do tego można dodać static const, chociaż zazwyczaj nie jest to potrzebne. To co proponujesz, czyli wykorzystanie definicji preprocesora jest błędnym pomysłem, osiąga się to...
Przy kompilacji bez -O, z samym -O, z -O1 działa prawidłowo. Z -O2, czy -Os nie kończy się. Dlaczego? Zadeklarownie 'ix' jako 'volatile' pomaga. No, ale żeby indeks pętli trzeba było deklarować 'volatile'... Kompilator: gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 (sprawdziłem na 2 komputerach) gcc (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010 (na dwóch)...
Działa w gcc 4.3.2, nie działa w 4.5.0 Już działa ;-) Działa jak wszystko masz w jednym pliku i kompilator może zoptymalizować pobieranie stałej przez get(). Jak rozbijesz kod na kilka plików, to stałe nadal są pobierane z RAMu. Sprawdziłem też jak to działa jeśli stała jest zadeklarowana jako static const i program zachowuje się podobnie (w jednym...
Całe cztery dni spędziłem nad tym, aby w końcu rozpracować BCH. Ale udało się. Problem wynikał z prawidłowego wyliczenia funkcji Galois Field. GF(2^m) gdzie: m = 13 dla bloku 512 bajtów m = 14 dla bloku 1024 bajty. Zaś w dokumentacji Linux'a znajdziemy takie primitive polynomials dla m= 5 .. 15: /* default primitive polynomials */ static const unsigned...
możesz zastosować pętlę, np tak: [syntax=c] static const uint8_t rowsel[] = { tu wpisujesz maski bitowe wyboru wierszy } for (....) { PORTx |= maska_wyłączenia_wierszy; PORTx &= rowsel[i]; ... } [/syntax] Na AVR wypadałoby w deklaracji tablicy użyć jeszcze zaklęcia PROGMEM, a przy dostępie do niej pseudofunkcji dostępu do pamięci programu. Szczęśliwie...
Cześć! Chciałem się zapytać o dobre nawyki, a dokładniej o kolejność deklaracji funkcji. Wiem, że w klasie deklaruje się następująco: Kolejność deklaracji w klasie: najpierw elementy publiczne, potem prywatne (public, protected, private). W obrębie każdej sekcji powinna być zachowana następująca kolejność: Deklaracje typów (typedef, enum) ...
Witam, Mam mały problem z odczytywaniem tablic. Próbuję napisać funkcję do wyświetlania czcionki z Antyaliasingiem. Wyświetlenie pojedynczego znaku mi wychodzi. Ale nie ważne, poradziłem sobie z tym i z koleją funkcją też sobie poradzę ale potrzebuję małej pomocy. Mam czcionkę zapisaną w taki sposób: [syntax=c] static const uint8_t image_data_Tahoma_14pt_0x20[68...
Zapomniałem dodać, że mam rezystory 51k na liniach MOSI i CS podciągnięte do 3,3V. Znalazłem takie coś: 6. Get error "unknown type name 'prog_char'" 7. Change all prog_char's in xitoa.c and main.c to PROGMEM from what I found on the internet 8. Compile again and get error "wide character array initialized from non-wide string" 9. Add char in front of...
Witam, Zlecę napisanie programu, który będzie odczytywał prędkość i czas co 0,2s z modułu GPRS i zapisywał na kartę pamięci mikroSD. Ogólnie projekt wykonałem na Arduino Mini + GPS GY-NEO6MV2, lecz zapis mam tylko co 1s i nie wiem, jak z tego mam wybrnąć. Na Arduino nie musi być, bo i tak po zaprogramowaniu muszę wylutować mikroprocesor i przenieść...
Skoro masz tylko 7 konkretnych modułów który może istnieć przy statku (lub nie) wystarczy: [syntax=c]#include <iostream> using namespace std; class Modules { public: typedef unsigned char Content; enum Names { A,B,C,D,E,F,G }; private: mutable Content content; public: Modules():content(0) {} static Content mask(Names m) { return 1<<m; }...
Dobrze zrozumiałeś. W moim przypadku to wygląda mniej-więcej tak: // \brief Low-level driver methods to use with the UDP USB controller // \see S_driver_methods const S_driver_methods sUDPMethods = { UDP_Init, UDP_Write, UDP_Read, UDP_Stall, UDP_Halt, UDP_RemoteWakeUp, UDP_ConfigureEndpoint, UDP_Attach, UDP_SetAddress, UDP_SetConfiguration, UDP_Handler,...
Przy użyciu deklaracji: const int tab lub static const int tab udało mi się zmieścić 1820 elementów, przy większej ilości kończy się pamięć: Fatal Error To powinno mi wystarczyć. Teoretycznie chyba powinno się zmieścić 2048 zmiennych typu int i 4096 char, ale jest tego jak widać trochę mniej. uint8_t - kompilator nie wie co to jest, MSP to nie AVR albo...
Dzięki za odpowiedź. Danych do kodu nie wstawię z powodów, które już podałem. Ale może znasz jakiś prostszy sposób, by użytkownik, nie mający pojęcia o przygotowaniu kodu dla mikrosterownika mógł w nim umieścić duże bloki swoich danych? Moje rozwiązanie dobrze się dotychczas sprawdza, ale chętnie poznam inne możliwości. Tak to wygląda dotychczas w pliku...
Poniżej rozwiązanie problemu, a teraz poczytaj o semaforach i dostępie do zmiennych globalnych z zadań FreeRTOS :) [syntax=c] #include <stdio.h> #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/semphr.h" #define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE #include "esp_log.h" static const char *TAG = "RTOS_LOG";...
Ja mam stronę WWW zapisaną w pliku INO tak: WebSocketsServer webSocket = WebSocketsServer(81); static const char PROGMEM INDEX_HTML[] = R"rawliteral( <!DOCTYPE html> <html> <head> ...... </html> )rawliteral"; Mój pierwszy działający przykład jest [url=https://github.com/kaczakat/ESP8266...
Witam, Niedawno rozpoczalem przygode z mikrokontrolerami. Dostalem w prezencie zestaw ZL10ARM i wspomagajac sie ksiazka "LPC2000. Mikrokontrolery z rdzeniem ARM7" zaczalem dzialac. Rozpoczalem od uruchamiania przykladowych programow autora ksiazki i ich modyfikacji wraz z proba (czasami nieudana) zrozumienia cos sie tam dzieje. Napotkalem na trudnosc...
(at)BlueDraco No to bardziej uniwersalnie [syntax=c] #include <stdint.h> #include <limits.h> enum { LITTLE_ENDIAN_32 = 0x03020100ul, BIG_ENDIAN_32 = 0x00010203ul, } static const union { uint8_t bytes[4]; uint32_t value; } test = { .bytes = { 0, 1, 2, 3 } }; uint16_t glue(uint8_t *bytes, int data_endianes) // != 0 - little { if(test.value...
Witam Mam problem z porównaniem zapisanej pozycji na karcie pamięci z pozycją odczytaną w danym momencie. Po prostu nie wiem jak to zrobić. Pomożecie ? :D OTO KOD KTORY MAM [syntax=c] // ****** BIBLIOTEKI ****************** #include <TinyGPS++.h> #include <SoftwareSerial.h> #include <SPI.h> #include <SD.h> File myFile; // *******...
Witam, Jest sobie termostat do laminatora oparty o ATMega8 - dzieło ze strony: http://thomaspfeifer.net/laminator_tempe... Ponieważ zrobiłem swoją wersję tego urządzenia wzbogaconą o dodatkowe funkcje, muszę zmodyfikować program, a z programowaniem w C nie miałem dotąd za wiele wspólnego... Na początek postanowiłem sprawdzić działanie...
A może zrób to sprawdzonym algorytmem? To jest szybkie liczenie CRC, wielomian dla MODBUS-a [syntax=c] static const U16 crc_table[256] = { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81,...
Znalazłem ciekawy kod do obsługi 7-segm, pozmieniałem rejestry pod atmega 32. Teraz mam problem tylko z "static const uint8_t __flash DIGITS[11]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xBF};" [syntax=c] /* * 7seg_v2.c * * Created on: 6 sie 2018 * Author: user */ /* * LEDMUX.c * * Created: 2014-08-13 00:12:54 * Author: tmf */ #include...
Mam pytanie: Jak zadeklarować zmienną tablicową będącą stałą tak by ta nie ładowała się do RAMu a jedynie pozostawała w pamięci Flash? Zauważyłem że poniższa deklaracja powoduje umieszczenie tablicy w RAM (było to powodem zwieszania sie programu, gdy 'skróciłem' tablicę o parę indeksów program zaczął działać). Proszę o pomoc. static const char FontLookup...
Define jako dyrektywa preprocesora powoduje po prostu wstawienie literału w miejsce danego symbolu. Problem w tym, że stosując define rezygnujesz z kontroli typów. Prowadzi to do kodu mniej przejrzystego i bardziej wrażliwego na błędy. Z kolei definicja stałej typu const, a może lepiej static const nie zajmuje miejsca, tak samo jak define, a kompilator...
A jak myślisz, jak zadziała pętla tego typu: Cały czas będzie odejmować 1 :/ Dobra teraz mam taki kod: [syntax=cpp]//Nauka obsługi ADC //ATMEGA8 12MHz #include <avr/io.h> #include <avr/interrupt.h> volatile unsigned char cyfry[4] = {0, 0, 0, 0}; static const uint8_t WYSWIETLACZ[4] = {0x01, 0x02, 0x04, 0x08}; static const uint8_t CYFRA[10]...
jak już koledzy wyżej wymienili: #F_CPU deklaruj w projekcie a poniżej moja drobna wariacja na temat:[syntax=c]#ifdef __TINYC__ // mod by: penknife <penknife1+wyswietlacz[at]gmail.com&g... 30 XII 2015 // Tiny C Compiler http://bellard.org/tcc/ // żeby przetestować uruchom: tcc -run "nazwa tego pliku.c" #include <stdio.h> #include <stdlib.h>...
Cześć! Biorąc do serca Wasze ostatnie podpowiedzi, by przesiąść się na inne kontrolery chciałem spróbować swoich sił z płytkami dostarczanymi przez Seeeduino wspierających technologię LoRa. Po dłuższej zabawie tymi urządzeniami natrafiłem na pewien problem. Rzecz w komunikacji drogą radiową. Chciałem przesłać między dwiema LoRaWan'ami string NEMA prosto...
Próbujesz zmiksować wszystkie warunki z całego programu w głowie, żeby mikrokontroler nie miał za dużo do roboty? "Flaga" od przycisku:[syntax=c]const uint8_t ev_przycisk = 1; void proste_przyciski() { static uint8_t stan_przycisku = 0; uint8_t t = digitalRead(pin); if (stan_przycisku != t) { stan_przycisku = t; if (t) { sterowanie_obsłuż_ev(ev_przycisk);...
Dzięki BlueDraco, jesteś niesamowity. Czy coś takiego się sprawdzi? [syntax=cpp]//Nauka obsługi wyswietlaczy //Atmega8 12MHz #include <avr/io.h> #include <avr/interrupt.h> #include <stdint.h> #include <avr/sleep.h> /* Cyfry: 1-00001100 - 0x0C 2-10110110 - 0xB6 3-10011110 - 0x9E 4-11001100 - 0xCC 5-11011010 - 0xDA 6-11111010 -...
Example: [syntax=csharp]using System.Diagnostics; class Program { static void Main() { LaunchCommandLineApp(); } /// <summary> /// Launch the legacy application with some options set. /// </summary> static void LaunchCommandLineApp() { // For the example const string ex1 = "C:\\"; const string ex2 = "C:\\Dir"; // Use ProcessStartInfo class...
Plik MCUFRIEND_kbv.cpp: [syntax=arduino]static const uint8_t R61581_regValues[] PROGMEM = { //from MCHIP Graphics Lib drvTFT001.c // Synchronization after reset TFTLCD_DELAY, 2, 0xff, 0, 0xff, 0, TFTLCD_DELAY, 4, 0xff, 0, 0xff, 0, 0xff, 0, 0xff, 0, TFTLCD_DELAY, 10, 0xb0, 1, 0x00, 0xb3, 4, 0x02,0x00,0x00,0x00, 0xc0, 8, 0x13,0x3b,0x00,0x00,0x00,0x01,0x00,0x43,...
W czym rozwiazanie z zamiana *.c na *.inc oraz warunkowa kompilacja w pliku types.common.c jest lepsze od warunkowej kompilacji kazdego pliku types_xxx.c z osobna ? type1.c: [syntax=c] #ifdef TYPE1 //tutaj wszystkie funkcje #endif [/syntax] type2.c: [syntax=c] #ifdef TYPE2 //tutaj wszystkie funkcje #endif [/syntax] Jak chcesz bardziej wyszukanego rozwiazania...
W tasku wywołujesz GUI_Exec()?!! Tak. A możesz mi jeszcze powiedzieć coś odnośnie GUIBuildera ? Tz w GUIBuilderze wstawiłem BMP na cały ekran no i mam plik w c. [syntax=c] // USER START (Optionally insert additional includes) // USER END #include "DIALOG.h" /***************************************... * * Defines * ****************************************...
const chara const static routing stm32 static
scenic komputer drzwi anglik dźwiękowy sygnalizacja
schemat podłączenia connects2 citroen xsara pompa
Piekarnik Amica - Niedziałający Sensor Dotykowy: Przyczyny i Rozwiązania ZOYI ZT-703S: Oscyloskop, Multimetr i Generator w Jednym