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...
Dzięki za szybką odpowiedź. Przy okazji zapytam. Jeśli jest wykorzystywana tablica, to szybciej będzie się wykonywało obliczenia z wykorzystywaniem standardowej obsługi, czy obliczeń na niej z wykorzystaniem wskaźników ?
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.
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...
po takiej deklaracji w sekcji .ssitag lądują wskaźniki do tej tablicy, a nie sama tablica, jak wymusic żeby całosć tam wylądowała? Musiałbyś albo w tablicy umieścić nie napisy ("...") tylko po prostu wskaźniki do tych napisów (osobnych obiektów), z których każdy miałby również ten atrybut. Druga opcja to zrobienie tablicy tablic (obecnie masz tablicę...
... czy da sie to zrobić jakoś wydajniej? Bo w tym przypadku dla każdej ikony tworzę oddzielna funkcję, która różni się tylko tablicą. Napisz jedną funkcję do wyświetlania z parametrami. Funkcję tę uruchom z RAM'u. Kompilator i tak rozmieści "liniowo" tę dwuwymiarową tablicę więc możesz używać wskaźnika zrzutowanego na "u16". Jakbyś nie zrobił (wskaźniki...
Dobra a możecie mi powiedzieć jakie są wnioski z tej Wasze rozmowy, bo co prawda nie wszystko rozumiem o czym piszecie, ale dla mnie ważne są wnioski, jak mam pisać te tablice i wskaźniki stringowe aby były we Flashu PS. co to jest RISC-V toolchain
Niestety funkcja umieszczająca dane w kolejce potrzebuje wskaźnika na te dane. Jeśli masz dużo takich danych stałych to umieść je w tablicy stałych a w #define zadeklaruj wskaźniki do danych w tej tablicy. [syntax=c]const int ConstTab[] = { 10,20, 30, 40, 50}; #define STALA_A (&ConstTab[0]) #define STALA_B (&ConstTab[1]) #define STALA_C (&ConstTab[2])...
Znalazłem informację, że: text + bss = FLASH data + bss = RAM To powinno wygladac tak: text + data = FLASH data + bss = RAM Zmienne zainicjalizowanie (.data) powinny zostac przekopiowne z FLASH do RAM przed funkcją main. 1) Deklarujesz tablice i ja inicjalizujesz (bedzie zajmowala miejsce we FLASH oraz RAM) 2) Tylko flash. 3) Zadeklarowałeś tablicę...
Powodem może być niepoprawna konfiguracja rejestrów sterownika. poza tym nie pokazałeś jak wygląda funkcja zapisu do ramu i ustawienia kursora. Ja używam takich funkcji: [syntax=c] typedef struct { vu16 REG; vu16 RAM; }LCD_TypeDef; #define LCD_BASE (0x6c000000) #define LCD (( LCD_TypeDef *) LCD_BASE) void LCD_WrReg(u8 reg, u16 data) { LCD->REG =...
No i wszystko zaczęło ładnie działać. Długość ciągu wejściowego obliczam teraz tak: [syntax=c] while(*txt++) dlugosc++; [/syntax] Jak widać wychodzą braki w doświadczeniu. Po prostu w tym przypadku: [syntax=c] dlugosc = sizeof(txt); [/syntax] Obliczał długość wskaźnika, a nie tablicy na którą jest ten wskaźnik. Bardzo dziękuję za pomoc tadzik85.
Chłopie, myślisz, że uda się się przesunąć vector Resetu oraz początkowy wskaźnik stosu? Dlaczego pierwsze a nie ostatnie to przecież bez znaczenia.
Nie używaj tej głupawej biblioteki to będziesz wiedział dokładnie Co zrobiłeś i jak to cofnąć. Zmiana wskaźnika stosu PRZED wywołaniem jakiejś funkcji (FLASH_Lock() ) też nie wydaje mi się szczególnie dobrym pomysłem. W ogóle proste zadanie, ale tak je zakręciłeś jakimiś dziwnymi konstrukcjami, że nie wiadomo o co chodzi... A tak przy okazji, to skoro...
(assignment makes integer from pointer without a cast Przetłumacz sobie to na polski: "operator przypisania powoduje zmianę wskaźnika na wartość całkowitą bez rzutowania" i chyba jest jasne w czym jest probiem? `*(__IO uint16_t*)(Page_127 + i)` - abstrahując od tego czy jest to poprawne, jest to "komórka w pamięci reprezentująca wartość typu uint16_t",...
Jest napisane: ustaw PSIZE na 32 bity. To wpływa na sposób i czas zapisu i nie ma nic wspólnego z organizacją pamięci. W F4 pamięć zapisuje się w słowach 32-bitowych - zrzutuj wskaźnik na uint32_t na tę tablicę i zapisuj po 32 bity.
le jeżeli utworzę tablicę globalną jak poniżej: static const uint8_t tablica Nie. Co zrobi kompilator tego nie wiesz, bo modyfikatory static i const nie służą określaniu położenia zmiennych, czy tablic w pamięci. const ci jedynie daje tyle, że próba modyfikacji takiej tablicy powinna zakończyć się błędem podczas kompilacji. Oczywiście w praktyce, na...
nie no - sizeof() podaje rozmiar tablicy, ale nie zawsze. Jeśli tablica jest "widoczna" dla tego sizeof'a (czyli np. jest globalna w tym właśnie pliku, lokalna w tej właśnie funkcji), nie jest tylko wskaźnikiem na tablicę itd. to sizeof zwróci rozmiar tablicy w bajtach. [syntax=C]int tablica[] = {0, 1, 2, 3, 4}; extern int tablica_globalna_z_innego_pliku[];...
Nie można w ten sposób inicjalizować tablicy data, bo ona musi mieć albo podany konkretny rozmiar, albo musi być zdefiniowana gdzieś indziej i tutaj tylko wskaźnik. 4\/3!!
Witam! Mam kłopot z uartem w stm32. Wysyła ok, wchodzi w przerwanie od rx uarta i odczytuje jego DR zapisując do tablicy i zwiększając wskaźnik do tablicy żeby był gotowy na następne przerwanie ale ono właśnie nie wystepuje pomimo, że następny bajt przychodzi uartem. Systick co 100ms inicjuje wysłanie zapytania do zewnętrznego urządzenia i urządzenie...
Radzę zignorować powyższą poradę... Tablica wektorów ma poprawną "formę", więc radzę jej nie psuć... Wielu osobom działa, więc nie szukaj błędu tam gdzie go nie ma. Zresztą gdyby ta część była błędna, to układ nawet by nie wystartował, wiec chyba jednak warto założyć, że nie ma tu "błędu". W tablicy wektorów popraw tylko te wektory, które są "powyżej"...
- po co było rzutowanie *(__IO uint32_t*) i dlaczego adres wyliczał się błędnie Nie wiem czemu to usunąłeś, ale to jest KONIECZNE. A to dlatego, że ty nie masz skoczyć pod adres (tablica_wektorów + 4), tylko pod adres który jest zapisany w (tablica_wektorów + 4). I właśnie po to było tam rzutowanie i dereferencja wskaźnika. 4\/3!!
Zupełnie naplątałeś... Po pierwsze, nie przejdzie *ple=99.1 . Dlaczego? Bo 'ple' jest wskaźnikiem na unsigned int , więc kompilator nie będzie przypisywał ci wartości zmiennoprzecinkowych do typu całkowitego, więc otrzymujesz ekwiwalent przypisu *ple=99; ... Po drugie, czy ty może dysponujesz debuggerem? Wypadałoby sprawdzić co dzieje się z pamięcią...
W sumie gdy przeczytałem Twój post uzmysłowiłem sobie, że ten startup to i tak w większości assembler, bo korzysta mocno z wstawek... Zaczynam wątpić w sens tego przedsięwzięcia W zasadzie sam sobie odpowiedziałeś, ale wrzucę swoje 3 grosze :) Według mnie pisanie startup'u w C za pomocą wstawek asemblerowych jest mało sensowne. C występuje tu w roli...
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Witam Postanowiłem zapytać tutaj, ponieważ wydaje mi się że to odpowiedni temat. Uczę się programowania na bazie STM32. Teraz poznaje porty USART i pojawił się problem: Pokazałeś fragmenty kodu i myślę, ze nawet jak będziesz miał funkcję wysyłającą jeden znak na LCD to program nie zadziała poprawnie. Problem najprościej, na szybko, rozwiązać deklarując...
Datasheet podaje, że wytrzymałość pamięci flash to minimum 10000 cykli. Przemyśl, czy naprawdę warto kombinować, bo - uwierz - niepoprawne uruchomienie programu z RAM potrafi czasem sporo namieszać (szukasz błędu który nie istnieje). Co do komend, to po pierwsze musisz mieć inny skrypt linkera (bo nie używasz już flash), musisz wiec inaczej linkować...
Podsumowując... Loader umieszczony jest we flash od adresu 0 i nie ma od tego odstępstw. Aplikacja umieszczona jest pod dowolnym adresem we flash z wyrównaniem do 512. Żadne biblioteki nie maja kodu na stałe przypisanego pod konkretny adres, nawet SPL, wszystkie startupy i tak zależą od linkera, no chyba, że ktoś sobie coś udziwił i coś na stałe przypisał....
Poprzez reset tego nie uruchomisz. Potrzebna jest do tego inna opcja. Żeby program ruszył z RAMu, Loader musi ustawić wskaźnik stosu, wskaźnik tablicy wektorów i wywołać funkcję wejściową. Dodano po 41 Tablica wektorów przestawia się sama w zależności od konfiguracji pinów BOOTx. No tak, nie wziąłem pod uwagę, że to STM32 A jednak Note: When booting...
Hej... Mam pytanie z programowania, C, już głupieję... Chcę zrobić globalną tablicę z danymi bajtowymi. Każdy wiersz ma kilka pól oraz tablicę bajtową, różnej długości, od 4 bajtow do np. 100kB (teoretycznie). Musi być to zatem wskaźnik na dane, zeby kazda tablica bajtowa miala inna dlugosc. Próbowałem zrobić tablicę wskaźników i przydzielać pamięć...
Myślałem żeby załaczyć Ci mój projekt ale - 1. jest komercyjny 2. jest zbyt myślę złożony Tak że na szybko sama idea - jest to zrobione w 5 minut i skrypt linkera powinno sie przerobic lepiej. Funkcje też są do kitu - bo parametry trzeba przekazywać wskaznikiem do nich) wtedy nie jesteś ograniczony ich ilościa itd itd. Nie jest to reentrant i bezpieczne....
Witam ponownie, jakiś czas temu zadałem pytanie odnośnie przechowywania bitmap w pamięci flash mikrokontrolera. Jednakże troszkę to zagmatwałem ,więc postanowiłem otworzyć nowy temat. Postaram się wyklarować pytanie najbardziej jak potrafię. :) Mianowicie mam do przechowywania tablicę mieszczącą 76800 elementów 16-bitowych oraz kilka innych mniejszych....
Co to jest "bt_vector_read"? Zamiast 1 dodaj 4 i po problemie. Swoją droga to problemem jest cały sposób, bo można to zrobić 100x prościej i wygodniej... Stwórz sobie strukturę zawierającą dwa wskaźniki na te dwie funkcje, następnie stwórz stałą poprzez zrzutowanie adresu twoich wektorów na typ tej struktury. Albo po prostu nazwy funkcji ustaw jako...
Startupy w C są w paczce z biblioteką ST Standard Peripheral Library - gdzieś tam są schowane. Zobacz ten startup w asm, poczytaj co tam jest zrobione i zrób to samo w C. Generalnie inicjalizację .data i .bss da się zrobić w pętli, inicjalizację dodatkowego stosu czy modyfikację rejestru kontrolnego trzeba robić przez funkcje-wstawki-assemblerowe które...
Język programowania to narzędzie. Wypada przeczytać instrukcję żeby wiedzieć jak się nim posłużyć. Prowadzenie dyskusji z kolegą Jacynka, przykro mi to pisać, prowadzi do mylnego wyobrażenia. Jesli wstawia kawałek pseudo kodu i pisze że to To podstawowy przykład ze strony mcs to jest to wprowadzanie ludzi uczestniczących w dyskusji w błąd . Przykład...
Dajemy 'reset' a program nie uruchamia się z bootloader-a i co wtedy? A nie uruchamia się ponieważ: włączony jest remap, przeniesiona tablica wektorów, zawiera 'byle co', nieustawiona 'power domain' itp. Mieszasz sprawy. Reset to reset. Skoro Twój układ uruchamia się po podaniu zasilania, to po resecie tez się uruchomi. Jeśli po resecie się nie uruchomi,...
liczba=atoi(nrfRX To jest tzw Undefined Behaviour. I jest to błąd bardzo poważny. Wytłumaczę Ci, co to robi. Bierze jeden bajt (zakładam że typ tego jest uint8_t []) i konwertuje do wskaźnika do char. Następnie to na co wskazuje ten wskaźnik (a będzie on wskazywać na jakiś adres w zakresie 0x00:0xff (czyli na tablice wektorów)) jest traktowane jako...
1. Odpowiedź pytaniem - a dlaczego by nie? Równie dobrze mogę Cię spytać, czemu Twój program składa się z x plików zamiast z jednego i byłoby to nawet lepsze pytanie, bo taki program może być bardziej zoptymalizowany przez kompilator niż coś rozdzielonego na setkę plików (; 2. Jedyne miejsce gdzie kolejność ma znaczenie to sama tablica. W końcu w C...
A może robisz jakieś błędne operacje przy pomocy wskaźników? W zasadzie samo manipulowanie numerami komórek tablicy to operacje wskaźnikowe... I W ten sposób bezwiednie nadpisujesz inne dane? Podałeś za mało informacji. Jak chcesz żeby ktoś Ci pomógł, musisz bardziej precyzyjnie pytać.
Kompilowało się na AVR, a tutaj nie, to fakt. Potraktujcie to raczej jak pseudokod, chciałem pokazać tylko o co mi chodzi. Te tablice są dość spore, bo zawierają zestaw wszystkich znaków, dużych i małych liter lecz nie jest to cała tablica ASCII. W programie chcę się do tego łatwo odwoływać, potrzebuję adres pierwszego piksela pierwszego znaku każdej...
Bezpośrednie wywołanie funkcji termf ("double - %d", 1.35); powoduje błędne wyświetlenie. Bo parametr %d nie określa liczby zmiennoprzecinkowej. Trochę pobawiłem się biblioteką (STM32) i jak pisałem wyżej, funkcja termf nie działa prawidłowo gdy brakuje w jej wywołaniu wskaźnika do tablicy (nie wiem dlaczego) Trzeba go dodać: int termf (char *ptr,const...
Freddie Chopin, FIFO jest dobrym rozwiązaniem, myślałem, że uda się to zrobić w prostszy sposób. Niestety muszę przebudować wszystkie funkcje z tym związane, bo chcę zamienić aktualne rozwiązanie czyli dwie zmienne tablica i licznik danych w buforze na strukturę z tablicą, wskaźnikiem na ostatnio odczytany element i licznikiem danych w buforze. Mam...
Nie wiem jak wygląda Twój projekt. Ja mam w pliku port.c gdzieś tam dopisane tylko 3 linijki: [syntax=c] void PendSV_Handler(void) __attribute__ ((interrupt, naked, alias("xPortPendSVHandler"))); void SysTick_Handler(void) __attribute__ ((interrupt, alias("xPortSysTickHandler"))); void SVC_Handler(void) __attribute__ ((interrupt, naked, alias("vPortSVCHandler")));...
Tak, to wiem, ale funkcja będzie pobierać dane wg swojej deklaracji czy wg deklaracji tablicy? Według swojej deklaracji. Jeżeli przekażesz do funkcji tablice: [syntax=c] uint8_t tab[] = {0x14, 0x2A, 0x56, 0xDF}; [/syntax] to w funkcji odczytasz przez wskaźnik na zmienna 16 bitowa (zakładając ze procek jest little endian): [syntax=c] font[0] - 0x2A14;...
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Dokładnie tak, interesowało mnie dlaczego kod nie działa w takiej sytuacji. Miałem takie problemy z testowaniem własnego kodu po wrzucaniu do ram lub flash naprzemiennie, niestety nie dotarłem do przyczyny i sobie darowałem. Płytka to olimexino stm32 z STM32F103RBT6. Zasadniczo wszystko ma swoje źródło w tablicy wektorów, znajdującej się w pamięci...
ja właśnie rozglądałem się za sprzętem do zrobienia falownika Mikro-kontrolery z rdzeniami arm jak stm32f103 lub lpc1768 mają bloki pwm przystosowane do sterowania silnika. 3 fazowe timery z wyjściami komplementarnym przykład taki masz w dokumencie dla lpc1768 http://www.nxp.com/documents/application... Problem na jaki się natknąłem przeglądając...
Zabrałem się za stworzenie buforu i teraz mam pytanie z C++: [syntax=cpp]itoa(CzasImpulsu, CzasImpulsu_TAB, 10);[/syntax] Z itoa otrzymuje tablicę przykładowo 6 charów. Chciałbym ją jakoś sprytnie zapisać do bufora RamkaA[512] nie używając pętli iteracyjnych tylko np operacji na wskaźnikach a nie wiem jak się za to zabrać. Chodzi o zapełnianie np 85...
Z tym rzutowaniem to wolę jednak "ręcznie" to robić....jakoś tak wydaje mi się bezpieczniej. U mnie akurat sizeof zawsze będzie mniejsze niż 256 gdyż jest to po prostu ilość bajtów do zapisania jednej zmiennej/tablicy/struktury i nie zamierzam robić większych :wink:. Biblioteki z ST są zakręcone..niestety. Zaletą mojego pomysłu jest to że struktura...
Witam, Pytanie jak w tytule: ilu bitowe są wskaźniki w STM32F4xx? Chodzi o dostęp do pamięci (RAM czy FLASH) powyżej 64kB? Czy wystarczy zadeklarować tablicę: const TABLICA[64][2048]={......} żeby można było ja potem odczytać np. uint16_t wynik=TABLICA[13][1209] - czy taka operacja odczyta element 1209-ty z podtablicy numer 13?
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef? Dziękuję bardzo za wytknięcie błędu. Jeszcze sporo nauki przede mną. Po zmianie wywołania z HAL_UART_Receive_IT(&huart2, &Received, 1); na HAL_UART_Receive_IT(&huart2, Received, 1); UART zaczął ładnie odbierać dane...
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....
Ściągnij sobie darmowe przykłady do mojej ksiażki o LCD-TFT w darmowych przykładach nie ma ssd1289 1. Niepotrzebne memcpy z tablicy AsciiLib do buffer. wystarczy użyć wskaźnika. Wiem, że wskaźnik byłby lepszy ale nie czuje/rozumiem na tyle dobrze wskaźniki w tablicach wielowymiarowych . Mimo to udało się ale wciąż widzę to za mglą. 2. Niepotrzebne...
Mam na sztywno podać ich rozmiar? Też można. Niestety nie rozumiem tego: "No bo takie rzeczy trzeba robić "po ludzku", czyli bufor ręcznie (wcześnie), a następnie należy go podpiąć do tej struktury (zmienić tablicę na normalny wskaźnik). " Z tego zrozumiałem, że to ma być jednak wskaźnik, nie tablica. Zrób tak: [syntax=c] struct framebuffer { ... void*...
Nie ma się co denerwować i nie wyśmiewam nikogo. Tylko napisałeś że ta tablica, np nr_danej0 jest tablicą liczb, z opisu transmisji wynika coś innego. Z kolei wklejona funkcja służy do odbierania, co z kolei działa pewnie dobrze. Pytanie tylko czy chcesz, aby funkcja ta była blokująca (czekała na dane) czy nie blokująca, tzn nie będzie blokowała programu...
hohoh Tymon, szczerze to nie czytałem całego tego dokładnie, ale na pierwszy rzut oka to czy to nie jest "przekombinowane" jesli chodzi o nasz problem? ;p Zajmuje to dość trochę pamięci, tworzenie jakichś tablic wskaźników do struktur w takim przypadku to też dość nieciekawa sprawa. Szczerze mowiac to zrozumienie twojego kodu zajmuje troche czasu :D...
Warto jednak zdawać sobię sprawę jakie są koszty użycia tej klasy: No dobra, ale wiesz że przykład którym się posłużyłeś nie ma identycznej funkcjonalności, no nie? <: Nie żebym był za używaniem std::string na mikrokontrolerach w każdej sytuacji, no ale jednak wypadałoby zaznaczyć, że ta klasa ma sporo większe możliwości niż goły wskaźnik. Bo gdyby...
ale przecież w definicji tej punkcji nie ma informacji, że ma być to wskaźnik. Za to w tej pierwszej (f_read) już jest. Kompilator się nie czepia, bo akurat tam jest to poprawnie (składniowo), choć wcale nie tak jakbyś tego oczekiwał. znasz rozwiązanie mojej zagadki Owszem. Podać od razu? <: Rozumiem, że chodzi o to, że char to jeden znak a char...
Rozumiem, że po zakończeniu transmisji DMA należy ją zaprogramować jeszcze raz, ale akurat w tym przykładzie chce dane wysyłać tylko raz, inicjuje ją w Board_Config(); Ale przecież wołasz ten transfer w pętli głównej, czyli go w nieskończoność powtarzasz! Na dodatek nie ustawiasz na nowo licznika i adresu źródła, więc adres jest nonstop inkrementowany...
Przetwarzanie danych to typowo operacje matematyczne w połączeniu z indeksowaniem po tablicach. Jest konieczne i tego nie wyeliminujemy, ale do tego nie trzeba I/O, sterowników, oczekiwania na gotowość urządzenia, ani ponawiania komend dla TFT i czekania na zakończenie sekwencji. Kiedy masz do dyspozycji 8MB DRAM, to nie ma sensu cykać po pikselku,...
Witam Mam dosyć spory problem z parsowaniem tekstu, mianowicie użytkownik może w terminalu wpisać sobie taką o to składnie. Silnik 3,5;Silnik 5,25;Silnika 7,45; Ma to podzielić na "Silnik 3,5" , "Silnika 5,25" itp; Robię to w następujący sposób: -gdy z USARTa przychodzi ciąg znaków zakończonych znakiem '\0' wychodzi do przerwania gdzie tworzona jest...
Wygeneruj plik *.map i sprawdź co leży w pamięci przed zmienną nadpisywaną (zakładam, że inna tablica) a następnie zobacz czy Ci indeksy "nie uciekły". Jeżeli operujesz na wskaźniku to łatwo cała pamięć "niepostrzeżenie" zamalować.
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ć...
Jak to zwykle bywa w takich przypadkach , problemem okazała się "za krótka" tablica i wskaźnik "pisał" poza nią :). Niestety chyba nie ma prostego sposobu na to żeby to wyłapać oprócz dokładnej analizy kodu :(
ram No jasne, jak tablice itp. Na tablicach dużo robie i nie skojarzyłem że to jest to samo... a ram to adres początku tablicy. Dzięki. A dlaczego jako wskaźnik to nie działa? Czemu wewnątrz nawiasu adres się po prostu nie sumuje? No i to co powyżej pokazałem i niby działa, to działa tylko przypadkiem? Dodano po 3 Więc albo sprawdź, albo podawaj wartości...
W maliny nie idzie chociaż czytałem na forum FatFs, że wspomniane błędy pojawiają się przy problemach z alokacją pamięci i ew nadpisywaniem zmiennej FIL. f_mount muszę jeszcze raz sprawdzić. Podłączyłem tft i sprawdzam wszystkie wartości na bierząco - oprócz tej... Kiedy plik ma wielkość np 1 bajtu. f_open, f_lseek, f_write zwracają 0 a dopiero f_close...
Witam serdecznie, dziś mam kolejne pytanie z rodzaju - nie wiem jak zrobić, bo pewnie źle się za to zabrałem. Chciałem napisać funkcję, która będzie mi modyfikowała podany jako argument string *string pod kątem usuwania frazy podanej jako *del. Napisałem poniższą funkcję, jednakże po pewnym czasie chciałem ją troszkę rozbudować, aby można też było używać...
Witam, Głowię się od jakiegoś czasu jak rozwiązać następujący problem. Piszę program na procesor STM32F4, który miałby po RS232 wysyłać dane zawarte w strukturze: [syntax=c]struct rs232_data { int a; int b; int c; }; struct rs232_data dane; dane.a = 12; dane.b = 34; dane.c = 76;[/syntax] Póki co to przykładowa struktura, która ma na celu wyłącznie przetestowanie...
Niezupełnie. Kod źródłowy "aplikacji" nie musi wiedzieć, czy jest zapisany od adresu 0 i startuje sam, czy jest startowany przez bootloader. O tym wie tylko konsolidator, który generuje kod odpowiedni dla zadanego adresu startowego. Pod adresem bazowym aplikacja ma kompletną tablicą wyjątków, z wektorem RESET. Bootloader po zweryfikowaniu aplikacji...
Napisałeś wcześniej, że sam określasz położenie stosu i sterty ..bo że rozmiar można definiować to już wiem. Mógłbyś pokazać jak to robisz? .. czy definicja rozmiaru służy tylko rezerwacji wymaganego miejsca w pamięci , czy może przekroczenie rozmiaru stosu wywołuje jakiś Fault_Handler ?? Generalnie większość znanych mi rozwiązań polega na tym iż definiuje...
Witam! Kilka słów o projekcie. Urządzenie wykonuje odczyt z czujników - częstotliwość pomiarów i ilość punktów pomiarowych jest zmienna. Pomiary następnie są wysyłane do urządzenia nadzorującego w odpowiedzi na jego zapytanie. Moim założeniem jest kolejkowanie pełnych ramek z pomiarami i czasem ich wykonania w postaci listy jednokierunkowej, a gdy jest...
Recensione Miałem okazję być na tym evencie, więc słów kilka... Konferencja prowadzona była przez firmy Computer Controls (PL) oraz LDRA (UK). Na początku miała miejsce prezentacja działalności obu firm. Następnie poruszone zostały zagadnienia związane z bezpieczeństwem w embedded - było pokrótce o procesie tworzenia oprogramowania, testów, oraz ogólnie...
tablica wskaźnik stm32 tablica wskaźników tablica adresem stm32
prasa prędkość moduł zasilający bosch sekretarka sprzedać
sterownik movera sterownik movera
Instrukcje obsługi i serwisowe Samsung Renaissance: MQ-910A, CD-1310B, MQ-910Q, MQ-1310D Hitachi 24HE2000 TV Firmware Download: Official Update Methods, Vestel 17MB211S, Recovery Options