CMR = 0; ARR zmienne tryb w toggle. tyle. ewentualnie PWM CMR = ARR/2
[syntax=c] int i; int suma_af = 0; const unsigned char * p = (const unsigned char *)&data for (i = 0; i < sizeof(my_type)l i++) { suma_af += p[i]; } [/syntax] Zakładam, że struktura jest upakowna ;)
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
No ale zrozum, że w każdym module w którym includujesz ten plik tworzy się kolejna kopia tej zmiennej a linker podczas linkowania próbuje ustalić adres takiej zmiennej i stwierdza, że ma kilka o takiej samej nazwie więc zgłasza błąd. Do tego co ty chcesz uzyskać służy słowo kluczowe extern
Jak się na tym breakpoincie zatrzyma to zobaczysz zmienne (zakładając oczywiście, że są widoczne dla fragmentu kodu w którym jesteś i że nie zostały wycięte przez optymalizację. 4\/3!!
Już sobie poradziłem. Głównym problemem były proste błedy, typu brak instrukcji if, złe zmienne i instrukcje w złych miejsach itp. Oczywiście nie było tam regulacji, bo to był czysty Core programu - sprawdziałem wszystko na oscyloskopie po modyfikacji programu na bieżąco. Dla osoób zainteresowanych tematem podaję link do przydatnego kalkulatora - wyliczy...
Nic nie wiemy o typie mikrokontrolera. Poszczególne serie STM32 mają różne możliwości programowania (16/32/64 bity). Nie pokazałeś deklaracji zmiennych, a od tego wiele zależy. Podejrzewam problem ze zmienną Address.
No myślę, że rozwiązaliśmy problem dostatecznie go podsumowując, także zamykamy. A ja dziękuję za zagorzałą :) dyskusję. Pozdrawiam. Temat okazał się być niedostatecznie rozwiązany gdzyż funkcje nie działały poprawnie. A oto 100% działające kody do obsługi flash: Wyłączenie zabezpieczenia zapisu wybranych oczywiście grup stron : [syntax=c]if((GPIOA->IDR...
int TDelay wyciągnij jako zmienną globalną. Za każdym razem, gdy SysTick wejdzie do przerwania ją tworzy, a to bez sensu, co? :) w końcu nigdy nie doliczysz do 500, skoro będziesz cxo chwile tworzył tą zmienną.
Zauważa pozornie. Ustawia się tak by na wyjściu byl stan wysoki przez jak najkrótszy czas (w okolicach zera). 50Hz to wolny przebieg. Jakiekolwiek napięcie wejściowe spolaryzuje diodę wejściowa. Dlaczego nie użyjesz odpowiedniego optotriaka? Rezystory muszą wytrzymać odpowiednie napięcie i moc. dobierze rezystor w kolektorze.
"Rejestry GPIO" to nic innego jak adresy w pamięci. Operuj adresami, a nie nazwami. Makra najprawdopodobniej będziesz musiał napisać sobie sam.
Odkomentuj to: [syntax=c]// pulSrc = &_sidata; // // for(pulDest = &_sdata; pulDest < &_edata; ) // { // *(pulDest++) = *(pulSrc++); // } // // /* Zero fill the bss segment. */ // for(pulDest = &_sbss; pulDest < &_ebss; ) // { // *(pulDest++) = 0; // }[/syntax]
Że tak zapytam.. Takie ustawienie: [syntax=c] SCB->AIRCR=0x5FA0000|(3<<8); //skonfiguruj PRIGROUP na 4:4 [/syntax] Ustawia wszystkie 4 dostępne bity na preemption więc tak czy siak jest 16 grup priorytetów bez możliwości ustawienia podpriorytetów w grupach. A to nie na jedno wychodzi, co 16 priorytetów bez grup? W takim wypadku ten zapis: [syntax=c]...
Kotlet ale może się przyda. Kolego "Target Options/Debug/Settings/Trace/Trace Enable Od tego momentu będziesz mógł śledzić zmienne.
Ok, Jest jakieś sensowne zastosowanie zmiennej const i volatile?
Wykorzystujesz gdzieś te zmienne w kodzie?
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 ?
To ile ma w końcu tego RAMu skoro musi to dzielić na zmienne i program?
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...
Musisz sobie utworzyć coś w rodzaju wskaźnika do tablicy. Może to być np int, który będzie wskazywał na kolejne indeksy w tablicy. Wpisujesz zmienną do tablica[indeks] i zwiększasz indeks.
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!!
Jak już korzystasz z bibliotek ST to masz chociażby funkcje: FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) i FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data) Operując na wskaźnikach możesz tam zapisać zmienne dowolnego typu, czy całe struktury.
(at)vp32 Użytkownik, który Tobie tak odpowiedział po prostu ma złą sławę, był wielokrotnie banowwany, z niewiadomego powodu się uczepił elektrody jak rzep psiego ogona. Nie jest mi znane z kim się dogadał że aktualnie to konto nie zostało zbanowane, jednocześnie przypominam użytkownikom że zachowania toksyczne nie są tolerowane i jest przycisk "zgłoś...
Sprawna wersja: http://obrazki.elektroda.pl/8007651200_1... Niesprawna: http://obrazki.elektroda.pl/2176426700_1... Wygląda na to ze bit ovr jest ustawiony tylko dlaczego. Nie zmieniam nic poza deklaracją zmiennej
Do wykonania mam projekt z wykorzystaniem mikrokontrolera STM32F103, którego celem jest pomiar napięć prądu stałego i zmiennego (peak-peak, RMS dla przebiegu sinusoidalnego) z wykorzystaniem ADC i kanału DMA. Na elektronice kompletnie się nie znam. O ile wyliczenie prądu stałego nie jest wielkim problemem, tak część odpowiedzialna za prąd zmienny juz...
Dla pierwszego razu jest zaprogramowana, dla następnych już nie, a Ty próbujesz to DMA uruchamiać w pętli, co uda się tylko jeden raz. Przepraszam, cały czas nie mogę przestawić myślenia na STM32F1xx, z którym nie mam (na szczęście) do czynienia. Strasznie dziwne to układy i niepodobne nawet do nowszych serii STM32. Tyle dywagacji, teraz pora na pokazanie...
zwróć też uwagę, że ta 1000 elementowa tablica zajmować będzie (4+2+2+1+13)*1000 bajtów zmieści ci się to w RAMie stma? jeszcze musi trochę zostać na stos, biblioteki, inne zmienne... po co ci tablica na 1000 nazw plików?
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...
Jak masz dobrze ustawiony CMSIS, wywołaj funkcję SystemCoreClockUpdate() i sprawdź co masz w zmiennej SystemCoreClock.
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...
A najlepiej jakbyś kod pokazał
Twoim pierwszym, podstawowym i najgłupszym błędem są funkcje biblioteczne typu GPIO_WriteBit( ); IS_GPIO_BIT_ACTION(Bit_SET);.... Ręce opadają. Przestań wykorzystywać w swoim kodzie tą bibliotekę, a najpewniej układ zacznie działać - a jeśli nie, to wtedy sam będę miał motywację i umiejętności do analizy tego kodu... PS Znacznik syntax nie zagnieżdża...
Masz przebieg sinusoidalnie zmienny przesunięty względem masy na połowę napięcia zasilania ?
wojlej: pierwszy zapis wprowadza nową nazwę typu - niepotrzebnie. GK: Taką strukturę można zadeklarować jako zmienną automatyczną....
W załączniku jest kompletny projekt. Jeśli chodzi o typ zmiennej odebrano_polecenie jest to unsigned int.
No ale jaki jest w ogóle sens tego kodu? 1. Najpierw czekasz na zmienną którą ustawiasz w tej samej funkcji i ponoć nie masz przerwań (choć w komentarzach coś niby o nich piszesz), to po co czekać? (nie mówiąc już o tym, że się nigdy nie doczekasz poza pierwszym razem [może], gdyż nigdzie tej zmiennej nie zerujesz przy braku problemów) 2. Potem kopiujesz...
Witam z placu boju nierównego. Krzaczy się niekoniecznie przy 2000. Przy dwustu zaczyna, jak dojdzie do przepisywania stron. Walczył ktoś z tą dokładnie biblioteką? Może jakaś podpowiedź? Jeśli zmienne z tej paczki 20 x 16bitów są zmieniane wszystkie na raz Zmieniane są pojedynczo, paczka 16 x 16 bit lub 4 x 16bit. p.s. Wina była moja-przepełnienie...
Czy dla samego czyszczenia trzeba to pakować do zmiennej? [syntax=c]SPI->DR;[/syntax] Tyle wydaje mi się, żeby wystarczyło.
Witajcie, Mam STM32 i kodek o rozdzielczości 24 bity. Próbki mam w zmiennej 32-bitowej. Chcę jakoś "zredukować" tą próbkę do 16 bitów. W jaki sposób mogę to zrobić? Tzn, wiem, że mogę po prostu zrobić rzutowanie (int16_t) na zmienną 16-bitową, ale da się to zrobić w jakiś bardziej optymalny sposób? I jak potem to zrobić w drugą stronę?
Po kilkunastogodzinnych zmaganiach z wyrzucaniem programu do Default Handler Dzieje się to dlatego, że: 1. modyfikujesz stos, choć nie informujesz o tym kompilatora w sekcji "clobber" Twoich dyrektyw, 2. zostawiasz stos niewyrównany do 8 (na niektórych rdzeniach to nie jest problem, w sumie z STM32 domyślnie to jest problem chyba tylko na F1). Efekt...
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...
BlueDraco nie mieszaj, nsvinc nie daj się wkrecać, bo nie o tym mowa. DMA obsługuje transfery 8-, 16-, 32-bitowe. HardFault tak jak pisałem generuje np. próba zapisania do adresu "tylko do odczytu". W przypadku wciągnięcia śmieci ze zmiennej albo rejestru peryferium najczęściej dostajemy adres 0x00 lub z przedziału 16b i nie ma nic do rzeczy to czy...
Uart2 taktuję z APB1, dla którego ustawiłem taktowanie 45MHz za pomocą preskalerów. A do BRR wpisuję 45MHz/9600. Czyli wartość 4687. Profil zasilania sprawdzę, projekt napisany w System Workbench for STM32 Ten odczyt zmiennej WS dopiszę. Nie wiem czy dobrze cię zrozumiałem, ale uruchamiałem już usarta na HSI wpisując do BRR 16mhz/9600 i wszystko działało,...
Może ktoś ma pomysł z czym jest problem i jak go naprawić? Dodam jeszcze że problem ten występuje nawet w najprostszym programie (inkrementacja zmiennej). A czy jesteś pewien, że szablon z którego skorzystasz odpowiada dokładnie mikrokontrolerowi: STM32F103VD ? Ważna jest każda literka symbolu procka. Z tego co sprawdziłem, to zestaw Kamami ma mikrokontroler...
Proszę bardzo! Wersja minimalna - zapamiętywanie jednej zmiennej na F0. No fakt, aż 36 wierszy. Nie no błagam... nie rozśmieszaj mnie. Chodziło o kod który dla DOWOLNEJ ilości zmiennych (oczywiście w granicach rozsądku tak aby wszystkie mieściły się w emulowanym EEPROMie) pozwala NA ŻĄDANIE odczytać/zapisać WYBRANĄ zmienną. A ty wrzucasz tu jakieś...
Ja bym dodał dodatkową sekcję i przy pomocy attribute w gcc jawnie umieścił zmienne i funkcje w tej sekcji. Potem tylko wywołując linker należy określić gdzie ta dodatkowa sekcja ma wylądować. Inne rozwiązanie wskazał już kol. (at)Freddie Chopin .
Witajcie Próbuję się w końcu nauczyć tego C i jednocześnie STM32, no ale... Deklaracja zmiennych: uint8_t Tim = 230; uint8_t Tim_Poprzedni = 230; uint8_t C = 0; uint8_t R = 0; Program (wielkie słowo :D): while (1) { HAL_Delay(1000); Tim++; R = Tim - Tim_Poprzedni; if (Tim - Tim_Poprzedni >= 10) { Tim_Poprzedni = Tim; C++; } } Póki Licznik Tim się nie...
Możesz dać gotowca jak masz i przeanalizuje to. Gotowca (źródła), który działa prawie identycznie (inne częstotliwości migania ale to drobny szczegół) jak Twoje założenia projektowe, masz u siebie na dysku. Jest to program demo wgrywany fabrycznie do płytek Nucleo i znajduje się w repozytorium programu STM32CubeIDE. Gdzie akurat u Ciebie na dysku jest...
Taka zmienna nie może zostać zoptymalizowana To zależy od programu, a nie od zmiennej.
Ponadto zmiennej temperature brakuje słówka na "v" :)
Jeśli zmiana rozmiaru buforów powoduje że program przestaje działać oznacza to że prawdopodobnie kończy się pamięć na stosie. Kilka rozwiązań jest. 1. zwiększyć stos 2. zdefiniować bufory jako static albo zmienne globalne wtedy nie trafią na stos 3. jeżeli idea projektu na to pozwala podzielić odczyt na mniejsze paczki i zapisywać po trochu(używając...
Witajcie, stworzyłem analizator w oparciu o wzór na DFT. Niby wszystko fajnie, ale problem jest taki, że jak puszczam to w ruch to na każdym "widmie" mam to samo ;/ Sprawdzałem na dwóch prążkach (różne konfiguracje) i ciągle skaczą w taki sam sposób. Kod main.c: [syntax=c]/** ****************************************...
Cześć przerobiłem kod kol. Szczywronka i postanowiłem zmodyfikować fo dla stm32f0discovery oto kod [syntax=c] //Załączenie pliku nagłówkowego #include "stm32f0xx.h" //Deklaracja funkcji //void gpio_pin_cfg(GPIO_TypeDef *port_ptr, uint32_t pin, uint32_t mode_cnf_value); int main(void){ //Włączenie zegara dla GPIOC RCC->APB2ENR = RCC_AHBENR_GPIOCEN;...
Ok, zrobię ja albo na poczatku, albo na koncu flasha Dodano po 1 Tak się nie da. Chyba, że kod programu zostanie podzielony na dwie sekcje i jedna będzie umieszczona przed tablicą a druga za tablicą. A jak zastosowac sekcje np. dla całego pliku, żeby nie definiowac przy każdej zmiennej?
Adres się sumuje, ale nie tak, jak myślisz. Dodawanie do adresu liczby działa w C dokładniuśko tak, jak indeksowanie, ale zupełnie inaczej, niż zwykła arytmetyka na liczbach. Liczba jest najpierw mnożona przez rozmiar typu, na który wskazuje adres, a potem dopiero dodawana do adresu. Dlatego m.in. kompilator nie akceptuje dodawania do typu void * -...
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 .
Stawiam na różne adresy kodu w pamięci Przecież adresy są takie same. Adresy używanych zmiennych zresztą też.
Spróbuj te zmienne zadeklarować jako static xHandleTaskLED1, xHandleTaskLED2, xLastFlashTime
Nie rozumiem czego tutaj szukać. Skoro nie wychodzi z pętli to problem leży w braku powrotu z funkcji LCDN_SPI_Transmit(), Chyba, że w jakiś cudowny sposób udaje ci się modyfikować zmienną "k"
Nie ma jakiegoś sposobu na sprawdzenie co go kieruje na default handler? Pewnie że jest i to nie jeden (; Dorzuć do swojego projektu gdzieś coś takiego: w okolicy miejsca które spowodowało problem. Patrzysz wtedy do pliku .lss i patrzysz co znajduje się w zakresie +/- 3 instrukcje od tego miejsca. 4\/3!!
Panowie dziękuję za pomoc ale połowę z tego zrozumiałem, więc nawet nie próbowałem tego robić bo wiem że i tak nic z tego nie będzie. Zrobiłem tak: skonfigurowałem ADC w CubeMX, bez DMA. Wygenerowałem kod. Z pliku adc.c usunąłem linijki odpowiadające za włączenie dwóch kanałów: [syntax=c]//sConfig.Channel = ADC_CHANNEL_1; //sConfig.Channel = ADC_CHANNEL_2;[/syntax]...
Czy dotyczy to tylko tej struktury "TIM_TimeBaseInit"? Dotyczy to każdej zmiennej - to chyba oczywiste czytając komunikat błędu - "declaration" nie jest określone jakoś szczególnie, więc definitywnie chodzi o wszystkie deklaracje zmiennych. Ponownie podaję linka: http://lmgtfy.com/?q=error%3A+%23268%3A+...
extern należy dodać wtedy gdy dołączamy ten sam plik .h kilka razy (zresztą kompilator nas o tym uprzejmie poinformuje). Wskaźnik jest zmienną wskazującą na dane w obszarze flash i jest umieszczony w RAM'ie'. Wskaźnik może wskazywać również na dane w RAM'ie.
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
Rzeczywiście kompilator zwraca przy f_write warning. Jak to powinno się poprawnie zapisać? Należy użyć dokładnie takiego typu jakiego oczekuje funkcja, czyli UINT, a nie uint8_t. I bynajmniej nie chodzi o rzutowanie - należy zmienić typ zmiennej której adres jest przekazywany do funkcji. Zwrotne informacje z tych funkcji odbieram, ale nie chciałem...
Witam. Dopiero zaczynam przygodę z STM, więc proszę o wyrozumiałość. Używam linuxa ubuntu 18.04. Zainstalowałem System Workbench i ustawiłem reguły dotyczące programatora ST-Link/V2 oraz wykonałem update firmware. Programator znajduje się na płytce "STM32 NUCLEO-F446RE". Po utworzeniu przykładowego projektu dla tej płytki jestem w stanie wgrać wsad...
A wysyłanie zwykłego znaku działa? Na początek proponuje sobie podzielić pracę na etapy. 1) Konfiguracja RS232 2) Wysyłanie pojedynczego znaku 3) Wysyłanie stringa 4) Wysyłanie zmiennej 1 bitowej 5) Wysyłanie zmiennej wielo bitowej 6) Wysyłanie zmiennej jako stringa
Maskujesz błąd błędem. Najpierw zrozum, co się dzieje w Twoim kodzie. while((SPI1->SR & SPI_SR_BSY) == 0) - to znaczy "powtarzaj tak długo, jak długo SPI nie pracuje (bo skończył transmisję)". Kiedy wyjdziesz z tej pętli? Co masz w niej powtarzać? To się kupy nie trzyma. Wciąż podejrzewam jednak, że oprócz tych 10 błędów masz jeszcze jedenasty...
Kulka wlatująca w przeszkodę to najpewniej efekt pracy na intach. Jesli miałbyś FPU, to problem byłby rozwiązany - po prostu brakuje Ci ułamków... Spróbuj wykonywać operację na u64 fixed point, przesuwając przecinek na np 40sty bit -> Q23.40... Funkcje trygonometryczne powinieneś wtedy tez mieć stablicowane w tym formacie, ale dodatkowo owinąć LUT w...
Jest wiele metod. Najwygodniejsze: 1. Ustaw sobie SWV data trace i pisz do jakiejś globalnej zmiennej. Bedzesz miał w CubeIde licznik taktów wyświetlony kiedy ten zapis się dokonał. Odejmiesz dwie wartości i będziesz miał wynik :) [url=https://www.elektroda.pl/rtvforum/v... pisałem Ci już o SWV Jest to potężne narzędzie...
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...
Programując stm32 i chcąc zobaczyć jakieś zmienne czy ich wykresy używam darmowego STMStudio. Co więcej STM udostępnia swoją wersję oprogramowania do generacji kodu z simulinka z matlaba, także może warto by było zacząć od tej platformy, do wszystkiego znajdziesz tutoriale (po angielsku rzecz jasna).
To tak teraz wygląda ale wcześniej dawałem tam delay-a i wyświetlały mi się współrzędne na moment i zaraz pojawiały się inne wartości tak jakby coś się pod te zmienne podstawiało i innej funkcji.
Jeszcze jedno mam pytanie. Szybciej w STM32 wykona się dodawanie/odejmowanie 32 bitowych zmiennych, czy 8 bit ? A jak w powyższym jest z mnożeniem i dzieleniem ?
A tą zmienną "data" masz gdzieś zainicjalizowaną? 4\/3!!
Jest też opcja, że w nagłówkach brakuje extern "C", choć to raczej mało prawdopodobne... W każdym razie kod DSP/math z CMSIS nie jest tylko w nagłówkach, całkiem sporo funkcji i wszystkie stałe/zmienne są w normalnych plikach .c, które sobie trzeba dodać do kompilacji. Inną opcją jest użycie tej biblioteki jako biblioteki statycznej, czyli plik .a,...
Mówisz wszystkie? Przecież tam masz przypisanie do zmiennej wskaźnikowej zmienną uint16_t, to nie ma prawo działać. Zresztą robisz to kilkukrotnie. Wg mnie musisz mocno przemyśleć zastosowanie wskaźników bo ewidentnie mieszasz. Przemyśl sobie poniższy kod, który nie powoduje błędów - jest tylko przykładem: [syntax=c] uint16_t wart[16][16]; //tablica...
warningi znikają po usunięciu volatile sprzed deklaracji zmiennej buf1, ale nic się nie pojawia w terminalu Może faktycznie przedobrzyłem z tym volatile ale po jego osunięciu program działa jak powinien. Co prawda było u mnie jakieś potknięcie z działaniem, gdy go pierwszy raz usunąłem ale nie jestem pewien czy to nie przypadek (kabelki, ustawienie...
Chcę mierzyć napięcia na 32 kanałach i zastosowałem multipleksery. Dlatego podczas pomiarów w przerwaniu od ADC chcę zmieniać ustawienia multiplekserów i ustawienia zmiennych w DMA. Jednocześnie przez DMA zapisuję do zmiennych wyniki, ponieważ nie chcę zajmować procesora. Problem jest to, jak w przerwaniu od ADC automatycznie wystartować DMA dla przepisania...
Nie znam tej biblioteki, pół minuty temu pobrałem jej źródła, ale z tego co patrzę, to struktura FILINFO zadeklarowana jakoś tak: [syntax=C]// FatFS R0.08b, ff.h typedef struct { DWORDfsize; /* File size */ WORDfdate; /* Last modified date */ WORDftime; /* Last modified time */ BYTEfattrib; /* Attribute */ TCHARfname[13]; /* Short file name (8.3 format)...
Takich rzeczy się nie da debugować zdalnie. Generalnie technika jest taka że się eliminuje problem po problemie. 1. Zobacz w debugerze czy trafia to do pamięci tam gdzie chcesz. 2. Zrób tablicę z danymi testowymi i po prostu wyślij to do DAC-a I tak po kolei eliminuj zmienne z równania. Innej medoty nie ma.
Kompilator języka C (zakładając poprawną konfigurację projektu/make'a) nawet jakbyś wrzucił milion niepotrzebnych plików, to wyrzuci z nich funkcje, których nie używasz (tak zwany martwy kod). Nie będą więc one w kodzie wynikowym No tak, ale np. gcc zrobi tak tylko gdy wywołasz go z flagami -ffunction-sections i -fdata-sections. A jeszcze potem trzeba...
Zostały Ci jeszcze dwa niezmienione "data" (; Noo tak, faktycznie. Czyli teraz żeby umieścić dane to trzeba dopisać do zmiennej: [syntax=c]__attribute__ ((section(".ext_data")))[/syntax]
Jako radę na poczatek: nie pisz zbyt długich operacji bo jeszcze ich nie zrozumiesz. Używaj zmiennych pośrednich. Będzie Ci łatwiej to ogarnąć.
Czy jest jakiś sposób aby ustawić unikalny MAC adres takiego układu, np. wykorzystując ID procesora aby bliźniacze układy w sieci nie miały konfliktu adresów? Jeśli chcesz aby adres był faktycznie unikalny, to jedynym rozwiązaniem jest wykupić sobie pulę numerków od odpowiedniej organizacji. Generując ten adres na podstawie czegokolwiek zawsze jest...
wracając do zmiennej float. test lcd wrzuciłem do funkcji, będzie widoczny. wrzuć sobie ją przed funkcją loop() jak pokazałem, wrzuć wywołanie w tej loop() na początku, tak czy siek, ten kod co cały wkleiłeś jest na razie bez sensu, jak zauważył jarekgol, potem go uporządkujesz. void testujLCD() { int jakisint = 5; float jakisulamek = 12.345;...
Po pierwsze: w GLCD nie ma funkcji wyświetlającej zmienne. Są tylko wyświetlające stringi (zresztą tez do poprawki, bo rzucają warningami o konwersji typów uint/chr). [syntax=c] int temperatura; char napis[6]; sprintf(napis, "Temperatura: %d", temperatura); GUI_Text(0,0,napis,Black,White); [/syntax]
Pomijając sensowność używania sprintf do SKOPIOWANIA stringa do jakiejś zmiennej, to błędów jest bardzo dużo. 1. Skasowałeś stronę którą chcesz zapisywać? 2. Odblokowałeś zapis do flasha? 3. Twój zapis jest dziurawy, bo jak zero będzie na nieparzystej pozycji, to pętla nie zakończy się wtedy kiedy będziesz chciał 4. Odczytujesz FlashStatus, to sprawdź...
Możesz sobie postawić watchpointa na zapis do tej zmiennej, to zobaczysz kiedy zmienia się jej zawartość. 4\/3!!
Teraz powiedzcie Koledzy jak do tego powinienem podejść przerzucając tego typu program do freeRTOS? Gdzie tu użyć semafora? Czy jest on wogóle potrzebny? Nigdzie. Należy użyć kolejki. Czym ten semafor różni się od "tradycyjnie" utworzonej zmiennej, którą np. chciałbym synchronizować wykonanie różnych zadań ("zadań" gdyż myślę jeszcze realiami aplikacji...
Też mi się wydawało że dla STM32 nie ma różnicy między zmienną 8 i 16 bitową ale dioda wyraźnie z mniejszą częstotliwością migała stąd takie konkluzje. W jaki sposób mam skonfigurować zegar żeby uzyskać prędkość działania STM32 podobną do np. atmega32 z ustawioną częstotliwością 8 albo 16MHz. No chyba że nie da się porównać tego tak łatwo i ustawienie...
1. Rozumiem że sprawdziłeś w RM Twojego procesora że piny sa ok. 2. Jak używasz takich struktur z danymi na stosie (zmiennych lokalnych dobra praktyką jest zainicjalizowac je kompletnie - zmienne lokalne nie są zerowane i mogą coś zawierać.
Raczej "na wolno" to wymyśliłeś. "Na szybko" to jest moja wersja bez zmiennego przecinka. ;) Do 18 dodajesz 7 - wychodzi 25, Ty dzielisz przez 8, a kompilator przesuwa w prawo o 3 i jest wynik 3.
Możesz tak zmodyfikować swoje funkcje, aby zwiększały specjalną zmienną globalną na starcie i zmniejszały przed powrotem o tyle bajtów ile zajmują zmienne lokalne danej funkcji. Wartość takiej zmiennej możesz wyrzucać na port szeregowy (co nie zawsze jest możliwe) albo odczytywać debugerem. O wiele prościej wypełnić cały RAM jakąś znaną wartością i...
Wymieniliśmy zalety odpowiedniego deklarowania zmiennych i wystarczy, kto ma chęci, to zrobi tutka w lepszym standardzie... ;)
Witam. Po kliknięciu debug wyskakuje mi taki oto komunikat. Mam ustawiony Standart GDB Launcher, reszta też ustawiona raczej poprawnie... http://obrazki.elektroda.pl/8457041000_1... Jakieś pomysły? Włącz sobie linię poleceń Windowsa i wklep komendę "arm-none-eabi-gcc --version". Jeśli nie znajdzie polecenia, to musisz sobie dodać ścieżkę...
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...
Jeśli transmisja buforTx do PC idzie bez problemu to najłatwiej do tego ciągu "wrzucić" dane w postaci szesnastkowej. Z postu to nie wynika, ale domyślam się, że dla każdej zmiennej X, Y i Z są dane 16 bitowe - wyjdą po 4 cyfry dla każdej zmiennej.Sposobów istnieje wiele, przykładowy 1. wyłuskać cyfrę ze zmiennej 16 bitowej 2. przekształcić ją z zakresu...
Przeglądam tak sobie to co debugger wypluwa i wychodzi na to, że problem dotyczy tego kawałka kodu (ff.c): if (fs) { fs->fs_type = 0; /* Clear new fs object */ #if _FS_REENTRANT /* Create sync object for the new volume */ if (!ff_cre_syncobj(vol, &fs->sobj)) return FR_INT_ERR; #endif } Potem przechodzi do Default_Handler()...
a reklamy wcale nie wyskakuja czesto, mi sie zdarza raz na 1h moze nawet rzadziej A jak klikniesz debug? podgladu rejestrow nie ma ale zawsze mozna to ominac w taki sposob ze sobie dane z rejestru do zmiennej przypisujesz i w zakladce veriables masz to do podgladu Nie próbowałem. Ale w Keilu w podglądzie rejestrów możesz sobie w trakcie debugowania...
stm32 zmienne extern stm32 zmienne pamięci zmienne obciążenie
kosztorysy elektryczne różnice attiny atmega xantia regulator
wiertarko wkrętarka wiertarko wkrętarka
Pralka Amica pobiera wodę i się wyłącza - przyczyny i rozwiązania Brak dźwięku przez HDMI-USB-C na Debianie 12