Ponieważ wskaźnik na tab[ww][kk] jest nieokreślony. [syntax=c]Matrix(int _w, int _k) : w(_w), k(_k) { int **tab = new int *[w]; for (size_t i = 0; i < w; i++) { tab[i] = new int [k]; // +++++++++++++++++ for (size_t j = 0; j < k; k++) { tab[i][j] = 0; } // +++++++++++++++++ } ObjectCount++; }[/syntax] [syntax=c]#include <iostream> class...
Teraz pozostało mi przenieść projekt z stm32 na lm3s, ponieważ zajmuję się tym w wolnym czasie od pracy, to efektem podzielę się pewnie za kilka dni. To naprawdę nie jest dużo roboty, generalnie (pomijając detale typu zmiana nazw plików czy nazwy projektu) trzeba zrobić mniej więcej "aż" tyle: 1. poprawić tablicę wektorów (to i tak byś miał kiedyś...
w wielu jezykach programista jest zwolniony z tego zmartwienia przez standardowe biblioteki. podejrzewam, ze wlasnie jakies rozwiazanie podobne do przedstawionego przez Ciebie jest stosowane do rozwiazania tego problemu. jedyna optymalizacja, jaka mi przychodzi teraz do glowy, to dynamiczna modyfikacja rozmiaru "kesow". Np: kazdy nastepny "kes" dodawany...
Dla dynamicznej alokacji pamięci ilość pamięci w systemie nie ma większego znaczenia. Nie ma granicy powyżej której ma ona sens, a poniżej już nie. Wszystko zależy od zastosowań. Tu kolega alokuje niewielkie ilości pamięci i być może ma to sens. IMHO dynamiczna alokacja pamięci jest demonizowana - jeśli wszystko robi się jak należy to jest to tak samo...
jeżeli masz listę jednokierunkową, to najpierw musisz odnaleźć element poprzedzający ten, który musisz usunąć. Resztę masz opisaną tu: http://www.elektroda.pl/rtvforum/topic90...
W zasadzie tak nie należy robić. Dwie gwiazdki obok siebie to już jest podejrzane, a le trzy.... ;) Ale jeżeli chodzi tylko o gimnastykę z językiem C, to trzeba to zrobić tak: Dodano po 28 Tak, taka jest składania. Zmienna tablica wewnątrz funkcji funkcja() jest wskaźnikiem na zmienną tablica z funkcji main() . Trochę mylące jest użycie tej samej nazwy...
Co do powyższego to owszem, wskaźnik to po prostu komórka pamięci przechowująca adres do innej komórki, gdy dokonamy inkrementacji (++) lub dekrementacji (--) zmienimy zawartość wskaźnika, adres wskaźnika jest nadal ten sam. [syntax=c]int a[]={1, 2, 3}; int *b=&a; &a -operator adresu do zmiennej a ------------------------------------ Pamięć [0x00|0x01|0x02|0x03|0x04]...
Witam! A'propos "przytyku" Wszystko zawarłem w pierwszej odpowiedzi. Koledzy chyba posto-nabijacze ? A to fragment cytowanej, Twojej pierwszej odpowiedzi: 1. Pobierasz rozmiar tablicy przy użyciu scanf("%d", &rozmiar) zmienna rozmiar jest typu całkowitego. Skoro pobiera się rozmiar tablicy przy pomocy funkcji scanf od razu zakładam, że rozmiar tablicy...
Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
If addr is NULL, then the kernel chooses the address at which to create the mapping; Wystarczy czytać...
Witam Mam problem z programem, ponieważ, nie mam pojęcia dlaczego się wysypuje, wszystko wygląda ok. Na razie program ma stworzyć 2 tablice, jedną z nich wyzerować i wyświetlić. Stosowałem calloc, ale też się program wysypuje. Proszę o pomoc Pozdrawiam [syntax=c]#include<stdio.h> #include<stdlib.h> #define SIZE_X 80 #define SIZE_Y 22 void...
W tym drugim przypadku procedura dostaje jako argument wartość adresu. *ret - to bajt wskazywany przez ten adres. Temu bajtowi (znakowi) próbujesz nadać wartość równą adresowi - nie zmieśżci się i nie ma to żadnego sensu. W pierwszym przypadku dostajesz jako argument adres, pod którym zapisany jest adres, i pod ten adres zapisujesz swój adres - to ma...
Poza tym po skompilowaniu Twojego kodu nie wyświetla średniej, która jednak musi być zawarta jako wynik działania programu. Wprowadź małą ilość, np 2 to zobaczysz że wypisze 3 punkty. http://ideone.com/VZ526V Pierwszy punkt wypisał się w wierszu z pytaniem, ostatni punkt to średnia.
Czy na pewno potrzebna jest ci dynamiczna alokacja pamięci? Rozważ poniższy przykład: [syntax=c]#include <stdio.h> int TABLICA[10][4]; void copy_tab(int dst[], int src[], int size) { for (int i = 0; i < size; i++) dst[i] = src[i]; } int main() { int TAB[4] = { 1, 2, 3, 4 }; copy_tab(TABLICA[3], TAB, 4); for (int i = 0; i < 4; i++) printf("TABLICA[3][%d]...
Przy proggramowaniu niedużych mikrokontrolerów dynamiczna alokacja pamięci nie ma sensu. Więcej pamięci zmarnujesz w związku z alokacją, niż jej zaalokujesz, a ponadto: kto inny miałby korzystać z pamięci, której w danej chwili nie używa jeden proces i jaką masz pewność, że ten inny proces nie zechce zaalokować pamięci w tym samym czasie, co ten pierwszy?...
Nie ma takiej zależności. Jeśli nie korzystasz z dynamicznej alokacji pamięci to możesz to bardzo zgrubnie oszacować po ilości zmiennych automatycznych (lokalnych), a szczególnie tablic. To co czyni takie oszacowanie szczególnie trudnym to określenie stopnia zagnieżdżenia funkcji - bo to zajmuje sporo pamięci na stosie. A zależy to od ilości przerwań,...
Witam , mam problem z przekształceniem programu aby tablice byly utworzone w pamieci dynamicznej. Jak ktos mial by jaks pomysl albo podpowiedział co i jak bede wdzięczny. (program prosty ma dodawać dwie macierze do siebie) [syntax=csharp] #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int tab1[0][0]; int tab2[0][0];...
witam, Mam mały problem do rozwiązania. Z wejścia czytam dowolnie dużą ilość łańcuchów znaków, każdy dowolnie długi. Może się zdarzyć że np. będą 2 łańcuchy nie dłuższe niż 10 znaków, a może się zdażyć że będzie np. 20 łancuchów po 20 znaków (hipotetycznie). Myślałem żeby rozwiązać to na wskaźnikach i dynamicznej alokacji pamięci, np. tak jak poniżej....
Rozbudowuję moją aplikację o dynamiczną alokacje pamięci - prosty stos FIFO. fifo.c Warning implicit declaration of function 'push' - jak to interpretować? kompilator myśli, że deklaruje po raz kolejny funkcje push? Na tym etapie z warningami, stos FIFO działa poprawnie. Kiedy próbuję dodać na początek pliku main.c , bibliotekę fifo.h , zaraz otrzymuje...
Zgadza się :) To jest alokacja dynamiczna pamięci dla tablicy indices, ale na stosie, tzw. VLA. O ile pamiętam, napisane było też, aby stosować to do tablic o małym łącznym rozmiarze ;)
A możecie mi jeszcze powiedzieć jak ustawić: HeapSize, CSTACK i RSTACK, bo coś chyba zamieszałem i mi się zawiesza KIT?? Nie ma na to prostej odpowiedzi. CSTACK to w zależności od tego ile najwięcej zmiennych lokalnych musi być przechowywana naraz. Zdaje sie że też wchodzą do niego zmienne typu STATIC i tym podobne. RSTACK służy do przechowywania adresów...
[syntax=c] #include<stdio.h> #include<stdlib.h> int *funkcja(int wiersze, int kolumny); void wypisz(int *tab, int wiersze, int kolumny); int main(void){ int *tab = funkcja(4,6); wypisz(tab,4,6); return 0; } int *funkcja(int wiersze, int kolumny){ int *p = (int)malloc(wiersze*kolumny*sizeof(int))... int i ,j ; int indeks; for(j = 0; j< kolumny;j++){...
Z dynamiczną alokacją pamięci na mikrokontrolerach trzeba uważać, często powoduje problemy. Niektóre kompilatory nie dopuszczają opcji dynamicznej alokacji pamięci, nawet nie umożliwiają wywołania rekurencji (model reentrant i non-reentrant). Szczególnie dla uc 8-bitowych.
polecenia które mają na początku "f" dotyczą plików - od "file". Plik to oczywiście nie plik na dysku, to po prostu struktura, która zawiera w sobie informacje jak do niej pisać. Można takie struktury tworzyć dla LCD, 1wire i czego dusza zapragnie, ale moim zdaniem nie ma co mieszać. Przy użyciu zwykłego printf piszesz do pliku który nazywa się stdout,...
1188015 mam problem z następującym kodem i zadanie z nim związane a dokładnie zadanie polega na zestrzeleniu wszystkich wrogich statków następowało przejście na kolejny poziom, na którym jest więcej statków. Wykorzystać dynamiczną alokację pamięci. mam z tym problem ponieważ nie wiem jak użyć malloca i realloca.Pozdrawiam
Teoretycznie funkcja malloc() przy braku miejsca zwraca NULL- jednak nie używam dynamicznej alokacji pamięci także ten sposób odpada napisać funkcję kontrolującą stos, odpalić w symulatorze tylko jak taka funkcja miała by wyglądać coby informowała o nałożeniu się stosu na sekcje danych... jedyne rozwiązanie jakie mi przychodzi do głowy to właśnie porównywać...
pamiętaj również o dynamicznej alokacji pamięci dla tej zmiennej (konieczne, jeśli nie znamy rozmiaru tablicy)
Przecież istnieje coś takiego jak dynamiczna alokacja pamięci to raz a dwa to moja linijka przecież ma już znany rozmiar na etapie kompilacji.
W takim razie pozostaje dynamiczna alokacja pamięci czyli opcja b. Język C++ oferuje operatory new i delete, natomiast w języku C pozostaje calloc, malloc, free i realloc.
Pierwsze trzy rzeczy o których pisze przemko nie mają wpływu na to działanie, natomiast ma rację dalej. Tylko, że to nie jest obiekt statyczny tylko automatyczny, musi być dynamiczna alokacja pamięci, żeby dane wskazywane przez wskaźniki nie traciły się po wykonaniu funkcji.
Witam, Tak już robiłem i np. SRAM = .data + .bss wychodziło mi około 12kb a procek miał 32kb. Czyli to by oznaczało, że reszta to stos, czyli że te 20kb stosu jest za mało? Nie używam dynamicznej alokacji pamięci. Pozd
Nie chodzi o złożoność obliczeniową alokatora, a o skutki dynamicznej alokacji jako takiej przy ściśle określonych (ograniczonych) zasobach, ale to tylko jedno z niebezpieczeństw pisania na uC w stylu takim jak na PC z 16 GiB RAM. Nie o język chodzi, a o typowe sposoby pisania programów wynikające z praktyki używania tego języka. Nie wiem o co Ci dokładnie...
Potrzebuję w projekcie użyć dynamicznej alokacji pamięci, niestety malloc() zawsze zwraca mi NULL. 1. Proponuję nie używać malloc w projektach embedded. 2. Najprawdoposobniej sbrk jest tylko "kadłubkowa" dla zapernienia linkowania się kodu. Co zrobić: 1. Jeżeli się już uparłeś na "malloc" to proponował bym freeRTOS-a z jego implementacją heap4.c albo...
Może nie ma miejsca na stercie i nadpisujesz stos, albo coś? Albo wskaźniki stosu i sterty są tak blisko siebie? Ogólnie działa Tobie dynamiczna alokacja pamięci (malloc)? Nigdy nie programowałem procesorów, nie znam tez architektury, ale spojrzałem szybko w kod i takie rzeczy mi się nasunęły.
Nawet jeśli longjmp nie przywraca trybu procesora, chyba można to zrobić przed lub po skoku? RETI umożliwia jednoczesny powrót i włączenie przerwań. Gdyby chcieć zrobić to osobno, najpierw należałoby powrócić, a następnie włączyć przerwania. Normalnie nie jest to możliwe, bo powrót jest do nieustalonego z góry miejsca. Tutaj jest znane. Ja tu widzę...
Dynamiczna alokacja pamięci. ... int *tab, rozmiar; cout << "ile elementow? "; cin >> rozmiar; tab = new int[rozmiar]; ... //na koncu kodu źródłowego delete [] tab; Do elementów tablicy odwołujesz się tak jak zwykle. pozdrawiam
Z ilością miejsca jest właśnie problem. Przyrost 20kB jak na razie nie jest dopuszczalny. Co do sprintf'a dzięki za linki. Już sobie z tym poradzę :) Nie chcę zaczynać nowego wątku, więc napiszę to tutaj. Chodzi o implementację funkcji sscanf, która nie korzysta z dynamicznej alokacji pamięci. Czy natknąłeś się może na coś takiego?
BlueDraco Nie mogę się z tym zgodzić. Jakoś w każdym szanującym się RTOS'ie jest dostępna dynamiczna alokacja pamięci. Oczywiście jest to często źródło problemów ale takie ale są sytuacje gdzie bez dynamicznej alokacji nie da się zbyt wiele zdziałać. W rzeczywistości w duzych projektach dzięki dynamicznej alokacji jest więcej dostępnej pamięci ;)....
To małe podpowiedzi - użyj typedef, żeby nie tworzyć takich typecastowych potworków :) I druga - pamiętaj, że tablica wskaźników to tylko tablica wskaźników. Zasadniczo implikuje to użycie dynamicznej alokacji pamięci, albo przypasanie wskaźnikom wyłącznie adresów zmiennych globalnych, nigdy nie lokalnych. Ale K&R to dobry trop, tylko czytaj go od początku,...
Dobrze zrozumiałeś, problem w tym, że twój program tak nie robi. sulfur - nie trzeba robić dynamicznego zarządzania pamięcią - ono już jest :) Pytanie, czy dodatkowe dwa bajty na wskaźnik rekompensują użycie dynamicznej alokacji pamięci - IMHO tak, gdyż jeśli zadeklaruję tablicę chociażby tylko z zapasem jednego urządzenia 1-wire, to tracę 8 bajtów...
(at)herszt: jeśli jest tak, jak napisał Kolega arrevalk, to powinieneś ten usuwać to na co wskazuje wskaźnik przed przypisaniem mu kolejnego fragmentu pamięci. Jeśli nie robisz tego, to tworzysz w pamięci obszary, na które nic nie wskazuje, co oznacza, iż są to śmieci - nic na nie nie wskazuje, ale to jednak pamięć zaalokowana przez program, więc system...
Zgodnie z nazwą ten problem da się rozwiązać jedynie poprzez dynamiczną alokację pamięci (; Niemniej jednak nie musi to być koniecznie malloc() czy new, wystarczy np. jeden wielki bufor, z którego w swoim programie "odcinasz" potrzebne Ci kawałki - to po prostu byłaby Twoja sterta. Niemniej jednak zbyt wiele nie zyskasz tak czy siak... Może prościej...
Zrób dynamiczną alokację pamięci. float **tab = new float *[3]; tab[0] = new float[rozmiar1]; tab[1] = new float[rozmiar2]; tab[2] = new float[rozmiar3]; // jakieś operacje na tablicy for(int i = 0; i< 3; i++) delete[] tab[i]; delete []tab;
Witam. Mam wykonać polecenie: 'Stworzyć strukturę zawierającą dynamicznie zaalokowaną tablicę dwuwymiarową i jej wymiary. Tablica dwuwymiarowa jest reprezentowana przez odpowiedni wskaźnik.' Oprócz tego jeszcze zwolnić zaalokowaną pamięć. Oto co napisałem.. byłbym wdzięczny gdyby ktoś sprawdził czy dobrze to zrobiłem i ewentualnie pokazał mi błąd. #include...
0. Żeby wyszukiwało pliki w podfolderach trzeba je podać wprost w odpowiedniej linijce w Makefile. 1. Treść chyba mówi sama za siebie. 2. W przykładach plik ten jest lekko zmodyfikowany - z tego co pamiętam wystarczy wpisać "void" do pustego nawiasu i już. 3. Potrzebne Ci będą też syscalls, ewentualnie zmień używany tryb dynamicznej alokacji pamięci....
Albo można - dla ćwiczenia - pobawić się strzelaniem z armaty do wróbla i zająć się dynamiczną alokacją pamięci. W takim wypadku stworzysz listę struktur. Na pierwszy element takiej listy musisz posiadać w pamięci wskaźnik. Zamiast tworzyć zmienną "pozycja" tworzysz strukturę "pozycja" a w niej zmienną "indeks" oraz wskaźnik na następny element listy....
Jako, że w zademonstrowanym programie nie ma dynamicznej alokacji pamięci, to nie możemy mówić o wyciekach pamięci. 1. Funkcja strtok2() nie robi tego, co ma w opisie, więc nie mogę stwierdzić, czy działa poprawnie, a raczej stwierdzam, że nie działa poprawnie. Dość dużo miesza tutaj "static src". Napraw albo funkcję, albo opis. 2. funkcja strtok2()...
Co do lock i unlock, to proponuję raczej sekcję krytyczną, chyba że alokujesz dynamicznie pamięci z kontekstu przerwania (to wtedy musi być blokada przerwań) lub nigdy nie wykorzystujesz selektywnego "zawieszania" tasków (wtedy może być suspend-all). Suspend all jest wywoływany w wewnętrznych funkcjach FreeRTOSa takich jak na przykład delay, więc lepiej...
Sorry ~Radek , ale nie pokazuj proszę tego kodu jako przykładu rozwiązania tego zadania. 1) po co Ci w ogóle wsk_2? 1a) przydzielasz pamięć na tablicę, a jej nie zwalniasz. 2) czemu dynamiczna alokacja pamięci? Przecież rozmiar jest znany i zawsze równy 100. 3) program się zapętli, jeśli wpiszesz CTRL-Z i enter (pod windowsem). 4) średnią liczysz jako...
Dzięki Freddie! Po odblokowaniu __USES_CXX i pobraniu syscalls kontenery działają jak należy. Mam jednak jeszcze jedno male pytanko: chcialem użyć standardowej kolejki FIFO (std::queue) do której w main-e wrzucam jakaś wartość natomiast w przerwaniu ta wartość odczytuje. W którymś ze swoich postów pisałeś ze dynamiczna alokacja pamięci w przerwaniach...
Aby ci to działało to MUSISZ zaimplementować swoje własne syscalls dla open, read, write, close itd. (nie wszystkie muszą działać prawidłowo, choć powinny). Pod tym linkiem który podałeś są przecież nawet podane funkcje (_read_r(), _write_r(), _open_r(), ...). Dodatkowo konieczna jest implementacja DZIAŁAJĄCEGO _sbrk_r(), ponieważ fopen() (a w zasadzie...
Funkcja printf jest bardzo wygodna, mozna więc napisać swoją, z ograniczoną funkcjonalnością - w takim wypadku zajmuje może kilkaset bajtów (a nie 10k). Nawet sobie taką stworzyłem, obsługuje tylko %s, %d i %x - zupełnie wystarcza dla typowych zastosowań. Co do dynamicznej alokacji pamięci, to wszyscy na nią narzekają, ale mnie osobiście wydaje się,...
Do tej pory myślałem że C++ to największy HardCore jaki może być, ale jeżeli poza dodanymi dodatkowymi bajerami nic ze zwykłego C w nim nie ubyło, jak również nie ma przymusu korzystania z jego dobrodziejstw, to OK :D Ale tak jak pisałem nieprędko na niego przejdę. Nie ma to dla mnie najmniejszego sensu, gdyż nawet w zwykłym C nie stosuję dynamicznej...
Można je utworzyć na stercie wykorzystując dynamiczną alokację pamięci, co jednak dla małych zmiennych nie jest ekonomiczne. W praktyce interpreter musiałby mieć własnego menagera pamięci, realizującego właśnie coś na kształt sterty, tyle, że dostosowanej do potrzeb interpretera. Z drugiej strony avr-gcc wspiera rozszerzenie C99 umożliwiające tworzenie...
Oczywiście, masz rację. Jak będzie globalna ewentualnie zdefiniowana przez funkcję nadżędną - to tak jak mówiłeś, do funkcji przez wskaźnik. Rozwiązanie dosyć eleganckie, można taką tablicę wykorzystać w roli np.: bufora także do innych funkcji. Jak będzie statyczna - (oczywiście również masz rację) tu akurat chodzi mi o galsan, po prostu kod jest bardziej...
To zacznij o czegoś prostego np, klasa zmiennej zespolonej albo klase macierz wielowymiarowej z dynamiczną alokacją pamięci i ze zliczaniem odwołań. Najlepiej te macierz zrobić jako template wtedy można podstawić zmienną zespoloną i przetesować obie klasy. Opisany wyżej problem był rozważany u mnie na uczelni a wiedza wymagana pokrywa prawie całą składnie...
Wskaźnik na dynamiczną alokację pamięci: [syntax=cpp]int rows = 5; int cols = 5; int **matrix = new int *[rows]; for (size_t row = 0; row < rows; row++) { matrix[row] = new int[cols]; for (size_t col = 0; col < cols; col++) { std::cin >> matrix[row][col]; } }[/syntax] [syntax=c]int rows = 5; int cols = 5; int **matrix = (int **)malloc(rows...
Witam znalazłem kod programu terminala uart napisany w języku c. Dane wysyłane z mikrokontrrolera zapisywane są w buforze BYTE RS_buf; natomiast wyświetlane w konsoli przez printf("%c", RS_buf);. Mój problem polega na tym, iż chciałbym aby dane w moim przypadku są to trzy liczby oddzielone znakiem| zostały przekonwertowane z ciągu znaków pochodzącego...
Funkcja taka powinna przyjmować wskaźnik na "const char*", skoro i tak go nie zmienia (wiem że go nie zmienia, bo jakby próbowała, to byś miał zwiechę przy stringach z flasha) i wtedy problemu nie ma. Taki dobry nawyk (; Jeśli "parametr wskaźnikowy" nie jest modyfikowany, to powinien być const i tyle. Kompilator czepia się całkiem słusznie, bo zakłada,...
Funkcje te są w nagłówku <avr/pgmspace.h>: http://www.tuxgraphics.org/common/src2/a... Te, które mają sufiks _PF obsługują wskaźniki 24 i 32 bitowe do FLASH. Pozostałe funkcje - np. sprintf_P i inne z IO.h z _P obsługują __memx ale tylko w obrębie pierwszych 64 kB - nie ma potrzeby,...
Generalnie debugowanie przy pomocy tak prostych rzeczy jak terminal, LCD czy nawet zwykły LED bywa bardzo proste i mało kosztowne ;) jak sprawdzić ilość wolnej pamięci w Procku?? Ma ktoś na to jakiś pomysł? Jakaś komenda typu memfree :) Może nie ma ale przy starcie programu zapisujesz całą pamięć RAM od sekcji DATA (za zamiennymi globalnymi) do końca...
Witam. Chciałbym zapytać czy posiada ktoś terminal uart napisany w języku c. Udało mi się nawiązać połączenie (obustronne) z atmegą8 włączanie i wyłączanie próbkowania adc odbywa się przez klawiaturę komputera natomiast dane(napięcia na poszczególnych 3 kanałach) wyświetlane są w terminalu Realterm. Teraz chciałbym aby dane napięć zostały wysyłane na...
Po raz kolejny proszę o radę, bo wydawało mi się, że mam po prostu za mało RAMu i już myślałem o tym, żeby dołożyć zewnętrzną pamięć, ale pomyślałem, że zobaczę najpierw czy jak nie będę używał malloca, to program jakoś będzie chodził. Niestety mimo że nie ma w ogóle dynamicznej alokacji pamięci, to i tak program nie działa, a dokładnie działa do pewnego...
Witam, ponownie mam problem z dynamiczną alokacją pamięci i pobieraniem danych od użytkownika. Działanie programu powinno wyglądać tak: 1. Użytkownik wpisuje na przykład 1 2 3; 4 5 6 ;7 8 9; 2. program dynamicznie alokuje w pamięci tablicę 3x3 o zawartości 1 2 3 4 5 6 7 8 9 Dodatkowe założenia: użytkownik może wpisać DOWOLNĄ ilość spacji pomiędzy wartościami...
co muszę zrobić, żebym mógł tak go używać?;] czy można stworzyć po prostu strumień do którego wpisywałbym dane za pomocą fprintf jak to było np. w AVR-GCC? czyli np. fprintf(&LCD, "Hello World"); czy już tak łatwo to nie pójdzie?;P Jeśli mowa o printf() z newlib, to nie jest to aż takie proste... Musisz zaimplementować (poprawnie) syscalls odpowiedzialne...
Cześć, Została to wspomniana moja biblioteka do obsługi systemu plików ext2/3/4. Napisałem ta bibliotekę do własnych celów w zeszłym roku. Duża jej część bazuje na implementacji systemu operacyjnego HelenOS. Jednak trzeba było się trochę nagimnastykować aby odpalić ją na mikrokontrolerze ;). Biblioteka umożliwia obsługę: - ext2 (większość funkcjonalności)...
wystarczy poprawić funkcje free/malloc/alloc/realloc tak, aby zmieniały wartość zmiennej globalnej określającej wielkość wolnego obszaru sterty Myślę, że nie do końca. Każdy algorytm dynamicznej alokacji pamięci nie polegający na wykorzystaniu MMU będzie generował narzut na przestrzeni dostępnej rzeczywistej pamięci. Ciężko jest zgadnąć ten narzut...
Hmm napiszę może o co mi dokładnie chodzi. Mam kod (połączenie dwóch języków C oraz MicroPythona). Zamysł autora był taki, żeby cały SRAM(tj 112K+16K) przeznaczyć na bufor obrazu, a CCM RAM(tj. 64K) na całą resztę. No i funkcje, które są w tym kodzie dość mocno używają dynamicznej alokacji pamięci, tyle tylko że robią to z użyciem garbage collectora....
Temat rzeka. Przede wszystkim jaki język i jaki kompilator? Bo wiele z tych rzeczy kompilator potrafi robić automatycznie - np. inlinowanie funkcji, optymalizacja pętli itd. Nie ma sensu go w tym wyręczać. W takiej sytuacji należy się raczej zastanowić jak przekazać kompilatorowi wszystkie informacje o danej funkcji/bloku programu - np. w C atrybuty...
To raczej temat na inną rozmowę, nie odpowiada to zbytnio na pytanie autora. Autor zadał kilka pytań, na które postaram się odpowiedzieć i dodać trochę informacji od siebie. MS dostarcza Visual C++, to nie jest czysty C++ Każdy kompilator (preprocesor również) dostarcza swoje dodatkowe rozwiązania/ułatwienia. W visualu są to np funkcje z postfiksem...
Eeee... A po co, skoro i tak zapis do EEPROMu realizowany jest blokowo? A nawet jeśli by nie był, to wystarczy zrobić sobie funkcję, która ten zapis będzie realizowała właśnie w taki sposób? Tak czy siak nie rozwiązuje to problemu autora, ponieważ problem ten jest dosyć skomplikowany [; Ze swojej strony proponowałbym tablicę na takie napisy użytkownika...
Bawię sie STM32F103ZET + zewnętrzny RAM i nie bardzo potrafię wyczarować działającą konfigurację tak, aby stos był w pamięci wewnętrznej, natomiast sterta w pamięci zewnętrznej i jednocześnie uzyskać działającą funkcję malloc na tejże stercie w pamięci zewnętrznej. O ile pomijajac malloc cel osiągnąłem, jednak szkoda 512KB ramu bez dobrodziejstw płynących...
W logu nie widać żadnych problemów, ale może coś przegapiłem i może ktoś jeszcze po mnie przejrzy. Pamięci RAM nie brakuje. Procesor ani żaden pojedynczy rdzeń nie jest wykorzystany w 100%. Karta graficzna nie dobija do maksimum. Temperatury przyzwoite. Gra generuje ciut ponad 60 klatek na sekundę, monitor wyświetla 60 klatek na sekundę - zapewne ze...
Taaak, AVR o niczym innym nie marzy, niż o dynamicznej alokacji obiektów w swej potężnej pamięci. Może jeszcze metody wirtualne, żeby go do końca dorżnąć, co?
Witam, chce stworzyć programik do mnożenia macierzy. Wersja ze sztywno podanymi tabelami dziala. Jednak postanowilem dodać bajer, który będzie tworzył macierze o określonym rozmiarze i wczytywał je do programu. W sieci znalazłem kilka tematów o dynamicznej alokacji pamięci dla tablicy dwuwymiarowej. Napisałem coś takiego: #include <stdio.h> #include...
Poza stosem w SRAMie masz jeszcze przynajmniej: - stertę - dynamiczna alokacja (malloc, new) - sekcję data - wszelkie globalne i statyczne zmienne inicjowane jakąś wartością - sekcję bss - jw. ale zerowane przy starcie programu poza tym możesz sobie tworzyć własne sekcje, latać wskaźnikiem po pamięci i cokolwiek Ci przyjdzie do głowy. Alokowanie dużej...
Cieszy mnie że jest taki temat na forum ponieważ mam kolejne pytanie. 1. Wiemy że podczas pisania programów na architekturę ARM programista decycyduje za pomocą skryptu linkera gdzie w pamięci leżą sekcje programu generowane przez kompilator. Najczęściej wygląda to w ten sposób: https://obrazki.elektroda.pl/6661507400_... Źródło: https://obrazki.elektroda.pl/4576910100_...
http://obrazki.elektroda.net/14_12750474... 28 maja 1959 roku uznaje się za dzień, w którym powstał COBOL - jeden z pierwszych i najpopularniejszych języków programowania na świecie. COBOL to skrót od Common Business-Oriented Language, języka stworzonego głównie do programowania dla ekonomii i biznesu. Według raportu Gartner Group z 1997 roku, istniało...
Zrozum, że w C przekazywanie tabeli do funkcji ZAWSZE odbywa się przez referencję, nigdy przez wartość. Stąd w tym przypadku przekazanie do funkcji tabela lub &tabela jest dokładnie tym samym. Podobnie jak void *ptr=tabela to dokładnie to samo co void *ptr=&tabela, lub void *ptr=&tabela[0]; Jak nie wierzysz to spobi eto skompiluj i zerknij na skompilowany...
Po prostu przejdź na C++ i już. Nie ma żadnych wad, a 99% tego co możesz przeczytać w necie to durne przesądy leśnych dziadków. Kod o tej samej funkcjonalności w C czy w C++ będzie działał identycznie w obydwóch przypadkach. Tyle że ten w C++ będzie krótszy, prostszy (powiedzmy że to kwestia subiektywna) i zapewne bardziej odporny na błędy. Ja też się...
Alternatywnie możesz skorzystać z dynamicznej alokacji pamięci. Sprawdzi się szczególnie w przypadku dużych tablic. Deklarujesz najpierw typ type tZmienna = array [min...max] of jakis_inny_typ; następnie zmienną wskaźnikową rzutowaną na ten typ var zmienna = ^tZmienna; W inicjalizacji programu musisz przydzielić pamięć new (zmienna);...
Dynamiczna alokacja jest po to aby na sztywno nie rezerwować całego obszaru LCD tylko w zależności od potrzeb, jak ci się nie podoba rezerwacja dynamiczna powołaj tablice jako globalna i przekazuj funkcji. Ja nie narzekam na kod wszystko się fajnie analizuje. Dodano po 56 czyli jak dam +1 to też zadziała? Dodano po 15 A jeszcze jedna sprawa czy linia...
Witam! Ponieważ przeżywam ponowny okres fascynacji C++ postanowiłem ponownie wykonać kompilację bibliotek kompilatora z wyłączoną obsługą wyjątków. Szczególnie rozchodzi się oczywiście o libstdc++ i libsupc++. http://www.freddiechopin.info/ - Download > ARM > Różne > gcc-arm-none-eabi-4_6-2012q2 libstdc++ no exceptions Niektórzy może pamiętają, a może...
Witam, Poważne urządzenia jednak działają już na PC z odpowiednimi rozszerzeniami kontaktującymi się z PLC. Linux Realtime albo VxWorks to podstawa dla takich w sumie to już maszyn. Zwykłe PLC to się nie nadaje do niczego bardziej skomplikowanego. Sterowniki RX3i, RX7i, Roboty KUKA działają pod systemem VxWorks. Wyżej wymienione sterowniki do komunikacji...
Profilaktycznie zwiększyłem rozmiary stosów do 4096B i zapomniałem sprawdzić ponownie zużycie RAMu. Jeśli nie używasz przerwań (a pewnie na razie nie używasz), to na prawdę rozmiar innych stosów niż user_system może być równy zero. Jeśli zaś używasz, to 4kB na stos przerwań również jest przesadą - przecież to zwykle jedna, krótka funkcja. Może w porywach...
Jawne określenie rozmiaru stosu (stosów) zajmuje jakieś 3 sekundy, a dzięki temu zyskujesz świadomość jego rozmiaru i tego że kiedyś może się skończyć. Rozwiązanie typu "stos na końcu zajmuje sobie tyle miejsca ile jest" to taka wycieczka w ciemnościach. Przecież program skompiluje się bezproblemowo nawet jeśli nie będzie ani pół wolnego bajtu na stos...
Właśnie taką pisze, biblioteka napisana w C a oparta na pomyśle GTK+ (obiekty), obsługa touchscreen, widgety Androidowe. Biblioteka w stadium alpha, ale ładnie już działa, wymagania: - C - dobra znajomość: potrzebna aby połączyć bibliotekę z własnym LCD + własne prymitywy rysowania (info niżej) - fopen - doświadczenie w GTK+ może pomóc w chaosie zasad...
Ona już jest zmienną globalną i chyba nie ma sensu kombinować z tym. Ale oczywiście wszystko zależy od ciebie i tego co chcesz osiągnąć. A problem alokacji pamięci można rozwiązać prosto, jeśli nie chcesz używać alokacji dynamicznej - wystarczy do funkcji przekazać wskaźnik na wcześniej zaalokowaną pamięć, chociażby wskaźnik na zmienną lokalną, ale...
Pierwsze lubię, a drugie jako temat do zastanowienia. funkcja typu low_level_init() to prosta sprawa, ale identyczny startup dla tych dwóch rdzeni to raczej sztuka dla sztuki (coś jak startup w C <: ) - praktycznie byłyby to dwa bloki z #if ... #elif ... #endif, bo te startupy są naprawdę różne... Zostaw jeśli koncepcja Ci pasuje. Ja w startupie...
No z tą teza w przypadku uK to bym polemizował. Dynamiczna alokacja jest dość karkolomnym, trudnym i niebezpiecznym narzędziem w przypadku uK. Bycie inżynierem zakłada myślenie. Jeśli mam szybką pamięć w MCU i wolniejszą dodatkową, a tak jest zazwyczaj w AVR, to nie ma sensu wszystkiego przekładać do tej wolniejszej. A już z pewnością nie ma sensu...
1. Czy ten syscall.c jest w ogóle teraz potrzebny nic z nim na razie nie robiłem. Teraz nie, ale przy używaniu pewnych funkcji (czasem jedynie "pośrednio" tzn. nawet nie wiesz kiedy zaczynają być potrzebne) linker zacznie się burzyć o brak funkcji typu _write_r, _sbrk_r, _exit, _isatty_r (ogólnie funkcji zdefiniowanych w tym pliku) - to znak że zaczynają...
Wyłącz antywirusa i sprawdź czy tak samo laguje. Jeżeli program uruchamiasz pod Windowsem, to miej na uwadze że Windows pedantycznie troszczy się o ilość wolnej pamięci, alokując ją na dysku, zamiast w ram'ie, choć wolnego ramu jest jeszcze od groma. Jeżeli masz conajmniej 1GB ramu (dobra granica dla XP), to wyłączenie "pliku wymiany" na wszystkich...
Cze, Od jakiegoś czasu rozwijam swoją konstrukcję sterownika do stacji pogodowej. Projekt robi się coraz większy i większy i w końcu dotarłem do etapu, w ktorym rozważam użycie jakiegoś RTOSa. Mam dużą bibliotekę własnego kodu obejmującą takie rzeczy jak kompleksowa obsługa komunikacji po USART czy I2C, mam pełną obsługę konsoli tekstowej. Do tego używam...
Wówczas takie programowanie przestaje się znacząco różnić od zwykłego C. Tia... a tworzenie zmiennych, zmienianie ich rozmiarów i dynamiczna alokacja pamięci są nawet prostsze (; ... Wydaje mi się, że znajdujemy się w pewnym ważnym historycznie punkcie. Cortex-M3 - procesor o kosmicznej wydajności 1.25DMIPS/MHz w stosunku do swojej śmiesznej ceny (najtańszy...
Stos dla programu głównego jest w Twojej konfiguracji całą resztą pamięci. Używasz dynamicznej alokacji? No a poza tym to zwiększyłeś go ledwo dwukrotnie - masz przecież 128kB pamięci - możesz na ten cel spokojnie wywalić kilka kilobajtów, a nie nędzne 256B - zwłaszcza gdy szukasz błędów. Ta zmienna do której zapisujesz ciąg znaków jest automatyczna...
witam, MAm przygotować aplikację z danej tematyki: 1.Podstawowe elementy języka – zmienne i ich typy, operatory, instrukcje sterujące, pętle, funkcje, tablice. 2.Tworzenie typów złożonych –struktury, unie, tablice struktur, wyliczenia. 3.Przetwarzanie strumieniowe – operacje na plikach tekstowych 4.Przetwarzanie strumieniowe –...
A z jakim błędem? Spróbuj może ładować plik na samym końcu. Choć zasadniczo to tu błędów nie widać :| A nie masz w innym miejscu jakiś metod pracujących dynamicznie na obiektach? (zwlanianie pamięci, alokacja pamięci, tworzenie nowych obiektów, usuwanie istniejących) Aha - nie nadpisujesz przypadkiem jaiegoś obiektu w tej tablicy, którego byś nie zwolnił?
Ja się zgodzę z kolegą Tymonem, że warto zaczynać naukę C na PC. Rozpoczynanie jej na mikrokontrolerze jest drogą przez mękę, w dodatku uczymy się od początku źle. A to dlatego, że zapominamy o różnych poziomach abstrakcji o których piszesz (ba, w ogóle się nie dowiemy, że coś takiego jak HAL może istnieć), a zaczynamy wykorzystywać C jak nakładkę na...
;***************************************... ; otwarcie pliku ;***************************************... mov ah, 3dh ; usluga otwierania pliku mov al, 2 ; otwieram do odczytu i zapisu mov cx, 1 mov dx, offset File name ; DS:DX offset do nazwy pliku int 21h jc blad mov hFile, ax ; zachowaj uchwyt pliku ;***************************************...
Witam, jesli jej nie usuniesz, program zostawi po sobie śmieci w pamięci. W dodatku gdy częściej będziesz używał takich instrukcji i nie będziesz usuwał zaalokowanej pamięci, wycieknie ona. Jest wiele programów do badania wycieków pamięci i jeśli używasz dynamicznej alokacji, zawsze warto takiego użyć. Pozdrawiam, Krzysztof.
stm32 dynamiczna alokacja pamięci dynamiczna alokacja alokacja dynamiczna
silnik briggs zawora schemat silnik delphi monitoring synology
berges falownik peugeot expert
Toyota Starlet EP91 zawór wolnych obrotów – czy numer OEM musi być identyczny? Mercedes W210 220 CDI 2001 – gdzie kupić wiązkę elektryczną 2104403806?