Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
bo masz stos za mały to jest zmienna lokalna i ona się tworzy na stosie, w crossworksie standardowo jest 128-bajtowy stos dla stm32 trzeba w propertiesach projektu poszukać i zmienić
http://pl.wikibooks.org/wiki/C/Operatory zmienna op= coś to to samo co zmienna = zmienna op coś gdzie op to jakiś operator (dodawanie, dzielenie, mnożenie, fajek palenie, czy tak jak w tym przypadku suma logiczna).
Czy zmienna kierunek jest globalna i volatile? Już po pierwszym przerwaniu powinna przyjąć wartość 1 lub 2, a nie być cały czas 0. Czy zaobserwowałeś zwiększanie wartości zmiennej enkoderA ?
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
Ja to bym zapisał ewentualnie tak: commandTW w wyniku wyżej opisanych operacji, zostanie promowana z typu uint8_t do uint16_t i przesunięta do starszej części zmiennej command .
w końcu standard C nigdzie nie definiuje, że stałe muszą być we FLASH. Standard C nie wie nic o FLASH, ale to nie powód. poza sensem - kompilacja takiego kodu i linkowanie zajmie niepotrzebnie dużo czasu. Takie obiekty się prekompiluje, robi z nich bibliotekę i linkuje z własnym kodem. Czyli należy się zaprzyjaźnić z objcopy i ar. Rzeczywiscie - plik...
Mam STM32F4 DISC1 (z programem napisanym w C#.NETMF), który odbiera dane z aplikacji Windowsa (napisanej w C#.NET). Aplikacja wysyła zadany przebieg czasowy a STM32 go odczytuje i zapisuje w tablicy. Następnie zgodnie z zadanym przebiegiem czasowym ma sterować procesem. STM32 jest widziany jako wirtualny port COM. Prędkość transmisji - próbowałem 9600...
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
https://obrazki.elektroda.pl/5694434400_... Moduły zasilaczy warsztatowych, takie jak DPS5005, dostępne są od dłuższego czasum.in. na AliExpress. Doczekały się wielu recenzji, w większości pozytywnych. Jednakże często wskazywanym problemem z tymi modułami jest kiepskiej jakości oprogramowanie – interfejs użytkownika pozostawia...
1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To kwestia wyrównania. Gdyby nie te int-y wcześniej nie byłoby problemu. A że są, to kompilator stara się by każda zmienna 32bitowa była umieszczona pod adresem podzielnym przez 4 - tak by się dało ją odczytać/zapisać w jednym cyklu. Wielkość całej struktury...
[syntax=arduino] void loop() { // ------------------- jeszcze na LCD ... //-------------------- jeszcze 8 pomia... //-------------------- jakaś pamięc do... switch (key) ... } [/syntax] To Ci działa? Bo on chyba nie bardzo wie co to "key". Nie widzę ani deklaracji, ani żeby się cośtam wpisywało....
to zamiast define zrób zmienna
No, z przerwaniami to już masz program wykonujący wiele zadań jednocześnie - nie wiadomo, w którym momencie w gpsread starą jego wartość do 128 - a więc w następnym przerwaniu możesz wpisać do gpsread[128] - poza zakresem? A lepiej pisać if (++wpp >= sizeof gpsread) wpp = 0; - jak potem zmienisz rozmiar gpsread, to nadal będzie dobrze.
Dzień dobry szanowne grono, mam kilka podstawowych pytań odnośnie płytki STM32 Nucleo-G491RE dokładnie, oraz modułu marki Digilent Pmod I2S2. Płytka ta zawiera przetwornik ADC oraz DAC, oba 24-bitowe, z częstotliwością próbkowania do 108 kHz dla ADC oraz 200 kHz dla DAC. Na studiach wykorzystywaliśmy taką płytkę, ale było to typu przepisz instrukcję...
(at)excray, (at)es2, w stm32 jest coś takiego jak rejestr powtórzeń licznika - więc zmienna / licznik stanu nie ma sensu ;) Dygresję nie na temat usunąłem.
Witam! Natknąłem się niedawno na pięknego potwora nazwanego RUST https://www.rust-lang.org/ Chciałbym tym wątkiem rozpocząć dyskusję, czy ten język może prowadzić w dobrym kierunku - szczególnie w obszarze embedded, czyli mikrokontrolerów. Chciałbym by koledzy podzielili się doświadczeniami z tym językiem, wrażeniami i opiniami. Jak zwykle bywa, nowy...
Cześć, Chciałbym Was podpytać o najlepsze rozwiązanie. Sterownik na stm32 otrzymuje co kilkadziesiąt godzin czas do aktualizacji RTC w formie unixowej jako zmienna 32bit. Wykorzystywana jest ona następnie do przesyłania do innych urządzeń również jako zmienna 32bit. Pytanie - czy za każdym razem muszę robić konwersję 32bit na BCD do RTC i na odwrót,...
Nie bez powodu, takie rozwiązanie znalazłem w kursie STM32 na forbocie, pomyślałem, że może tak zostać. Zrobiłem tak: GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7; gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio); Sprawdzałem w debuggerze i jak wstrzymałem program,...
Wyłączyłem optymalizacje. Wprowadziłem zmiany w startup. http://obrazki.elektroda.pl/7964964200_1... Main wygląda tak: [syntax=c]int main(int argc, char* argv[]) { // At this stage the system clock should have already been configured // at high speed. int x=0; x+=10; // Infinite loop while (1) { ++x;// Add your code here. } }[/syntax]...
1. Jaka jest różnica między tymi dwoma zapisami, czy dobrze to rozumiem? TIM3->SR &=~TIM_SR_UIF; (tu zerujemy?) Powinno być: TIM3->SR =~TIM_SR_UIF; (tu rozumiem,że zmienia stan na przeciwny?) efekt powinien być w tym wypadku ten sam. Różnica opisana jest w RM, w którym opisana jest sekwencja zerowania bitów rejstru SR timerów. Zapisanie zera kasuje...
Jeśli jest to zmienna 1-bajtowa to rzutowanie nie ma znaczenia. Przy okazji masz odpowiedź na pytanie czy ten kod jest "dobry" (; 4\/3!!
Cześć, Mam nadzieje, że i tym razem uda mi się skutecznie poprosić Was o pomoc. Potrzebuję pomocy z przeprogramowaniem nadajnika opartego o STM32, NRF24L01. W międzyczasie zmienił się nam protokół komunikacyjny po stronie urządzeń odbiorczych. Trzeba dostosować komunikację do nowego protokołu. Nadajnik komunikuje się z PLC (zbiera pojedyncze zmienne...
Witam wszystkich serdecznie, Chciałbym prosić o pomoc w analizie błędów inicjalizacji i komunikacji z zegarem RTC, który wszyscy znają. Chciałbym przedstawić kod, który nie działa - opisać objawy i spytać o parę rzeczy, które mnie nurtują. A więc do rzeczy. Najpierw Kod: [syntax=c] #define PCF8583_ADDR ((uint16_t)(0x50)) #define I2C_SCL GPIO_Pin_6 #define...
Dziekuję za gotowy kod. Właśnie sprawdziłem poprzez debugowanie że zmienna Load źle była oblicza abo jest 24 bit i wykraczało poza zakres. edit. Zmodyfikowałem linijke https://obrazki.elektroda.pl/3746908300_...
Witam Próbuję utworzyć plik txt na karcie sd korzystając z biblioteki FatFs zaimplementowanej na moim procku STM32F3 discovery. Niestety nie udaje mi się stworzyć takiego pliku, karta jest pusta a zmienna fresult wynosi 9 czyli FR_INVALID_OBJECT. W związku z tym wszystkim mam pare pytań odnośnie współpracy STM32 z kartą microSD. 1. Jak należy przygotować...
Cortex nie potrzebuje __attribute__ ((interrupt)); przy deklaracji procedur obsługi wyjątków! W Twojej procedurze zmienna stan zawsze będzie miała wartość 0, bo jest za krótka na to, aby zmieścił się w niej testowany bit.
1. Przyjmij że kompilator działa jak należy i przekazuje parametry do funkcji poprawnie. Gdzie pokaż jeszcze wywołanie funkcji. Optymalizacja -O0 nie zawsze Ci pokaże wszystkie zmienne lokalne. Przy debugwaniu w takiej sytuacji lepiej -Og. Ale wtedy różnica w szybkości prgramu może być 2-3 krotna. Wywołanie: static uint8_t str[12]; float32_t...
ze zmęczenia nie dopatrzyłem się że zrobiłem tylko definicję preprocesora bez deklaracji ;) Ale tym niczego nie zdefiniowałeś tylko powiedziałeś aby preprocesor zastąpił slowo "UART_BUFOR" słowem "32" tekstowo. Jak w pliku .c zrobiłeś volatile char UART_BUFOR[UART_BUFOR_rozmiar]; to zastanów się co się z tym stanie i czy da się to skompilować. Jeżeli...
Tak wiem, że nie muszę przywracać zabezpieczenia, tylko spróbowałem ale się nie udało :). Rzutujesz wskaźnik na int16_t, a zmienna uparcie jest "short int" - po co? Bo tylko tak działa! Nie wiem jak inaczej mogę to zrobić ?
Natomiast STM nie lubi działać na zmiennych typu char. Dla STM32 nie ma znaczenia czy zmienna ma 8-, 16- czy 32-bity... 8MHz dla RCC_SYSCLK_Div2 i RCC_PLLMul_2 pozostałe parametry bez zmian Możesz zdradzić nam powód, który każe Ci ustawiać dzielnik dla najszybszej i najważniejszej magistrali w tym układzie na jakąkolwiek inną wartość niż 1? Nie dziw...
Dlaczego nie użyłeś po prostu typu int? int i long mają na Cortexach po 32 bity. Chciałem mieć pewność że zmienna będzie "długa" bez zagrożenia, że znów się przepełni. :idea: można dołączyć nagłówek <stdint.h> i użyć typu int32_t albo uint32_t. Świetny pomysł! :D Zwłaszcza, że w tych deklaracjach widać długość zmiennych, chociaż tutaj takie małe...
Jak to skonfigurować? W Arduino nie mam zielonego pojęcia No właśnie, a internet też milczy... Wymyśliłem to tak - Potrzebuję sygnał którego rozdzielczość jest równa 0.25us czyli timer musi zliczać z częstotliwością 4MHz czyli przy zegarze 72MHz będzie to 18 cykli. Zegar co 18 cykli dodaje 1 do zmiennej x, jeśli zmienna x = 19 (4.75us) ustawia stan...
Działa :) Drugi wersja kodu generuje dobry przebieg na magistrali. Na pierwszej procek się wiesza nie wiedzieć czemu (i stąd zmienna stan przyjmuje 0). A ja wczoraj cały dzień wpisywałem dane bezpośrednio do hcan.pTxMsg bo myślałem, że nie ma różnicy. Uff... no dobrze to bawię się dalej. Jeśli będę miał jeszcze kłopoty to dam znać. Dzięki wielkie za...
Witam, problem polega na tym że utworzyłem trzy zmienne globalne typu const uint8_t i kompilator przypisuje dwóm pierwszym ten sam adres 0x80030D4 . Trzecia zmienna już miała inny adres. Utworzyłem więc dwie kolejne zmienne do testów aby sprawdzić jaki otrzymają adres: const uint8_t ZMIENNA_TEST1=3; uint8_t zmiennaTest2=10; lecz niestety debugger ich...
Też nie aż tak 'znacznie'. - dsPIC marnuje mniej czasu na wejście w ISR i na wyjście z niego, więc STM32 nadrabia zegarem i wychodzi podobnie. - W dsPICu instrukcja MAC wykonuje się w jednym cyklu, w STM32 w trzech (chyba). - dsPIC ma podzieloną pamięć na X i Y, z dodatkiem, że pewne przestrzenie adresów są dwuportowe i DMA nie kradnie cykli rdzenia...
Kwestia się wyjaśniła. Rzeczywiście problem był ze zmienną Address. Jest typu int, a nie typu wskażnikowego jak zmienna mem. Zatem inkrementacja nie skutkowała przesunięciem o 4 bajty. Kod poprawiłem na poniższy i wszystko działa jak należy. [syntax=c] void writeFlash(void){ mem = returnPointerToFirstEmptyAddressInSector... Address = (uint32_t)mem;...
Witam, Próbowałem na podstawie książki "Mikokontrolery stm32 w praktyce" uruchomić na STM32F107 transmisję z wykorzystaniem USART-a. Połączyłem Rx i Tx ze sobą i próbuję wysyłać a następnie odczytywać wysłane dane. Poniżej jest mój kod: int main(void) { SetSysClockTo72(); EnablePerypherialClocks(); ConfigureNVIC();...
Zacznijmy od tego, co to jest zmienna Timer1? Jak wygląda jej deklaracja?... Jeśli chodzi o kod, nie pomogę ci ani trochę, bo nie korzystam i nie będę korzystał z głupiego FWLib, a ty tak. Systick włącza się łatwo i przyjemnie kodem [syntax=C] void systick_init(void) { SysTick->VAL=720000; SysTick->LOAD=720000; SysTick->CTRL=0x7; } [/syntax]
Niby nie, a mamy szybszą drogę upewnienia się, że wszystko jest jak być powinno z tym zegarem? Niczego i tak nie możesz być pewny - przecież ta funkcja nie wylicza ani nie mierzy częstotliwości, tylko zapisuje do zmiennej to co wynika z definicji wygenerowanych w jakimś tam pliku przez CubeMX. Które mogą być błędne, w efekcie zmienna będzie miała wartość...
No kwarc jest ani 8 ani 24 tylko 14,7456 MHz, może faktycznie coś z ustawieniem traktowania magistrali... Predkość jaka wyszła mi na APB1 to 35,9424, czy muszę jakoś przeliczać GPIO_InitStructure.GPIO_Speed bo próbowałem już i przy 2 i 10 i 50..., no i jeszcze I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED mam ustawione na 100k. czy mogę tu wpisać cokolwiek.......
(at)michalko:"Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera. " No właśnie nie. Zmienna FLASH_BASE w tym wyrażeniu, to nie adres bazowy programu, ale adres bazowy całej pamięci FLASH 0x80000... (sprawdziłem). Najmniej inwazyjna zmiana, to właśnie podmiana w tym wyrażeniu FLASH_BASE na jakiś PROGRAM_BASE (celniej...
Witam! Chciałem umieścić stałe w pamięci flash ale coś mi nie wychodzi. [syntax=c] // Funkcja wykorzystująca stałe uint8_t Search(const char data[]); [/syntax] Przy wywołaniu funkcji w kilkunastu miejscach w programie w taki sposób: [syntax=c] Search("OK\r\n"); [/syntax] Zajętość flash=47428 i ram=10760 Po zmianach: [syntax=c] const char(* const AT_OK)[]...
Ta tablica nie jest potrzebna - ona jest tylko do celów demonstracji (jak zwykle w przypadku ST bardzo głupiej). Nieprawda. Tablica ta jest kluczowym elementem przy przepisywaniu zmiennych z jednej strony FLASH do drugiej, gdy pierwsza z nich jest już pełna. Procedura EE_PageTransfer() musi wiedzieć apriori ile najbardziej aktualnych wartości zmiennych...
Witam serdecznie. Zwracam się do Was z prośbą o pomoc. Mam projekt, który bazuje na plikach od producenta i chciałbym do niego dodać możliwość komunikacji z terminalem za pomocą USART1. Z pomocą STM32 Cube wygenerowałem sobie projekt z USART1 który działa i przesyła mi dane na konsolę, ale po przekopiowaniu funkcji do mojego projektu docelowego to nie...
Od jakiegoś czasu nie importuję gotowych rozwiązań bibliotek C, tworząc własne - o dużej gęstości informacji, co przypadkiem przekłada się na wydajność i wyliczony koszt zużytej energii/funkcję. Wymaga to dużego nakładu pracy - to prawda. Przepisywanie rejestrów nie jest czasochłonne, po jakimś czasie zdefiniowanie jakiegoś procesora zajmuje pojedyncze...
Jak chcesz wysyłać kilka zmiennych o różnych rozmiarach, to zrób strukturę. Ja mam np taką [syntax=c] struct CfgEEiic { uint32_t crc; // crc musi byc pierwszom zmienna w strukturze uint32_t CntWrite; uint32_t CntRst; uint16_t szt; uint32_t total; char txt[16]; }; struct CfgEEiic Cfg; [/syntax] Później wysyłasz tą strukturę przekazując adres i rozmiar...
Hejka, robię właśnie przesiadkę projektu z kompilatora IAR'a do GCC'a i mam problem z przeniesieniem niektórych ustawień, konkretniej chodzi o nie wycinanie przez linker konkretnych, nieużywanych zmiennych globalnych wygenerowanych przez zewnętrzne narzędzie, zawierających informacje np. o dacie buildu, checksumie itp. które są potem w przypadku reklamacji...
Generalnie wszystkie operacje jakie robisz w przerwaniach są jak dla mnie zbędne. 1. Wyłączasz to samo SPI w obydwóch przerwaniach... po co? Przecież może sobie zostać włączone. Gdy jest wyłączone np mogą się pojawiać niechciane stany na pinach zegara czy CSa. 2. Wyłączasz kanał DMA, choć on się wyłącza sam. 3. Kasujesz flagi, choć one kasują się same....
Jeśli chcesz to zdebuggować, to możesz się "zaopatrzyć" w bleeding-edge-toolchain ( https://github.com/FreddieChopin/bleedin... ). Jest on kompilowany praktycznie tak samo jak toolchain ARMowy, z tym że biblioteki zawierają wszystkie symbole, a więc można je spokojnie debuggować i widzisz co się dzieje. Z Twojego opisu wynika, że problem...
Postanowiłem zawalczyć z tym UARTem ale (wstyd przyznać) trochę sobie nie radzę. Podejrzewam, że robię gdzieś jakiś głupi błąd, którego nie mogę zlokalizować. Połączenie STMów wygląda następująco: ZL26ARM programuję z USB za pośrednictwem STM32F4 (SWD->JTAG), oprócz tego ZL'a zasilam sobie z drugiego USB. Na ZL'u USART1 remapowałem sobie na piny PB6(Tx)...
Nie przeczytałeś noty aplikacyjnej i dalej marudzisz. Po pierwsze zauważ więc, że nie ma obowiązku używania ARMów, Cortexów, STM32 czy ogólnie emulowania EEPROMu - jeśli masz przy tym cierpieć takie katusze, to przecież nie ma sensu męczyć siebie i nas. To jest ten najważniejszy punkt. Jeśli nie sprawia Ci to przyjemności, a wręcz sprawia "egzystencjalny...
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
Jeżeli chodzi o ffconfig.h to próbowałem różnych ustawień a z desperacji ;) nawet zupełnie kosmicznych ich kombinacji. Jeżeli chodzi o ustawienia kompilatora to -O0 -> prawie najnowszy bleeding edge toolchain. Przed każdym buildem robię clean'a. Dodam, że dzieje się to na dwóch różnych kartach. Próbowałem też z różnymi typami zmiennych a uchwyt systemu...
Problem polega na tym, że potrzebuję 2 liczników do zliczania impulsów z 2 źródeł, a te źródła to piny PB6 i PB7, czyli jak wskazuje nota katalogowa uC odpowiednio kanały 1 i 2 timera TIM4: http://obrazki.elektroda.pl/5000204900_1... Myślałem, że jak są 2 kanały to każdy z nich może być źródłem sygnału taktującego i każdy kanał może...
Witam Kolegów Przy okazji problemu z jakim borykam się [url=http://www.elektroda.pl/rtvforum/vi... udało mi się poprawnie uruchomić na procesorze STM32F107 system freeRTOS. Jestem mega pozytywnie zaskoczony tym, że całość systemu udało mi się poprawnie odpalić w Eclipse w zaledwie 4 godziny. Do tej pory uważałem, że...
Witam, po krótkim starcie z STM32 doszedłem do wniosku, że chciałbym napisać własny toolchain dla tych mikrokontrolerów. Dostępnych IDE jest dosyć dużo ale każdy z nich ma jakieś mniejsze lub większe wady. Chyba największe nadzieje pokładałem w System Workbench for STM32 ale jest to tak pomieszane i nieczytelne narzędzie że nie chce z tym pracować na...
Witam, Mam mały problem z ustawieniem niestandardowej prędkości na STM32 powyżej 115200. Problem pojawia się zarówno przy użyciu funkcji niesocjalizującej jak i ręcznego skonfigurowania ( ręczne wyliczenie wartości dla rejestru BRR ). Nie ma problemu z różnymi transmisjami 9600, 28800 aż do 115200. Po tej wartości terminal milczy. Jedynie przy użyciu...
Przeczytałem wątek z dużym zainteresowaniem, wracam do uP po paru latach natomiast jestem starym programistą C Nie będę redagował jednolinijkowych cytatów, wypowiem się w punktach mam nadzieję każdy wyczyta co pochwalam / czemu się sprzeciwiam 0) nie zmienimy starego albo nie swojego kodu (np AVR czy innego) ale nowy możemy pisać lepiej. a) makra to...
Zobacz że aktualnie mało które dane są 8 bitowe. Większość (fakt nie wszystkie) przetworników ADC czy najróżniejsze czujniki mają rozdzielczość większą niż 8 bit (fakt mogą pracować też na 8 bitach) I w takim przypadku by przetworzyć te informacje w uC potrzebujemy więcej czasu ponieważ jak zmienna ma więcej niż 8 bitów wszystko zajmuje 2 takty lub...
Po zastanowieniu skłaniam się do tej "klasycznej" metody pomiaru w której mierzony jest czas ładowania / rozładowywania kondensatora. Biorąc pod uwagę fakt, że mało interesuje mnie konkretna rezystancja, a bardziej możliwość stwierdzenia, że się ona zmieniła, to chyba duża niedokładność kondensatora który zastosuję nie będzie tu problemem (jego parametry...
Witam! Fragmenty kodu: USART_InitStructure.USART_BaudRate = 57600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowCo... = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx...
W efekcie wykonania poniższego kodu oczekiwałem czarnego tła na ekranie wyświetlacz, jednak po uruchomieniu jedyne co otrzymuje to przypadkowe wartości pamięci wyświetlacza (losowe czarno-białe punkty tzw. "szum"). Próbowałem uruchamiać wyświetlacz nie tylko w takiej konfiguracji jak zamieszczona tutaj (w sieci jest całkiem sporo przykładów wykorzystania...
Przepraszam , że nie dokończyłem wczoraj ale przysnołem. Nie poszło tak prosto bo nie otrzymuje zapisu na kartę , cały program kompiluje się mi w porządku tzn otrzymuje hex -a, zadaniem poniżej przedstawionego programu jest tylko odczyt jednej wartości z wejścia adc1 oraz zapisanie jej na karcie do pliku o nazwie plik, poniżej przedstawiam listing z...
Witam , nikt nie odpowiedział to może ja trochę pomogę . Witaj! Cieszę się, że znalazła się jedna dobra dusza z chęcią pomocy. Już odpisuję na Twój post :) Ogólnie projekt nie umarł i zapewniam, że nie umrze. Przetwornice impulsowe bardzo mnie zainteresowały i postaram się to rozwiązać na kilka sposobów, tak by się trochę tego nauczyć :) Obecnie projekt...
A jak daję w f_read & przed zmienną to nic nie zmienia? Zastanów się nad tym sam... Funkcji każesz odczytać 480 bajtów. Gdzie ona je niby ma zapisać, skoro podajesz jej adres zmiennej o rozmiarze 2 bajty? To że wpisujesz tam '&' nie sprawia że nagle zmienna uint16_t staje się workiem bez dna... 4\/3!!
Witam. Próbowałem doszukać się informacji nt. rozwiązania jednak bez większego skutku. Z racji braku doświadczenia chciałbym zapytać kogoś z Was :) Robię sterowanie zaworami proporcjonalnymi. Odbierając informację o wychyleniu Joysticka sterującego za pomocą magistrali CAN, z uC wysyłam sygnał napięciowy na kartę zaworów. W przyszłości zakres napięciowy...
Operacje na zmiennych 64bitowych nawet na piechotę nie są koszmarnie wolne na 32bit prockach. Ja bym sie nie przejmowal tymi kilkoma instrukcjami... Typ 64bitowej zmiennej to (unsigned) __int64 . Long long mozna wpisać, ale zmienna i tak ma 32 bity...
Masz przebieg sinusoidalnie zmienny przesunięty względem masy na połowę napięcia zasilania ?
Przetworniki w STM są 12-bitowe, więc maksymalnie zmienna będzie przyjmować wartość 4095, jako, że przez USART jednorazowo nie prześle tego to rozdzielę to na dwa bajty jeden maksymalnie 40, drugi maksymalnie 95, w programie na PC sobie już to jakoś połączę. Tylko, że muszę powysyłać dane z 4 kanałów więc muszę to jakoś ładnie uporządkować. Więc dobrym...
Do rejestru DR trzeba się odwoływać przez 8-bitowy wskaźnik, bo on jest zadeklarowany jako 16-bitowy. Twoja zmienna tmp zupełnie nic nie zmienia. *(volatile uint8_t *)&SPI1->DR = ... 4\/3!!
Witam Przepraszam, że tak późno (brak czasu), ale może jeszcze się przyda... Proponuję uruchomić układ w debugu. Potem, gdy USB jest już skonfigurowane, zatrzymać wykonanie programu (przez breakpoint) na funkcji Storage_init z pliku usb_storage_msd.c. U mnie jest inicjacja karty jak w poniższym kodzie: [syntax=c]int8_t STORAGE_Init (uint8_t lun) { SD_Error...
Nie, to zmienna niezmienna
RCC_CFGR_PPRE2_DIV1 Chyba kolega coś pomylił: Ustawiam RCC_CFGR_ PPRE1 _DIV2 , a nie drugi raz rejetr PPRE2 _DIV1 Właśnie się odnosiłem do tego, żeby w ogóle nie "ustawiać" RCC_CFGR_PPRE2_DIV1 więc się nie pomyliłem. Jak zmienna i będzie volatile to też tyle samo trwa ? Masz tam wpisane wartości opóźnień na sztywno i optymalizator mógł stwierdzić,...
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
To co wpisujesz do rejestru MOAR to jest "adres adresu" (wskaźnik na wskaźnik) a raczej nie o to Ci chodzi... Tym bardziej że w tym kontekście tab to zmienna lokalna, więc i tak nie zadziała jak trzeba. DMA1_Stream6->M0AR = (uint32_t)&tab; 4\/3!!
Ja bym zwrócił uwagę na: typedef struct fb { char start : 8; char type : 8; ... i zmieniłbym na typedef struct fb { char start; char type; ... tak jak jest to w strukturze: typedef struct { char start; char type; uint8_t konfiguracja[4]; char Conf_End[2]; }Conf_Frame_Array; wtedy początki semantycznie będą...
zmienna=0 -> zmienna==0? edit przez ten zapis nawet jeden bit kodu związanego z ifem i tego co jest po nim ({} lub linia po) nie jest obecny w kodzie maszynowym
float normalized = 1.0 * x / INT32_MAX; To mnożenie przez 1.0 jest tu do czegoś potrzebne? Konieczny trick w tych językach, inaczej wejdziesz na pole minowe dzielenia stałoprzecinkowego. Rzutowanie na zmienny przecinek też by było ok (i chyba bez różnicy w wydajności)
resource to nie "zmienna" tylko "zasób". Jesteś pewien, że STM32 obsługuje watchpointy z maskami i konkretnymi wartościami? 4\/3!!
o dzięki, szukałem dzisiaj tego bitu w PM, ale nie mogłem znaleźć. Rzeczy związane z samym rdzeniem są opisane na stronie ARM - w dokumentacji od ST można czasem coś znaleźć, ale zwykle nie ma to sensu. http://infocenter.arm.com/help/index.jsp... Mam takie pytanie co do atomowego przepisania zmiennej nr. 1 do...
bo jest volatile a przecież ta funkcja ma związek z przerwaniami więc zmienna, która się podaje jako argument powinna być volatile. Nie musi. Nie wiem, dlaczego nie chcesz po prostu zrobic jak Ci napisałem. Masz gotowe dwa handlery. Dodatkowym plusem jest to, że będzie działać dwukierunkowo.
Witam wszystkich, Rozpocząłem swoją przygodę z mikrokontrolerami stm32 od najprostszego z możliwych programów, a mianowicie miganie diodą. Po rozkręceniu PLL do 72 MHz, postanowiłem zmieniać stan diody co około 1s(w pętli opoźniającej zliczałem zmienną "int i" do 72000000). Problem polega na tym, ze stan diody zmienia się nie co 1s, a co kilka sekund....
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
bez apelacyjne operator extern powinno się tam znaleźć. To zleży jak przebiega proces kompilacji. Jeżeli kompilujemy wszystkie pliki na raz to w sumie ta dyrektywa o której wspominasz działa tak jak oczekujesz i rzeczywiście zmienna jest zadeklarowana tylko raz. Natomiast jak kompilujemy każdy plik źródłowy osobno do postaci pośredniej i później linkujemy...
Najprościej: 1. mnożysz float *10, powstaje np zmienna "liczba"; 2. następnie "liczba" dzielisz przez 10 - masz zmienną "całe"; 3. na "liczba" wykonujesz dzielenie modulo 10 i masz ulamek. W przypadku całkowitych można też od razu rzutować na int, tak jak pisał kolega wyżej. Poskładać to do kupy z kropka pomiędzy za pomocą itoa() i już.
Witam, przecież z punktu widzenia wyjścia ta operacja będzie atomowa:[syntax=c] #define MASKA 0x07 uint8_t zmienna = 5; PORTB = (PORTB & (~MASKA)) | (zmienna & MASKA); [/syntax] Pozdrawiam.
Dalej nie odpowiedziałeśna pytanie czy masz wogóle obsługe liczb zmienno przecinkowych.
Witam, zastanawiam się w jaki sposób mogę wykonać pomiar napięcia zmiennego na STM32. Moja idea pewnie jest zła i lepiej jej nie będę testował przed konsultacją, więc chce podać napięcie zmienne o przebiegu sin. między pin_adc a gnd, spróbować to szybko i otrzymam przebieg napięcia zmiennego. Czekam na krytykę mojej idei i sprowadzenie jej na dobry...
Na chwilę obecną nie mam innego więc po prostu trzeba będzie w programie zabezpieczać aby zmienna była we właściwym zakresie
Wszystko stanie się jasne, jak poznasz sposób na "czytanie" typów zmiennych. 1. Zaczynasz od nazwy 2. Idziesz do "końca" w prawo 3. Następnie do "końca" w lewo 4. Nawiasy mogą wyznaczać "lokalne końce". Tak więc Twoja zmienna const uint8_t *Tab[3] to trzyelementowa tablica wskaźników na stałe uint8_t Jak sam widzisz nie da się wyczytać, że sama tablica...
Jaki duży masz stos i gdzie umieszczony? Czy tą tablicę modyfikujesz w innej części programu? Czy to zmienna globalna, czy automatyczna? Albert
Witam, Czy zmienna np.: uint16_t zmienna = 0x147A; może być poddana operacji w stylu "rotate 1 bit left" ? Chodzi o to, że potrzebuję napisać funkcję liczącą sumę kontrolną dla pewnego urządzenia i jednym z punktów algorytmu jest to, aby zmienną "zmienna" rotować w lewo o 1 bit. Nie chodzi tutaj o samo przesunięcie (shift), tylko o rotację. Wiem, że...
Witam, Kiedyś miałem bardzo podobny objaw i okazało się, że jedna zmienna nie była zainicjalizowana, w związku z czym przyjmowała losowe wartości, ktore zmieniały się w zależności od położenia zmiennej w pamięci mikrokontrolera - na skutek dopisywania dalszych częsci programu to miejsce zmieniało się. I raz program działał dobrze, a raz szedł w maliny...
To jest pętla jeszcze z przykładu Freddego, i ona tam nic w sumie specjalnego nie robi. A tak nawiasem to działa ale nie z nią mam problem. Problem jest z nie wchodzeniem do while (temp <= 900 && temp >=1) bo nie jest odczytywany albo źle jest odczytywany pwm . W pętli while(1) działa prawidłowo. Zmienna throtle przyjmuje rzeczywistą wartość...
Ja w takich przypadkach stosuję metodę którą na swoje potrzeby nazwałem "split objects". Obiekt u mnie składa się po prostu z dwóch części - stałej i zmiennej. Zwykle "główny" obiekt jest stały, a ten "zmienny" fragment jest podrzędny, jednak są sytuacje w których robię to odwrotnie, głównie wynikające z polimorfizmu lub dlatego że łatwiej/lepiej jest...
Po co ci ta sekcja krytyczna w EXTI9_5_IRQHandler ? Czy jeszcze jakies przerwanie korzysta ze zmiennych ktore chcesz chronic ? Jesli jest faktycznie potrzebna )w co watpie) to obliczaj pierwiastek poza nia, skopiuj wynik do zmiennej lokalnej i dopiero w sekcji krytycznej przekopiuj zmienna lokalna do globalnej. Nieliniowe funkcje biblioteczne potrafia...
Witam, Czy ktoś się spotkał z takim zagadnieniem: Debugowanie działa poprawnie w przypadku wartości we FLASH zawartość pokazywana jest poprawnie a w przypadku zmiennych w RAM pokazuje zwykle wartości 0 jak dam komendę "info mem" w konsoli debugera to wg mnie nie pokazuje poprawnych danych: info mem Using memory regions provided by the target. Num Enb...
unsigned int *ple=(unsigned int*)&ulamek; wszystko jest ok, bo to mówi mniej więcej tyle, co "postaw wskaźnik na unsigned int na adresie zmiennej ulamek". Jeśli tylko zadeklarowałeś 'ple' nie definiując go, to musisz zmienić wskaźnik (czyli samo ple), a nie to co pod nim jest (czyli *ple), i ten wskaźnik postawić na adresie zmiennej ułamek (czyli &ulamek)....
[syntax=C] unsigned int ADRES=0x.......; unsigned int zmienna; *((volatile unsigned int*)ADRES)=zmienna; //zapis pod "ADRES" zmienna=*((volatile unsigned int*)ADRES); //odczyd spot "ADRES" [/syntax]
stm32 zmienna globalna stm32 zmienna globalny stm32 zmienna pamięć
eeprom update klima peugeota wymiana toner
amica wa1s610clish tempomat uniwersalny
Kenwood RXD-25L – nowy laser, brak obrotu płyty CD, diagnostyka silnika i drivera AN8812 Scania R450: Brak komunikacji tachografu z deską rozdzielczą