no to doczytaj sobie jeszcze o takich rodzajach funkcji jak inline static itp - to znowu ci się wiele rozjaśni ;)
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
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...
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...
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...
[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]...
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ę...
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ą...
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.
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);...
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ń...
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...
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...
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...
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>...
(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 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]
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ą...
makro, static inline itd itd, rozwiązań problemu jest wiele.
(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?
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...
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...
Po kilku godzinach program odpaliłem ..... podświetlanie się załącza dopiero po naciśnięciu kilka razy klawisza, monitor pokazuje start i numery naciśnietych klawiszy i to nie za każdym naciśnięciem. nie wiem jak "zatrzymać" dany ekran menu żeby zrealizować inna funkcje np; zmiana stanu wyjścia /* * sterownik który wykończy mnie i innych ..............
warning: function declaration isn't a prototype - wyskakują mi takie 3 warningi, odnoszą się one do funkcji inline static void, czyli inicjacja, StartZliczania i StopZliczania. Szukałem odpowiedzi w dokumentacji, ale nic nie znalazłem. Wiecie co może być źle??
ok.. dopiero usiadlem wiec zaraz zajrze do tych wskazowek.... a poki co to tu masz kod: main.c #include "Board.h" void init(void) { // enable peripheral clock for PIO controller AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOB); // enable reset-key on board AT91C_BASE_RSTC->RSTC_RMR = (0xA5000000 | AT91C_RSTC_URSTEN);...
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...
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 :) Na wstępie podam że jestem mocno początkujący w dziedzinie procesorów ARM, ale do rzeczy. Skonfigurowałem Eclipse zgodnie z opisem ze strony Freddie Chopin'a. Skompilowałem przykład, również z tej samej strony, dla lpc2103. Pliki "out" wygenerowały się. Jako że posiadam uC at91sam7s64 przerobiłem przykład pod ten układ w następujący sposób:...
Jeśli jest jakaś literatura, proszę o naprowadzenie Oczywiście że jest. Nazywa się programming manual (w załaczeniu do M4) oraz "Cortex-Mx Technical Reference Manual" na stronach ARM-a. Są też fajne książki Josepha Yiu (wygoogluj sobie - kupisz na amazonie) Jaka jest najprostsza metoda do zapisania wartości rejestru lr do zmiennej języka c? Jak to...
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...
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...
Hmm, zarówno zmiana optymalizacji, jak i dodanie atrybutu nie pomogło. Próbowałem nawet wywalić deklarację z pliku h, i w każdym pliku c dodawać extern inline void funkcja( void ); , żeby poszukał funkcji na zewnątrz, co prawda kompilacja przebiegała bez błędu, jednak dalej funkcja nie była rozwijana. N.B. to kompletnie bez sensu. Kompilator...
Musisz niestety troszkę się pouczyć C. Includuje się pliki .h, które zawierają: [syntax=c]/* definicje i makra */ #define STRSIZE 50 /* deklaracje typów */ typedef struct { int a; float f; double d; char c[STRSIZE]; }mytype; /* deklaracje funkcji ale bez definicji (czyli "ciała") */ int foo(int,int, mytype *); /* ddeklarcje extern - zmiennych zdefiniowanych...
Witam, chciałem się poradzić wyjadaczy (albo każdego kto się zna i może coś doradzić) od STM32F103 nt. wydajnej obsługi portów na tym procku. Nie pisałem dużo rzeczy na te procki a już szczególnie nie takie które wymagały świetnej wydajności. Teraz bardzo zależy mi na tym, zarówno na obsłudze portów typu (odczytaj port/zapisz na port, odczytaj/zapisz...
Cze, //Funkcja inline static void spi_init(void) { return; } //Program główny int main() { DDRB |= 1<<5; PORTB &=~(1<<5); spi_init(); while(1) PORTB |= 1<<5; } Sprawdzam stan na porcie PORTB5. Gdy zakomentuje wywołanie funkcji, program działa. Jest stan wysoki na wyjściu....
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...
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.
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) {...
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);...
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...
Przepisałem tą funkcję debounce i działa jeszcze gorzej, niż ta moja. Dodano po 4 Zamykam
static inline funkcja static inline stm32 static inline
renault sterownik silnik generator bitmap farby usuwanie
jakie tanie dobre narzędzia jakie tanie dobre narzędzia
Kod błędu EMS P02D100 - wtryskiwacz paliwa Opel Astra H – demontaż wzmacniacza m.cz. Premium Sound, CD40, CD70, lokalizacja, procedura