ODR steruje wtedy pullupem jeśli taki tryb działania wybierzesz. Co do funkcji działających na portach, to - jak pisałem wyżej - dorobienie takiej która robi konfigurację dla więcej niż jednego pinu to 2 linijki, a taka która wystawia wartość czy ją odczytuje jest bezsensu, bo od tego masz rejestry, więc czemu nie odczytać ich wprost (ewentualnie funkcja...
ehh... __nop(); //wstawia dokladnie jeden NOP, dziala nawet na -O3 -Otime LIPA [syntax=C] __asm void nop_asm (void) { NOP BX LR } [/syntax] Po co skok i return tylko po to aby wykonac JEDEN nop? Bezsens. Nop trwa jeden cykl, a wywolanie i powrot powyzszej funkcji to kilka cykli. I tego nie da sie oczywiscie zmienić, bo keil nie inline-uje funkcji...
A skąd ma wiedzieć jak nie zaincludowałeś niczego co definiuje te typy. Np stdint w C nie ma takich typów, dopóki sobie nie zrobisz ani __IO ani innych cudów. jak masz wstręt do includów to możesz sobie gcc internalsa __uint8_t zastosować. Przy okazji ja osobiście wolę zamiast takich definicji funkcje inline.
I czemu Ty na miłość boską wkładasz całą funkcję w header ? To właściwe miejsce na funkcję "static inline" Albert
A nie prościej napisać kilka uniwersalnych funkcji inline? Nie będzie kary wydajnościowej.
Uzyj funkcji. Jezeli chcesz aby zachowywala sie jak makro to dodaj atrybut inline. BTW: mozesz pisac wieloninikowe makra (oddzielasz linie \) [syntax=c] #define set_ADC1_sample_time(value, channel) \ do { \ \ } while(0) [/syntax] Info na temat jak uzywac funkcji inline: http://www.greenend.org.uk/rjk/tech/inli...
Generalnie taki jest właśnie sens użycia static. Jeśli funkcja ma być dostępna w różnych miejscach, to umiść ją w nagłówku jako static inline.
Twój kod jest zły, bo czwórki bitów dla poszczególnych przerwań są w tych tablicach IP[] upakowane po 8. Funkcje z CMSISa do przerwań (do NVIC) są generalnie funkcjami inline, więc efekt finalny będziesz miał taki sam - czy użyjesz swoich dostępów do rejestrów, czy tych funkcji. Ja bym proponował zostać przy tych funkcjach. Jak koniecznie chcesz poczytać,...
(at)up ale od tego chyba jest inline. Poza tym chodzi jeszcze o podział kodu na pewne czytelne bloki.
Nie za bardzo znam uVision4 ale jeżeli masz #include "stm32f10x_lib.h to znaczy że korzystasz ze skompilowanej biblioteki SPL dostarczonej wraz ze środowiskiem i nie powinieneś już dodawać jej źródeł do projektu. A jak masz źródła w strukturze projektu to zrób #include "stm32f10x.h" P.S. uVision4 nie zna inline ? może przejdź na Eclipse + gcc + OpenOCD...
Masz nagłówek "stm32f10x.h" to z niego korzystaj. A nie stawiasz wszędzie (1 << X). Na poniższym przykładzie widać co chce zrobić... nawet nie potrzeba komentarzy, kto już jest obeznany trochę z STM32. [syntax=c]inline void RCC_conf(void){ FLASH->ACR |= FLASH_ACR_LATENCY_0; //set FLASH latency[2:0]=001, one state wait state, if 24MHz < SYSCLK...
Sorry. testy nie byly po kolei. Teraz juz sa: [syntax=c] 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 void bitband_str(void) { asm volatile(" \n" "str r6, [r7] \n" ); } static inline void ram_str_prepare(void) { asm volatile(" \n"...
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.
Tu masz na pewno działające. [syntax=c]void I2C1_init(void) { I2C1 -> CR1 |= I2C_CR1_SWRST; while(I2C1 -> SR2); I2C1 -> CR1 &= ~(I2C_CR1_SWRST); I2C1 -> CR2 = 45; // clock in megahertz's I2C1 -> TRISE = 46; I2C1 -> CCR = 57; I2C1 -> CR1 |= (I2C_CR1_PE); } void I2C1_start(uint8_t addr) { uint32_t foo; I2C1 -> CR1 |= (I2C_CR1_START); while(!((I2C1 ->...
Jak już sam zauważyłeś, słowo "inline" nie jest częścią języka C, a dopiero C++. Zamiast jednak włączać C++ proponuję dodać globalną definicję tej treści: #define inline __attribute__ ((always_inline)) Kolejnym problemem będzie to, że funkcje inline mogą być definiowane chyba jedynie w plikach nagłówkowych (.h), a nie w kodzie (.c). Tyle na początek....
Współcześnie (zresztą od 25 lat) "x86" oznacza 32-bitową wersję 86, którą programuje się praktycznie wyłączenie w trybie "płaskim", w którym programista może zapomnieć o istnieniu rejestrów selektorów. Gdzieś Ty się uchował z tymi 16 bitami? Sądzę, ze produkcyjnego kodu 32b nie wykonałem ani linijki, a 16b bywało, panocku, bywało, czasem order dali,...
wprost nieobsługuje się przerwania nie rozumiem. O co Ci chodzi Ale jak RX nie jest volatile to kompilator uzna że nie może się zmienić w tej pętli while i odczytać wartości tylko raz. Później będzie porównywać tylko wartości rejestrów, Zobacz sobie jak to działa : https://godbolt.org/z/pKPEx2 wywołać którąś assemblerową instrukcję synchronizacyjną...
Instrukcja BKPT jest ciężka w użyciu pod Keilem, bo nie obsługuje on inline asemblera T2. Wstawka asemblerowa T2 jest musi być osobną funkcją __asm, tak są napisane funkcje arm_intrinsics z bibliotek ;] Ale oczywiście można ją wykorzystywać wywołując odpowiednią funkcję.
Jakie jest taktowanie MCU? Bo te 6 MHz to też niezbyt imponująco... 48MHz. 8 cykli na cały obrót pętli. Raczej standard. W STM32 M0 wygląda to w zasadzie identycznie. W M3 tylko trochę lepiej. Gdzieś kiedyś czytałem, że M0+ ma ulepszoną prędkość GPIO. https://community.st.com/t5/stm32-mcus-p...
Poniewaz wszystkie wczesniejsze #define masz w warunku #if 0 #endif czyli niespelnionym. Zreszta w CubeIde powinienes miec to zaznaczone na szaro (wylaczone). A czy to nie powinno być zrobione tak, że ja powinienem zamienić #define EVE_EVE3_50G z linijki 119 na #define EVE_RVT35 zamiast linijki 104? https://obrazki.elektroda.pl/8326677800_...
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ę...
ARM7, Cortex-M3 to - powiedzmy - "handlowe nazwy" architektur, odpowiednio ARMv4 i ARMv7-M. Oczywiście nowsza jest ARMv7 czyli własnie Cortex. ARM7 jest już nieco przestarzały, a układ LPC2106 to w ogóle antyk - NXP od czasu tego układu wypuściło bardzo wiele fajnych układów z tym rdzeniem, dokładnie chodzi o rodziny LPC23xx i LPC24xx - LPC2106 to chyba...
Przez czas jak pisałeś te dwa posty już ze 4x przejrzałbyś CAŁĄ listę przerwań, bo nie wiem skąd założenie, że koniecznie muszą być po kolei. P.S. Co złego jest w funkcji z CMSISa robiącej to samo co Ty tylko czytelniej? Przy okazji jak być jej użył, to nie robiłbyś zupełnie bezsensownego ORa... P.S.2. Funkcja z CMSIS jest typu inline - nie da się tego...
Po co ten cały dziwny kod w callbackach. Przesuwanie bitowe w prawo liczby ze znakiem jest niesprecyzowane przez C (implementation definded behaviour) a Ty po prostu chesz skopiować dane z jednej tablicy do drugiej. Uzyj memcpy memcpy(txBuf, rxBuf, 4 * sizeof(*txBuf)); /* i */ memcpy(txBuf + 4, rxBuf + 4, 4 * sizeof(*txBuf));...
Spróbuje i assemblera do prostych rzeczy Ciekaw jestem ile w swoim RTOS-ie kolega (at)Freddie Chopin napisał asemblera (stawiam ze pewnie ze 100 linijek jak już wyjścia nie miał)? Ja osobiście od dawna (poza kilkoma elementarnymi inline-ami do dsp) ani jednej. Te instrukcje procesora, które ew mogą Ci się przydać masz w CMSIS w postaci wygodnych definicji...
Po _powrocie_ z funkcji. Ewentualnie postaw sobie breakpointa w HAL_DMA_Start_IT() i wtedy zobacz. Do momentu w którym kompilator nie napotka czegoś co można by nazwać "ogólnym miejscem synchronizacji" (wywołanie funkcji nie-inline, powrót z funkcji nie-inline, dostęp do pamięci oznaczonej jako volatile, ...) to może sobie poprzestawiać te instrukcje...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Wywalić trzeba tylko sterowanie CS-em bo to jest do specyficznej syteuacji [syntax=c]void lcdInitialise(int32_t orientation) { lcdWriteCommand(EXIT_SLEEP_MODE); delay_ms(5); // Wait for the screen to wake up lcdWriteCommand(SET_PIXEL_FORMAT); lcdWriteParameter(0x05); // 16 bits per pixel lcdWriteCommand(SET_GAMMA_CURVE); lcdWriteParameter(0x04); //...
Witajcie, Potrzebuję zrealizować wizualizację danych o małej zmienności, które pochodzą z kilkunastu sensorów. Autorskie rozwiązania typu TFT+GUI+TP odrzuciłem ze względu na brak kompatybilności z różnymi systemami i dodatkowe koszty związane z opracowaniem sprzętu. Po analizie dostępnych rozwiązań padło na Domoticz + MySensors ze względu na możliwość...
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...
asm cortexa-m3 jest naprawdę prosty. wystarczy się zapoznać z dokumentacją, którą producent rdzenia udostępnia. Ja pisałem całe funkcje w tym asmie, bo inline assembler nie jest obslugiwany w keilu dla rozkazów thumb2 (nie wiem czemu, czasami byloby wygodnie). Często jednak jest tak, że kod C wygenerowany przez kompilator jest jednak lepszy niż to,...
no już Ci to napisałem. jezeli chcesz robić prawdziwe delaye to zrób sobie przerwanie timera (czy systicka) i inkrementuj jakąś zmienną w znanym sobie okresie czasu. Jak chcesz napisać sobie taką blokująca funkcję delay - to raczej w asemblerze, czy też inline asemblerze, aby nie byc zależnym od kompilatora jezeli chodzi o długość iteracji i optymalizacje,.
Witam, Mam problem z ADC - mianowicie udało mi się uruchomić odczyt z kanału 11 (ADC1), ale nie działa odczyt z kanału 10 oraz po odczycie w Jscope widzę, że pomiar z kanału 11 wpływa częściowo na pomiar z kanału 10. Kod: http://obrazki.elektroda.pl/5157297400_1... [/code]
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...
Witam, Bawię się STM32F1 bez bibliotek wykorzystując książkę "STM32. Aplikacje i ćwiczenia w języku C" i zestaw ZL27ARM. Jestem przy RTC i udało mi się uruchomić. Ale zastanawia mnie grupowanie przerwań. Czytając post http://www.elektroda.pl/rtvforum/topic23... wywnioskowałem, że można użyć funkcji inline z pliku core_cm3.h Chciałbym testowo...
(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...
Chodzi cały czas o grafiki typu interfejsu użytkownika - przyciski, suwaki itp. Nie o wyświetlanie skomplikowanych animacji czy filmów, nie ma tu przesyłu dużego strumienia danych, a więc nie ma znaczenia w jakiej pamięci są grafiki i czy są przesyłane przez procesor czy nie - mogą być i przez procesor, i przez DMA, np. SPI->FSMC. LCD_WriteRAM_Prepare();...
Bo taki kod jest bardziej dla mnie czytelny, mam rejestr na którym wykonuję dwie operacje, zamiast makaronu ifów które ustawiają kolejne rejestry (zależne od ustawień). Funkcja może wyglądać tak: [syntax=c]static inline void GPIO_Config(GPIO_TypeDef* gpio, uint8_t pin, uint8_t conf){ if(pin > 7){ gpio->CRH &= ~( 0xF << ((pin - 8) * 4));...
Wszystkie te których używam (sqrtf(), powf(), acosf()) są liczone przez FPU? Niekoniecznie. W Newlib (czyli libm.a) nie ma implementacji specjalnie dla tego koprocesora, jednak jeśli masz włączoną optymalizację, skonfigurowane FPU (opcje kompilacji) i dodaną flagę -ffast-math, to kompilator niektóre z nich potraktuje jako funkcje inline i zastąpi odpowiednimi...
Adres rejestru danych zapisałeś tak: Tutaj akurat USART3_BASE jest liczbą, która dopiero później w nagłówku jest używana jako część definicji struktury USART3, więc problemu nie ma. Poza tym konfiguracje peryferiów razem z tymi wielkimi strukturami przenieś do oddzielnych funkcji, niech te struktury nie będą zmiennymi globalnymi! Przecież nie są globalne...
Witam Hmm, walczę od jakiegoś czasu z uruchomieniem toolchaina Eclipse + CodeSourcery itd dla STM32 (dokładnie STM32F107VCT) i mam pewien problem. Przejrzałem kilka różnych projektów, w których podpatrywałem pliki skryptowe linkera (*.ld) jak i pliki makefile. Na razie kompiluje mi się gdy przykładowo zrobię plik main.c z takim kodem: STM32F10x_StdPeriph_Lib_V3.5.0...
Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera? delay_ms jest na Timerze. Robiłem Testy na kodzie bez optymalizacji gdzie wszędzie wykomentowałem funkcję delay_ms, więc nie jest to problem Kod się nie zawiesza. Na razie nie znalazłem niezainicjowanej...
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
Temat jakoś umiera śmiercią naturalną. Pozwolę sobie nieco odświeżyć. Hardware: - HY-mini (Cortex M3) - LCD ze sterownikiem ssd1289 (FSMC) - karta sdhc (SDIO) Software: - fatfs R0.10 („testowałem” też wcześniejsze wersje) - „HAL” dla fatfs – silnie wzorowany na przykładach dołączonych do HY-mini i przykładach sugerowanych...
To API jest bez sensu więc nie ma co szukać o tym informacji. Dlaczego uważasz, że jest bez sensu? To według Ciebie lepiej pisać odwołując się bezpośrednio do rejestrów? Korzystanie z tej biblioteki poza tym mają również inne wady: 1) Struktury inicjalizacyjne marnują pamięć. Te struktury są spakowane, więc dostęp do bitów w tej strukturze jest utrudniony....
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...
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 ..............
Korzystanie z tej biblioteki poza tym mają również inne wady: 1) Struktury inicjalizacyjne marnują pamięć. Te struktury są spakowane, więc dostęp do bitów w tej strukturze jest utrudniony. Co modyfikacja bitfielda kompilator musi uzywac instrukcji BFI,AND,ORR,BIC. Marnuje to sporo czasu, zamiast DWOCH instrukcji LDR,STR. Odczyt zawartości struktury...
Przy DMA też wisi przy sprawdzaniu I2C_CR1_STOP, I2C_SR1_ADDR, I2C_SR1_BTF. W poolingu działa, ale też po chwili wisi najczęściej w sprawdzaniu I2C_SR1_ADDR. [syntax=c]void i2c_Init(I2C_TypeDef *I2Cx, uint16_t bus_speed) { if(I2Cx == I2C3) { RCC->APB1ENR |= RCC_APB1ENR_I2C3EN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; gpio_pin_cfg(GPIOC, 9, GPIO_AF4_OD_50MHz);//sda...
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ę...
Witam. Dla ćwiczebności napisałem sobie funkcję zwracającą ilość cykli zegara w celu pomiaru długości wykonywania funkcji itp. Aby to osiągnąć odczytuję "PENDSTSET" oraz stan licznika SysTick. Jednak pomiędzy tymi dwoma odczytami upływa trochę czasu i wartość licznika jestem w stanie skorygować znając czas jaki upłynął miedzy tymi dwoma instrukcjami...
Parę miesięcy temu wrzuciłem tutaj parę sztuk "wzorcowych" programów dla Cortex-M (STM32F05x). To oczywiście mój własny wzorzec struktury programu, ale myślę, że dość rozsądny i wygodny w użyciu - prosta i przejrzysta inicjalizacja wszystkiego w jednym kawałku poprzez strukturę danych (bez instrukcji podstawień i wywołań procedur inicjujących), brak...
Zrobiłem u siebie na próbę 429Zi DISCO płytka. Zasiliłem 2 paluszkami. [syntax=c]void BKP_SRAM_Init(void) { RCC->APB1ENR |= RCC_APB1ENR_PWREN; RCC->AHB1ENR |= RCC_AHB1ENR_BKPSRAMEN; HAL_PWR_EnableBkUpAccess(); HAL_PWREx_EnableBkUpReg(); } #define BSRAM_B 0x40024000 void inline BKPS_Write_Byte(uint32_t address, uint8_t value) { *(volatile uint8_t *)...
Mam wspaniałe dzieła stm32f103 1-ware slave na takich delay //:::::::... // Прогрk...
Hmmm to ciekawe. Czyli NVIC jest elementem wspólnym rodziny ARM7 i jego dokumentacja jest umieszczona poza specyficzną dokumentacją danego procka? Czy dobrze rozumiem? Generalnie dobrze, pozatym że ARM7 a ARMv7 to coś zupełnie innego (; NXP w dokumentacji do swoich Cortexów daje opisy rzeczy specyficznych dla rdzenia, ST nie i tyle. W takim razie chciałbym...
HAL to w zasadzie to samo co SPL. Jest przykłdem złego designu oprogramowania pod wieloma względami. Oto próbka absurdu: [syntax=c] pif = (USBH_InterfaceDescTypeDef *)0; pcfg = &phost->device.CfgDesc; if((pif->bInterfaceClass == 0xFF) &&(pif->bInterfaceSubClass == 0xFF) && (pif->bInterfaceProtocol == 0xFF)) { return 0xFF; } [/syntax] Przenoszenie kodu...
Witam, Mam problem z uruchomieniem drugiego alarmu od RTC w procesorze STM32L051. Do tej pory był włączony Alarm A a sam procesor przechodził w tryb deep sleep, wszystko działało jak należy, przerwanie wybudzało procek. Pojawiła się potrzeba jeszcze jednego alarmu, tak więc uruchomiłem (analogicznie to alarm A) alarm B, ale z dziwnego powodu nie pracuje...
Właśnie przerabiam bibliotekę hd44780 która działa na atmega ale na stm32 nie może mi ruszyć inicjalizacja ekranu. Jeżeli kolegom nie będzie się chciało analizować całości to proszę chociaż oto jak koledzy robią inicjalizację ekranu. Plik .h [syntax=c]/* * hd44780.h * * Created on: 08.11.2017 * Author: Pawel */ #ifndef HD44780_H_ #define HD44780_H_...
No dobra ale co to ma wspólnego z timerem 2? Timer 1 współgra z timerem 3 który pracuje jako PWM. A Timer 2 to zupełnie coś innego, tam tylko sobie czas leci. Czyli co powinienem wg ciebie spróbować? Na takie rzeczy voodoo może pomoże więc jestem otwarty na wszystkie sugestie :D Dodano po 1 Coś jest skopane z timerem 3cim. W momencie jak nie włącze...
Witam, mecze się z DS18B20. Naskrobałem poniższy kod ale wydaje się działać połowicznie. Ale po kolei, pierwsze co robię to ONE_WIRE_Init (), a potem ONE_WIRE_Read_Tmp(). I przy tej drogiej funkcji mam problem bo zwraca ona za każdym razem 0x0808 (jak by komendy nie zmienić zawsze tak samo, a nawet bez komend). ONE_WIRE_Init_Sequence() działa poprawnie...
Zagmatwanie i bledne pisanie tez spowalnia... powiedz mi co sie dzieje przy wywolaniu jakiejs funkcji w C i powrocie z niej ? Jak ich da sie sporo co sie dzieje ? Zerknij od strony tego co masz po kompilacji... Czy nie lepiej jak cos przepisujesz czasem w pamieci uzyc np. DMA skoro je masz :) i tym podobne sprawy.... Dlaczego czasami warto dawac w C...
No na małych intach to może i tak. Ale nie wiadomo jak z innymi typami. W taki wypadku wiadomo, :(. U mnie to działa trochę w inny sposób bo funkcje mam cały czas we Flashu i są one skompilowane z projektem, a tylko je wywołuję z innego projektu. Czyli mam np 100 funkcji a przez usb wgrywam program który je tylko wywołuje z rożnymi parametrami, czyli...
Mogę ewentualnie do wysyłania słów 16 bit, przełączać SPI w tryb 16bit, pewnie coś przyśpieszy, ale na pewno nie 10x. Na pewno 72MHz, sprawdzanie takich rzeczy stosuję na początku każdego projektu. Licznik po podziale przez 72000 daje 1 kHz (1 s. odliczenie 1000 taktów). W indeksie 16 bit nie zmieszczę 76800. Nie możesz przesłać całego ekranu w jednej,...
Witam, Próbuje uruchomić obsługę karty SD pod STM32f103ZET6. Wykorzystuje do tego bibliotekę, używaną wcześniej pod STM32f407. Zmodyfikowałem tylko inicjalizacje SPI i dorzuciłem testową funkcję zapisu do karty. Mimo to karta nie chce ruszyć. Przy próbie otwarcia jakiegokolwiek pliku dostaje: FR_NOT_READY. Próbowałem już na dwóch kartach SD, formatowałem...
Witam, muszę przekopiować projekt pod STM32F107 (Działający już) na CrossWorksie -> Eclipse, problem leży w makefile'u, ale nie mogę podejrzeć co robi ten crossworksowy, mój wygląda następująco: [syntax=c] ########################################... # Start of default section # TRGT = arm-none-eabi-...
Możliwe że napisałeś program optymalnie i kompilator nie miał już co optymalizować :) . Przy -O3 sprawa jest prosta, wszystko co się dało masz inline , kod musi być większy. U mnie taki kod na przykład (używam SPL i nie za bardzo znam asembler) z LTO i z -Os wszystko jest inline a bez LTO i z -Os każda funkcja jest wywoływana. Na asemblerze za bardzo...
Zmieniłem trochę w projekcie. Zastosowałem najnowszą wersję FatFS. Plik z konfiguracją funkcji zadeklarowanych diskio.h pobrałem ze [url=http://www.siwawi.arubi.uni-kl.de/a... strony i przerobiłem go by pasował do STM32L. Po testach objawy wyglądają tak: Karty 512MB i 16GB: porgram mniej...
Dodano po 31 Kiedy debuguje program, krokowo, zaraz po a = 124; z linii b = log10(a); wskakuje do nieskończonej pętli - void HardFault_Handler(void). Tak jakby sam adres procedury wywoływał błąd sprzętowy.
To nie jest żadna biblioteka. To jest karykatura programowania. Ktoś przerobił na STM32xxx kawałek kodu napisanego dla 16-bitowego PIC'a, ze wszystkimi głupotami, które tam były. Przykładem jest używanie makr zamiast funkcji, które mogą mieć atrybut inline. Zastanów się jak to działa: [syntax=C]#define LCD_WriteData(data) {Set_Rs; GPIOB->ODR=((GPIOB->ODR&0x00ff...
Witam Kolegów. Zauważyłem dziwny problem przy pomiarze Vref jeżeli procesor popracuje trochę czasu. Otrzymane dane są zawyżone o 16% (zawsze identycznie). Dzieje się to po włączeniu generacji PWM-ów. Inne kanały ADC działają poprawnie. Rejestry ADC są ustawione identycznie. Ktoś może zetknął się z takim problemem. ADC oczywiście po kalibracji etc etc....
Witam! Od jakiegoś czasu usiłuję napisać aplikację obsługującą kilka wątków (taki wstęp do RTOS) i przełączającą kontekst między nimi. Problem tkwi w tym, że podczas wczytywania kontekstu (LoadContext()) wywala FaultHandler. Zdebugowałem ustrojstwo i wynikiem są dwa bity CFSR: IMPRECISERR oraz STKERR. Nie wiem co może być przyczyną, być może czegoś...
Witam, Potrzebuję, aby co 24h wywoływany był alarm z RTC na STM32L051. Konfiguracja i obsługa przerwania wygląda tak: [syntax=c]... SYSCFG->EXTICR[1] =SYSCFG_EXTICR2_EXTI4_PB; // przerwanie od EXTI na PB4 SYSCFG->EXTICR[3] =SYSCFG_EXTICR4_EXTI15_PA; // przetwaie od kontaktronu EXTI->IMR = EXTI_IMR_IM4 | EXTI_IMR_IM15 | EXTI_IMR_IM17; // RTC...
W każdym razie jak byłoby zainteresowanie to mógłbym w innym temacie nieco napisać jak programować ARM czy np. taki stm32f103c8t6 czy podobny stm32F4.. . w asemblerze. Myślę, że ci co potrafią nie dotykają, a Ci co nie potrafią i tak nie potrzebują. Pisanie programow w ASM dla tych platform to sztuka dla sztuki, bez jakiegokolwiek zastosowania praktycznego....
Optymalizator nie z wszystkim sobie poradzi. Dodałbym - trochę z doświadczenia - że optymalizator w ogóle nie działa dla "prawdziwych funkcji" a dla "nieprawdziwych" (inline) zwykle nie działa gdy parametr jest przekazywany przez referencję (wskaźnik, adres, jakkolwiek to ktoś chce nazwać). No a przecież w SPL WSZYSTKIE funkcje (włącznie z najgłupszymi...
Zmieniłem : 2. change The initial stack pointer in the vector table: (void *)&pulStack[STACK_SIZE-1]... to (void (*)(void))((... long)pulStack + sizeof(pulStack)), w startup_stm32f10x_md_vl.c Dalej to samo. [syntax=c]/** ****************************************...
Z drugiej strony - czy udało się komuś skompilować coś dla Cortexa w "czystym" standardzie ANSI? Po włączeniu standrdu c89 mój przykładowy projekt dla STM32F1 zaatakował mnie jakimiś dwoma setkami błędów, pochodzących w przeważającej większości z nagłówków CMSIS (głównie rozchodzi się o "inline") - potem jeszcze z milion dotyczących komentarzy "//",...
Taka mała ciekawostka: NVIC->IABR jest tylko do odczytu. Indeksy tablicy zaczynamy od 0. To jest trochę mylące ale EXTICR1 = EXTICR[0] Używaj makr. Włączyłeś zegar dla AFIO ? Są funkcje w cmsisie do ustawiania przerwań, ale ich nie używałem, więc należałoby zerknąć do pliku nagłówkowego EDIT: [syntax=c]/** * (at)brief Enable Interrupt in NVIC Interrupt...
składanie zmiennej przez |= miało pokazać co musiałbym zrobić aby uzyskać podobny kod wynikowy do tego co wygenerował kompilator. I ja tak nie piszę lecz takie coś na podstawie prostej operacji wygenerował kompilator. Tak wygląda mój kod bo widzę, iż ktoś sięciągle czepia przykładu jak mniej więcej wyglądać musiałby kod źródłowy aby uzyskać taki dziwny...
Witam, To mój pierwszy post na tym forum (mimo, że zaglądałem tu bardzo często, ale biernie, zatem przepraszam za ewentualne niedociągnięcia z mojej strony), więc chciałbym na początku się ze wszystkimi przywitać :) Od niedawna zacząłem przygodę z mikrokontrolerami LPC firmy NXP (po przesiadkach AVR->STM32->LPC). Właśnie kończę etap odkrywania...
--------[ EVEREST Home Edition (c) 2003-2005 Lavalys, Inc. ]---------------------------------------... Wersja EVEREST v2.20.405/pl Strona domowa http://www.lavalys.com/ Typ raportu Kreator raportów Komputer AREKPAULAX33 Generator raportu ArekPaulax3 System operacyjny Windows 7 Ultimate Media Center Edition 6.1.7600 Data 2012-01-31...
stm32 static inline inline function assembler inline
transformator sterujący tl494 częstotliwość warszawa służba serwonapęd instrukcja
wyjście alarmowe kamer hikvision zawór bezpieczeństwa kapie
Schematy myjek ultradźwiękowych: komponenty i zasada działania Hormann B60: Niedziałająca optyczna krawędź zabezpieczająca