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...
Więc tnij jak pisałem, nie przejmując się czy działa tylko błędem. Wtedy znajdziesz i będziesz mądrzejszy ;-) Aha, a czy pies nie jest pogrzebany w braku static przed inline? Albert
no to doczytaj sobie jeszcze o takich rodzajach funkcji jak inline static itp - to znowu ci się wiele rozjaśni ;)
Wiem, że temat był już poruszany niejednokrotnie i liczę się z "niemiłymi" odpowiedziami... No to pierwsza "niemiła" odpowiedź: Zajrzyj do dokumentacji AVR-ka i sprawdź DOKŁADNIE co należy wpisać do rejestru DDRx , by port był wejściem lub wyjściem. //... static inline void owire_wy(void) { DDR(OWIRE_PORT) &= ~(1<<OWIRE_PIN);...
(at)Piotr Piechota Ja robiłbym coś w stylu: [syntax=c] static inline uint32_t bitfield_update(uint32_t bf, uint32_t mask, uint32_t value) { return (bf & ~mask) | (value & mask); } .... const uint32_t mask = RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIP | RCC_PLLSAICFGR_PLLSAIQ | RCC_PLLSAICFGR_PLLSAIR; const uint32_t value = 192 // N=192...
https://www.nxp.com/downloads/en/softwar... Rzeczywiście nie rozpisali się w tym doku odnośnie sterowania GPIO za pomocą tej biblioteki, ale to nie jest jakaś tajemnica. Wystarczy zajrzeć do kodu odpowiedzialnego za gpio. [syntax=c]/* gpio_13xx_1.h * (at)brief LPC13xx GPIO chip driver for LPC13(15/16/17/45/46/47) families *...
Podmieniłem #define EVE_CFAF800480E0_050SC (ta z linii 104) na #define EVE_RVT35. Pytanie dlaczego akurat tutaj trzeba to podmienić skoro w 75 linii jest to samo #define EVE_RVT35 ?? Poniewaz wszystkie wczesniejsze #define masz w warunku #if 0 #endif czyli niespelnionym. Zreszta w CubeIde powinienes miec to zaznaczone na szaro (wylaczone). Czy zatem...
Widzę, że chyba nie za bardzo wiesz, jak się do tego zabrać. Poniżej zmiany które należy dokonać w pliku "mcufriend_shield" dotyczące funkcji: [syntax=arduino] #define BMASK (3<<0)//00000011 #define EMASK (1<<3)//00001000 #define DMASK ((7<<5)//11100000 #define CMASK (3<<0)//00000011 static inline //hope we use r24 void write_8(uint8_t...
[syntax=c] char wynik1[3]; //bufor1 dla LCD char wynik2[2]; //bufor2 dla LCD [/syntax] Te bufory są za małe na przechowanie warości zwracanych przez itoa. Nie wziąłeś pod uwagę null termination stringa. Twój program jeżeli działa to przypadkiem;) Jeżeli chcesz to możesz wząć jakąś uproszczoną wersję itoa. Np przerobić coś istniejącego z internetu. [syntax=c]...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
W F030 strona ma wielkość 1kB co oznacza, że zmieści się tylko 256 zmiennych Jak to obliczyłeś? Pewnie 1024/4 bajty = 256, ale tutaj tak to nie działa. Strona 1024 bajty to 1024 bajty, inaczej 512 półsłów. Zapis do stron pamięci w STM32F0 wymaga zapisywania półsłów, do jednej strony oczywiście można zapisać 512 półsłów. W poniższym przykładzie zapisuję...
Można to zainicjalizować tak: [syntax=c] static inline void init_ADC(void) { ADMUX |= _BV(REFS0); ADCSRA = _BV(ADEN); #if F_CPU>=8000000ul ADCSRA|=_BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2)... #endif #if ((F_CPU>=4000000ul)&&(F_CPU&l... ADCSRA|=_BV(ADPS0)|_BV(ADPS2); #endif #if ((F_CPU>=2000000ul)&&(F_CPU&l... ADCSRA|=_BV(ADPS2);...
Witam, Skleciłem na szybko układ na "pająka": ATMEGA128, Zasilanie 5V, Kwarc 20Mhz, Rezystory 470 Ohm w liniach RGB Poprawiłem jeszcze trochę timingi aby nie szarpało na początku obrazu. http://obrazki.elektroda.pl/4106040400_1... Przy okazji zapraszam do zaglądnięcia na mój projekt również wykorzystujący VGA ale przy pomocy sprzętowej...
Po pierwsze to powinieneś solidnie komentować takie funkcje. Opisz sobie dokładnie które zmienne powinny mieć jakie jednostki. Gdybyś to zrobił to byś zobaczył że do zmiennej która trzyma wartość w stopniach przypisujesz radiany. Dalej - zastąp RAD2ST makrem DEG2RAD(x). Będzie czytelniej. Jeżeli nie masz jakiejś kosmicznej konieczności stosowania liczb...
No, to tylko część modyfikacji, trzeba przerobić cały plik na "arduinowy" bo nie widzi że to jest dla LGT tylko robi jak dla Atmega328P, a on nie ma takich rejestrów. No i resztę funkcji, bo odczyt musi być też między ustawieniami rejestrów: https://obrazki.elektroda.pl/8960353100_... Może inicjalizacje IO można zostawić poprzednią...
Kiedyś umieściłem na obecnie niedostępnej stronie and.elektroda.eu materiał o dekodowaniu sygnału DCF. Urządzenie potrzebne było w urządzeniu, które wymagało synchronizacji czasu w pomieszczeniu gdzie wyprowadzenie anteny zewnętrznej do GPS było utrudnione. Poniżej umieszczam treść oryginalnego materiału, który może być pomocny przy budowaniu urządzeń...
Dodatkowo wyświetlane znaki wynikają z nieobsługiwania UTF-8 przez klasę String i bibliotekę Adafruit-GFX. Rozwiązaniem problemu powinna być konwersja polskich znaków w tekstach z formatu UTF-8 (lub Unicode) na 8-bitowy Windows1250. Zaproponowałem kiedyś na Elektrodzie taką funkcję konwertującą: [syntax=c]// konwertuje polskie znaki z UTF-8 i Unicode...
Potrzebuję sterownika SD_SPI dla FATFS dla tlsr8258. Jeśli ktoś taki posiada, mógłby się nim podzielić? (at)ElektrodaBot AI: Jakiego środowiska programistycznego lub SDK używasz z TLSR8258 (np. Telink SDK w wersji... Wstępna ocena dostępnych informacji - Pytasz o sterownik SD-over-SPI (SD_SPI), który podłącza się do FatFs na Telink TLSR8258. - Odpowiedziałeś...
Zobacz sobie do rejestru RSTCTRL.RSTFR. (at)ElektrodaBot W poniższym fragmencie kodzie w C dla AVR128DA32: int main(void) { CCP = CCP_IOREG_gc; CLKCTRL.OSCHFCTRLA = CLKCTRL_FRQSEL_8M_gc;// OK init_Uc(); // initialization mikrokontrolera TWI1_init(); ; init_MCP(); // initialization MCP23017 lcd_init(); lcd_gotoxy(5,0); lcd_puts("dziala OK"); _delay_ms(500);...
A w jaki sposób dodać obsługę touch pada 4 linie rezystancyjny , mój kod wygląda tak : /***** Sterownik akwariowy z menu, UART i touchpad – ATmega128, KS0108 128x64 *****/ #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdio.h> #include <string.h> #include <stdbool.h>...
https://obrazki.elektroda.pl/6969507000_... Witam Po wykonaniu zegara na lampach Nixie, wpadłem na pomysł wykonania czegoś o podobnej zasadzie działania, lecz z długą żywotnością owych wyświetlaczy cyferek. Obudowa wykonana ze sklejki 8 mm, którą wyfrezowałem na cnc3018, sklejona warstwowo i pomalowana lakierobejcą. Z czarnej pleksi...
Makro zostanie rozwinięte do: [syntax=c] y = (x++) * (x++); [/syntax] Zatem przed mnożeniem dochodzi do dwukrotnej inkrementacji z 3 do 5. To fajny przykład dlaczego nie ma sensu takich makr robić Zamiast tego lepiej zrobić: [syntax=c] static inline int SQ(int x) { return x*x; } [/syntax]
(at)ElektrodaBot - wypróbowałem, na razie tylko wersję „IDIV hammer”; wyniki: * Stabilizowanie zegara wychodzi lepiej, jak się ustawi governor=powersave - wtedy wszystkie rdzenie działają na minimalnej częstotliwości; z governor=performance większość rdzeni działa na maksymalnej częstotliwości, ale część na znacznie niższej; po ustawieniu no_turbo=0...
makro, static inline itd itd, rozwiązań problemu jest wiele.
U mnie sa roznice. Kompiluje na O2 (przy asm i tak to nie ma znaczenia). Procek dziala na 72MHz. Jeszcze raz powrorzylem test. Zapis do pamieci bb u mnie jest wolniejszy: [syntax=c] int a; volatile int xx = 1; volatile int k; static inline void bitband_str_prepare(void) { asm volatile(" \n" "movw r7, #0x84A8 \n" "movt r7, #0x4225 \n" ); } static inline...
(at)ElektrodaBot napisz kod i2c dla mikrokontrolera PIC16F1526 i układu scalonego PCA9685 do sterowania serwomotorem. Wstępna ocena dostępnych informacji Dwie przykładowe odpowiedzi offline zawierają już solidny sterownik bare-metal dla: - funkcji master I²C na module MSSP PIC16F1526 - Podstawowa konfiguracja PCA9685 do pracy z serwomechanizmem 50...
Dodałem static i czas dalej jest taki sam Zarówno ze static inline jak i samo inline jak i bez dyrektywy inline. Więc czego powinienem użyć przy tej funkcji: [syntax=c] uint8_t przesuniecie_w_lewo(uint8_t liczba,int8_t oile) { return (oile>0) ? liczba<<oile : liczba>>-oile; } [/syntax] Samego inline, czy static inline?
https://obrazki.elektroda.pl/2135111100_... Witajcie moi drodzy. Przedstawię tutaj płytkę Fubarino-Eth oferującą łączność USB i Ethernet opartą na 32-bitowym PIC32MX795F512H (512KB Flash, 128KB RAM) i nieśmiertelnym ENC28J60. Płytka ta stanowi moją wersję słynnego Fubarino-SD 1.5 od Projekt płytki Projekt ten jest moją przerobioną...
Jak coś już coś muszę na pollingu robić to: tick_ms_irq musi być wywoływane w przerwaniu od tmera co 1ms. BTW: Ten kod z HAL'a to niezła padaka: if, if, if, if .... :)
Testowałem osobiście ten kod. Działa to fajnie ale jest jeden błąd w kodzie. Odpaliłem program a ATMega328 i nie działał ADC0. Należy zmienić to: [syntax=c] static inline void adc_channel(uint8_t channel){ ADMUX &= ~(0b11111); ADMUX |= 0b11111 & channel; } [/syntax] Na to: [syntax=c] static inline void adc_channel(uint8_t pin){ ADMUX = (ADMUX & 0xF0)...
Witam , Mam kolejne pytanie/ prośbę : Jak zapisać poprawnie poniższe proste funkcje inline z atrybutem "always_inline" (funkcje muszą być dostępne w pliku z main) : 1.) czy obowiązkowo rozdzielać deklarację/definicję, jeśli tak to gdzie xx.h czy xx.c ? 2.) czy może obowiązkowo w pliku z main to w jaki sposób - zapis ? [syntax=c]static inline bool F_isON(uint8_t...
Witam Jak już widzicie po tytule nie mogę uzyskać poprawnego wyniku z przetwornika zewnętrznego PCF8591 połączonego z mikrokontrolerem (Atmega16-8Mhz pod piny SCL i SDA) poprzez programowe I2C. Już nie mam pomysłów co może być źle, w czym tkwi haczyk. Wszystko wydaje się być dobrze podłączone, program kompiluje się bez błędów. Kod sprawdziłem już na...
Nie. Kiedyś funkcja była jako static inline z atrybutem always_inline, no i kompilator skracał sobie bezpośrednie wywołania. Bez tego volatile komunikacja częściej zawodzi.
Trzeba dodać, że static inline będzie powielał kod w miejscach wywołania, co powoduje że kod działa szybciej (brak call'i) ale rozmiar kodu będzie większy. Ale jeśli użyjesz gdzieś pointera do funkcji to już funkcja skompiluje się normalnie. Takie rzeczy najlepiej czytać w dokumentacji do kompilatora, bo można czasem się nie miło zdziwić jaką mieli...
Funkcje static inline powinny znajdować się w pliku nagłówka (.h). To troche przesadzone.
Tak, jak pisze tmf, albo biblioteki, albo owijki, tylko to trochę upierdliwe: plik type1.h [syntax=c] #ifndef TYPE1_H #define TYPE1_H void type1_funkcja1(void); static inline void funkcja1(void) { type1_funkcja1() } #endif[/syntax] plik type2.h [syntax=c] #ifndef TYPE2_H #define TYPE2_H void type2_funkcja1(void); static inline void funkcja1(void) {...
Nie wiem jak sprawdzić tylko ten fragment... Tu masz "byka". ustawienie flagi :idea: Po wtóre: Powinien wyglądać np. tak: [syntax=c_loadrunner]static inline void I2C_WaitForComplete() {while (!(TWCR & (1<<TWINT)));}; // czeka na ustawienie flagi TWINT[/syntax]
Już się pogubiłem w tym co poszecie... Mam teraz tak master [syntax=cpp] //-----------------INICJALIZACJA SPI------------------------- static inline void SPI_Set_SS() //obsługa ATmega32 { PORTB|=(1<<PB3); //1 to ADS1256 nieaktywny (pinSS) PORTB&=~(1<<PB4); //ATmega32 aktywny (pin SS) } static inline void SPI_Reset_SS() { PORTB|=(1<<PB4);...
Nie wiem jak to jest z funkcjami static, ale static inline mogą być zdefiniowane w innym pliku (muszą być w *.h). Mogą wtedy być wywoływane np. w obsłudze przerwania, zdefiniowanej w pliku *.c, w którym jest też main().
W procedurze xmit_spi to ja nie widzę nic sensownego, a rcvr_spi można zapisać jako static inline albo makro o treści spi_Trans(0xff)
Pisałeś do mnie, że nowa bateria "naprawiła" sygnał przychodzący z pilota. Przejrzałem kod i niewiele da się zoptymalizować. Prostą techniką uzyskałem dodatkowo 2µs precyzji odczytu, ale w tej architekturze programu niewiele więcej da się zrobić. Dodałem obsługę przycisku "pauza" na pilocie. [syntax=c]#define IR_DEBUG //========================= Constants...
1. Co to jest "nkoder"? Nie znam takiego urządzenia. Słyszałem coś o enkoderach. 2. nie prościej; static inline _Bool sprawdz_stan(int nkoderLewy) { return nkoderLewy < 9000; } ... o ile to w ogóle musi być funkcja 3. ustawiasz jakieś sterowanie gdy zatrzask == 1, a nie zmieniasz nic gdy zatrzask == 0, więc nic dziwnego, że robi dalej to samo, co...
Odwracasz kota ogonem. Nigdzie nie pisałem, że ta oszczędność do czegokolwiek jest potrzebna. Ale skoro autora to gnębi, to mu odpowiadamy. A poznanie kompilatora może kiedyś się przydać. Piszesz o asemblerze, modyfikatory typu const, static, inline po coś wymyślono. Dobrym nawykiem jest informować kompilator o swoich intencjach, a nie pisać byle się...
Pokaż trochę więcej kodu. Użycie powyższych makr może być niebezpieczne w niektórych przypadkach. Np: [syntax=c] if (a) TYL; [/syntax] Jeżeli zamiast makr użyjesz funkcji zdefiniowanych jako static inline nie stracisz nic na wydajności.
Zaprojektowałem i zbudowałem płytkę wyposażoną w procesor STM32F107RCT6 oraz dekoder popularny MP3 VS1003. Jest to kolejna wersja starszego projektu na PIC32, który przenoszę na nowy mikrokontroler. Większa część projektu PCB pochodzi ze starej wersji. Do komunikacji z VS1003 używam popularnej biblioteki Andy'ego Karpova, którą już wcześniej przeportowałem...
(at)nvsync Nie chcę się wdawać w poboczne dyskusje - poprzedniego posta usunąłem, bo nic nie wnosił nowego po Twoim poście, a Twojego jeszcze nie było, jak go pisałem. Tym niemniej Twoje uwagi do niego, to nadinterpretacja. Ani nie polecałem, ani nie odradzałem stosowania tagów - po prostu napisałem, że dla działania programu nie ma to żadnego znaczenia....
Mam kod programu w którym definiuję stałą F_CPU: [syntax=c] #include <util/delay.h> #define F_CPU 8000000L //definicja częstotliwości zegara [/syntax] W bibliotece delay.h także jest zdefiniowany F_CPU i wygląda to tak: [syntax=c] #if !defined(__DOXYGEN__) static inline void _delay_us(double __us) __attribute__((always_inline)); static inline...
Filtrować zasilanie zawsze warto. Ja przy swoim hc pin sclr podciągałem zawsze przez rezystor 470. Dodatkowo moja funkcja wygląda tak: [syntax=c]void Master_SPI_Transmit(uint8_t data) { SPI_RESET_SS(); SPDR=data; while(!(SPSR & (1<<SPIF))); SPI_SET_SS(); }[/syntax] Gdzie [syntax=c]static inline void SPI_SET_SS() { PORTB|=(1<<PB2); }...
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.
Przepisałem tą funkcję debounce i działa jeszcze gorzej, niż ta moja. Dodano po 4 Zamykam
inline static funkcja static inline stm32 static inline
kamera canon mikrotik podział pasma iskrzenie komutatorze prędkości
jakie tanie dobre narzędzia jakie tanie dobre narzędzia
Zamienność modułów w zmywarkach Electrolux PB150 Jak zdjąć sprzęgło w pile Dolpima PS 490 - instrukcja