To wskaźniki mają rozmiar jednego bajtu! Łał! 4\/3!!
Dlaczego upierasz się , by wepchać wskaźniki do pamięci programu :?: Mówisz kompilatorowi - umieść wskaźnik do pamięci programu , w pamięci programu ... const prog_char* info[] PROGMEM = ... ... , a powinieneś powiedzieć - umieść wskaźnik do pamięci programu , w pamięci data(RAM) const char* info[] = { PM_UST_ZEG, PM_UST_CZAS, PM_UST_DATE};...
Ja w podobnym projekcie zadeklarowałem sobie tablice wskaźników w pamięci programu. Dla zmniejszenia rozmiaru pamięci wskaźniki były typu void. I podczas odczytu zmiennych : np funkcjią 0x03 pisze sobie pętle która ma być wywoływana od adresu początku przesłanego w ramce(offset) do adresu końcowego obliczonego przez dodanie ofsetu i segmentu - oto część...
Widać nie rozumiesz o co chodzi. Ani ja ani Dr.Vee nie mówimy o przeniesieniu komunikatów do ramu, tylko tablicy wskaźników na komunikaty. Najpierw musisz pobrać wskaźnik z tablicy (ponieważ napisów jest więcej), potem dopiero wykorzystując wskaźnik odczytujesz ciąg z pamięci programu. Jeśli nie chcesz przenosić tablicy wskaźników, to niestety musisz...
Witam, Przedstawiam poniżej program (kompilator AVRGCC+AVRStudio5), który przygotowałem jako testowy, jest to fragment większego projektu. Jego zadanie polega na odczycie kilku parametrów z pamięci EEPROM, sprawdzenie czy jest w określonym zakresie, jeśli nie jest to wprowadza wartość domyślną i zapisuje z powrotem do pamięci EEPROM. Program działa...
Podsunąłeś mi pewien pomysł... zrzutowałem sobie wskaźnik na tekst w pamięci programu na typ void* Kompilator rozpoznaje typ void* i odróźnia go. Później znowu sobie go rzutuje na const char*. o t6akiej opcji tez myslalem :)... ale stwierdzilem, ze przesada... i, ze w razie innych funkcji podobnych, trzebaby ciagle o tym pamietac :)... ale skoro dziala...
A w jaki sposób zmienić lang_polish? Nazwa tablicy jest stałym wskaźnikiem do pierwszego jej elementu (o ile pamiętam z książek i studiów). Nie da się w programie zrobić tak, żeby tablica zawierała elementy znajdujące się pod innym adresem. Żeby uprościć: Sama nazwa tak, ale tu chodzi o to, co trzymasz w tej tablicy, a tam w niej musisz trzymać coś...
Ale PSTR to w istocie wskaźnik do c-stringa w pamięci programu a nie żadna deklaracja zmiennej. Zobacz sobie tutaj: http://www.avrfreaks.net/index.php?name=... Poza tym, Twój zapis "keyPad((const char*)"Jakis tekst"), zmiennaTypuString);" utworzy "Jakis tekst" w RAMie rezerwując dla niego pamięć a funkcja oczekuje wskaźnika...
Witaj. Deklaracja char *wsk ="napis"; powoduje, że "napis" idzie do pamięci programu, a w pamięci danych jest jedynie sam wskaznik. "Napis" można jedynie czytać, natomiast próba pisania po nim skończy się czymś na kształt "access violation". Trzeba to upchać w tablicę.
próbowałem więc tak: char *wsk_str; a potem w kodzie zrobiłem sobie: wsk_str = "jakis napis" i jeśli tylko taka jedna linijka jest to jakoś to działa ale jeśli dalej gdzieś zrobię wsk_str = "inny tekst" to już jakieś cyrki mi się dzieją, eeeeh coś nie mogę zaskoczyć z tym Generalnie dobrze kombinujesz ;), tak jak najbardziej można...
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.
Odczytanie z pamięci programu nie jest tak proste jak z pamięci RAM. W GCC do odczytywania tej pamięci stworzono specjalną funkcję pgm_read_byte, która jest (tak myślę) najbezpieczniejsza do operacji na pamięci programu. Teoretycznie wykorzystując wskaźnik do pamięci programu i traktując go jako tablicę (jak to zrobiłeś) powinno działać, ale widocznie...
Aby działało to dobrze to na samym początku programu trzeba ustawić wskaźnik stosu (o ile pamiętam SPH i SPL) np. na adres końca pamięci RAM. Procesor nie robi tego automatycznie i potem np. przy wywołaniach podprogramów program się krzaczy.
skoro *FlashLoc jest wskaźnikiem do napisu w pamięci programu to deklaracje tego wskaźnika powinna wyglądać: prog_char* FlashLoc Zamiast pgm_read_byte(&FlashLoc[i]) użyj: pgm_read_byte(FlashLoc+i) Pokaż jak wywolujesz tą funkcję.
Tablica data to bufor (z komendą), jeżeli jej drugi bajt oznacza komendę USBASP_FUNC_SETLONGADDRESS, to następne cztery bajty (od data[2]) zawierają adres wpisywany do prog_address. Tak wynika z tego programu. Rzutowanie na wskaźnik na unsigned long jest po to, aby ta pierwsza gwiazdka "wyciągnęła" z pamięci unsigned long. Inaczej, takie użycie to bezpośrednia...
No to chyba błąd w tym, że wezel_pomoc to tylko wskaźnik, któremu nigdzie nie przypisałeś pamięci (malloc) a odwołujesz się do jego skłądowych. W tym miejscu program się wywala.
Witam, Piszę program i napotkałem na następujący problem: Warning133initialization from incompatible pointer type [enabled by default]... Warning134unused variable 'Wskaznik' [-Wunused-variable]... Próbowałem już wszystkiego stąd prośba do Was o pomoc. Dziękuję i pozdrawiam. Dodano po 1 Witam, Udało mi się chyba rozwiązać problem - może...
Deklaracja jest jak najbardziej poprawna, można jednak dodać deklarację const: const char *titles[] = {... O sekcjach można pisać doktoraty, ich ilość i zawartość może się różnić w zależności od kompilatora i środowiska uruchomieniowego. Napisy prawie zawsze są umieszczane w sekcji kodu lub stałych. Tablica powinna być w tej samej sekcji,...
Niestety avr-gcc zawarte w najnowszej wersji winavr jeszcze nie posiada wsparcia dla 2560. Cały problem polega na tym, że przekroczono magiczną granicę 64k słów programu i każde wywołanie funkcji odkłada 3, a nie 2 bajty na stosie (posypie się obliczanie pozycji argumentów przekazywanych przez stos). Podobny problem dotyczy wskaźników do funkcji i danych...
To dotyczy raczej bibliotek C18 niż samych mikrokontrolerów. putsUSART: Write a string from data memory to the USART. putrsUSART Write a string from program memory to the USART. Jeżeli funkcja której parametrem jest wskaźnik do pamięci RAM otrzyma wskaźnik odwołujący się do pamięci programu lub odwrotnie, to odczyta "śmieci". Przy wielu innych funkcjach...
Witam, a więc wyobraź sobie że pamięć to ulica z domkami. Zmienna to domek, a wskaźnik to jej adres (numer domu), to taki mój prosty, nieco kretyński opis :) Każda instancja programu ma swoje ulice (swój obszar pamięci) i adresy zmiennych będą różne (to znaczy fizycznie będą gdzie indziej w pamięci). Wartość wskaźnika to "przesunięcie" czyli adres liczony...
Więc jedyny sposób jaki istnieje aby mieć pewność czy nie braknie RAM-u to długie testowanie na uC lub przejście na zmienne globalne/statyczne. Troszkę to czarna wizja Najlepiej, w przypadku AVR i GCC, wypełnij cały ram jakimś wzorem w init1 albo łatwiej init3. W pętli głównej, co jakiś czas, testuj w jakim obszarze masz wzór. Będziesz wiedział, z...
Pamięć jest zorganizowana w komórki 16-bitowe, objawia się to np tym że wskaźnik programu wskazuje na słowo (2 bajty) a nie na bajt. Wszystkie instrukcje muszą być więc wyrównane do granicy dwóch bajtów. Jakkolwiek z poziomu samego programu pamięć flash jest zorganizowana bajtami, więc spokojnie można w niej umieszczać tablice bajtów bez utraty pamięci....
A czy atrybut nie wskazuje na to iż dana zmienna ma zostać utworzona w pamięci programu. Zmienna nie może być utworzona w pamięci programu. U Ciebie wskaźnik MUSI być w RAM bo jest modyfikowany. Atrybut Twojego wskaźnika służy do określenia na jaką pamięć on wskazuje i kompilator wtedy wie że adres na jaki wskazuje wskaźnik to adres stałej (danej)...
Witam Kolegów, Często zdarza się, np. pisząc funkcje do obsługi LCD, iż tworzymy 2 wersje stosownych funkcji, np. do wyświetlania napisów, jedną której argumentem wywołania jest wskaźnik do zmiennej w pamięci RAM i drugą (zwykle z postfiksem _P), dla której argumentem wywołania jest wskaźnik do zmiennej w pamięci programu (Flash). Zastanawiam się czy...
Błędnie zakładasz, że coś z tym wspólnego ma gcc, podczas kiedy odpowiedzi powinieneś szukać w standardzie języka C. Literały są stałymi i jako takie nie mogą być modyfikowane. To, że udało ci się literał zmodyfikować niecnymi sztuczkami to kwestia konkretnej implementacji, podobnie pośrednio za pomocą wskaźników możesz zmodyfikować stałe const - tyle,...
To może podam cały temat co mam zrobić : "Aplikacja tworzy dynamicznie wskaźniki do obiektów oraz umożliwia ich zapis i odczyt z plików" no to trochę zmodyfikowałeś sobie temat przed podaniem na forum, szczerze mówiąc ;p w c++ są 2 sposoby definiowania obiektów. tj. statyczne i dynamiczne. czym się różnią? statyczne zdefiniowanie wartości to wprowadzenie...
Witam, programuje układy uk PIC i mam takie pytanie - w zasadzie problem: czy warto stosować wskaźniki np. w funkcjach odczytu zewnętrznej pamięci EEPROM? Kolega robił eksperyment i procedura z użyciem wskaźników zajmowała więcej pamięci w uK, zarówno w pamięci flash jak i operacyjnej. Napisał dwa tak samo działające programiki - zapis kolejnych komórek...
Witam wszystkich. Chciałbym napisac bootloader dla uC PIC24J128GP506, w związku z tym mam parę pytań. http://obrazki.elektroda.net/3_128713068... Stworzyłem sekcje bootloadera w skrypcie linkera. Czy możliwe jest przechowywanie zmiennej w pamięci programu ( wersja Firmware) ? Czy muszę stworzyć osobną sekcję, w której będę przechowywał tą zmienną...
...Jednak pojawił sie problem - funkcja: pgm_read_byte(*Cyfry); zwraca adres początku pamięci programu... Nie myl wskaźnika z adresem.Funkcja pgm_read_byte(address) , wymaga adresu jako argumentu , a nie wskaźnika na adres. poprawnie działa funkcja: pgm_read_byte(Cyfry); w takim razie pod stałą "Cyfry" jest przechowywany wskaźnik? Etykieta/zmienna...
Mam problem z programem. Napisałam go przy użyciu dużej ilości wskaźników do struktury jako argumentów funkcji. Wszystko działa pięknie. Podczas pisania programu stwierdziłam że czemu by nie napisać tego podając do funkcji strukture a nie wskaźnik do niej. Zaczynając zmieniać wszystko, program przestał działać. Jeśli przekazujesz cała strukturę do...
użyj strcpy, który właśnie kopiuje w pętli, albo może lepiej w strukturze niech będzie wskaźnik na dane w pamięci programu ( PGM_P równoważne const char*) i przypisywać mu tylko adres ciągu znakowego PSTR("T_zew ").
Pewność co do przydzielenia za pomocą new określonego kawałka pamięci wydaje się nader optymistyczna. Chcesz przydzielić pamięć w funkcji i zwrócić wskaźnik do programu głownego czy też wykonać funkcją operacje na już przydzielonym obszarze pamięci za pomocą przekazanego wskaźnika do danych? Może jedno i drugie?
Widzę, że dobrze rozumujesz, że nazwa tablicy jest wskaźnikiem do jej pierwszego elementu o numerze 0. Jednakże wkrada Ci się błąd w miejscu przypisania drzewo[1].wezel=kopiec; A to dlatego, że nazwa tablicy jest wskaźnikiem stałym i nie zmienisz adreu na który pokazuje. Jeżeli zmienisz definicję węzła na: pole *wezel; to potem możesz go sobie...
To: jpeg_mem_dest(&cinfo); // store jpeg image in memory ustawia wyjcie danych do pamięci RAM zdaje się. A gdzie jakiś wskaźnik? Czyżby tu: cinfo->dest = (struct jpeg_destination_mgr *) ? jpeg_mem_dest() jest wywoływana przez funkcję compress_jpeg(). Więc w niej należało by szukać tego wskaźnika. Z nagłówka funkcji widać że do funkcji...
push/pop stosuje się, żeby zachować wartość początkową rejestrów, jeśli w innym miejscu programu są wykorzystywane. ldz - nie ma takiego menmonika w asemblerze AVR. Zapewne to jakieś makro. brcc - wykonuje skok jeśli wskaźnik carry (przeniesienia) jest wyzerowany, co ten wskaźnik oznacza to sobie doszukasz. lpm r16, z - ładuje do rejestru r16 wartość...
Czy to znaczy, że zmienne statyczne czyli zadeklarowane ze słowem static i zmienne globalne znajdują się w pamięci FLASH i są później kopiowane do RAM? Dotyczy to tylko zmiennych globalnych (statycznych w scope funkcji), które są zainicjalizowane. Zmienne globalne niezanicjalizowane są umieszczane w sekcji .bss i inicjalizowane wartością 0. Gdybym...
Chodzi o linijki: ldi ZH, high(znaki << 1) ldi ZL, low(znaki << 1) etykieta znaki przechowuje adres początku tablicy w pamięci Flash, ale ta pamięć ma organizację słów 16-bitowych! Natomiast instrukcja LPM ładuje do rejestru wartość wskazaną przez Z, ale najmłodszy bit tego wskaźnika określa którą część 16-bitowego słowa...
Jaki system? DOS? Windows 3.11? Na żadnych wyższych Windowsach niestety nie da się odczytywać pamięci innych procesów w sposób jaki próbujesz. Wynika to z faktu, że każdy program pod tym samym adresem może mieć zapisane inne dane. Środowisko takie tworzy system operacyjny podczas procesu uruchamiania programu, a powodem, dla którego się tak robi jest...
http://obrazki.elektroda.net/97_12728985... Witam. Przedstawiam projekt Tunera FM z dekoderem RDS. Konstrukcja powstała jako potrzeba zastąpienia wysłużonego sprzętu Diory. Tuner jest pierwszym elementem zestawu jaki zamierzam wykonać, następnym elementem będzie wzmacniacz. Z uwagi na brak czasu projekt powstawał przez około 1,5 roku. Dekoder...
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...
chodzi o przekopiowanie programu z pamięci tak?
Czyli mam rozumieć że taki, a nie inny charakter programu wynika ze "struktury systemu mikroprocesorowego"; mam na myśli fakt wykorzystania rejestrów w zewnętrznej przestrzeni adresowej (zewnętrznej pamięci)? Tak masz to rozumieć. Stąd też deklarowane stałe: F_CSDS EQU 0FF30H ;bufor wyboru wskaźnika F_CSDB EQU 0FF38H ;bufor danych wskaźnika są umieszczone...
"Poczytaj o" a nie "zamień na"! "movw" wcale nie wczytuje elementu z pamięci programu. Stwierdzenie "wymiana wskaźników" jest chyba wystarczająco klarowne. Przechowujesz wskaźniki w rejestrach innych niż zh:zl, przed odczytem przenosisz odpowiedni wskaźnik do Z a po załadowaniu przenosisz go z powrotem. Jest jeszcze kilka innych sposobów, które opiszę...
Źle wyczytałeś - automatyczne usuwanie przy wyjściu z funkcji są jedynie obiekty allokowane automatycznie czyli np. zmienne lokalne funkcji. To będzie automatycznie utworzone i usunięte: [syntax=cpp]void x() { obiekt a; } [/syntax] A tutaj automatycznie będzie utworzony tylko wskaźnik, po wyjściu z funkcji masz wyciek pamięci bo utworzony obiekt jest...
Nie ma ograniczonej liczby cykli odczytu - spokojnie można odczytywać kiedy są potrzebne. Powoduje to jednak pewne niedogodności: wydłużony czas dostępu oraz wartość w osobnej przestrzeni adresowej. To, czy dane wczytać do pamięci czy nie - zależy od ilości danych i częstotliwości odczytu - małą porcję można zostawić w eeprom w celu zaoszczędzenia paru...
nie tak dużo ok 1300b SRAM-u jak dobrze odczytuje.. Ty wykorzystujesz 1300 a biblioteka może też troche potrzebować. Jakim adresem jest inicjowany wskaźnik stosu?
Zapomnij przez chwilę o referencjach i odnieś się proszę do tego co napisałem wyżej - zmodyfikowałem swój post zanim napisałeś Twoją wypowiedź. Wciąż wydaje mi się, że coś jest nie tak w założeniach i referencja nic tutaj nie pomoże. Jeśli skupimy się na szczegółach to owszem, ale zasada działania jest bardzo podobna, stąd skrót myślowy. Niestety wciąż...
Nie jestem przekonany co do tego, że użycie tablicy z maskami poszczególnych bitów zoptymalizuje dostęp: w moich wstawkach liczenie maski to dokładnie 7 cykli na dwóch rejestrach(załadowanie 1, jeśli bit1 ustawiony to załadowanie 4, jeśli bit0 ustawiony to przesunąć w lewo o 1, jeśli bit2 ustawiony to zamienić połówki), rozwiązanie z ładowaniem maski...
Złe operacje na img. Przekazujesz zmienną z pamięci programy poprzez wartość, przekaż poprzez wskaźnik.
1. Kiedy wykonuje się konstruktor klasy? (w stosunku do programowania wartości we flash) Albert Na etapie kompilacji. 2. Co właściwie chcesz osiągnąć, bo chyba idziesz w zupełnie złym kierunku. Albert W klasie posiadam strukturę z której dane w przerwaniu są wysyłane do LCD. Chciałem dodać sobie osobny wskaźnik (stały niezmienialny ) na ten bufor żeby...
Po pierwsze to trzymaj się odpowiedniego szkieletu programu. Przykład poniżej. Musisz ustawić m.in. wskaźnik stosu. .INCLUDE "m16def.inc" ;plik nagłówkowy stosowanego procesora ;deklaracje .DEF, .EQU itp. .DSEG .ORG 0x0060 ;początek pamięci SRAM procesora .CSEG .ORG 0x0000 ;wektor zerowania - inicjalizacja µC. rjmp reset reset: ldi...
Nie do końca. To co zaproponowałeś to wyrzucenie PROGMEM, co spowoduje, że wskaźnik nie będzie we FLASH, ma być: const PROGMEM char *text; Nie bardzo rozumiem. Czy jeśli użyję PROGMEM przy deklarowaniu stałej (tak jak to zrobiłem): menuitem1 włącznie ze wskaźnikiem na text1 nie znajdzie się w pamięci programu? A sam wskaźnik jest chyba prawidłowo:...
W nawiązaniu do porad kolegi tmf proponowałbym coś w tym stylu (być może strach przed kwalifikatorem __flash wynika z braku przykładów kodu :?: : [syntax=c] // przykład jak używać kwalifikatora __flash do umieszczania // danych w pamięci programu i jak się do nich odwoływać // kod gotowy do odpalenia w symulatorze Atmel Studio 6 // można zaobserwować...
Chodzi o to że zmienna temp czyli tak naprawde wskaźnik do tablicy charów będzie żyła tylko w tej funkcji. To mi nie przeszkadza bo jak już przypisze jej wartość(wskaźnik) do mojej zmiennej wskaźnikowej to mam już globalnie adres do pierwszego elementu tablicy ze znakami. Nie wiem tylko jak długo ta tablica będzie zarezerwowana w pamięci. jeżeli wywolujesz...
A ja mam pytanie z innej beczki. Po co alokować pamięć dla znaków dynamicznie, jeśli znaki są w nią wpisywane statycznie. Przecież przy kompilacji te napisy są stałe i i tak zostaną wrzucone w kod programu - efekt jest taki, że będą podwójnie zajmowac pamięć, Raz programu, drugi raz pamięć roboczą. Nie prościej zdeklarowac je jako zmienne pamięci programu...
W trybie IDLE oraz POWER SAVE można użyć Timera2. W IDLE Timer2 może być taktowany synchronicznie jak i asynchronicznie. Tryb POWER SAVE takiej możliwości nie daje bo clkI/O jest zatrzymany. Zatem w tym trybie licznik może być taktowany wyłącznie asynchronicznie. Dodatkowo występują tu pewne niuanse opisane w datasheet ATMega8L na str. 34-35. Możesz...
$include (REG51.inc); dołączenie definicji rejestrów uK (kompilator RA-51 Raisonance) NAMEOBSLUGA_AT24C64 ;Poniżej definicje stałych użytych w programie FIXEDADDR EQU0A0H;stała częśc adresu pamięci 24C64 USRADDR EQU0;ustawiana przez użytkownika część adresu (wartości 0..7) MEMSIZE EQU2000H;liczba bajtów dla 24C64 PMEMSIZE EQU32;liczba bajtów na stronę...
Czyli np. literał złożony też jest przechowywany w pamięci statycznej, no bo jest stałą: [syntax=c] char **wskin; wskin = (char*[]) {"slowo1","slowo2"}; [/syntax] slowo1 i slowo2 jest w pamięci statycznej a tablica wskaźników jest tworzona w momencie napotkania zapisu (char*[]) {"slowo1","slowo2"} w kodzie programu i po jej stworzeniu jest inicjalizowana...
Uzasadnienie? Proszę bardzo. 1. 32-bitowe oprogramowanie nie ma prawa działać szybciej tylko dlatego, że system jest 64-bitowy, bo to te same binaria. Muszą być przekompilowane, by czerpać korzyści z "szerszych" rejestrów i "szerszych" operacji w ALU. Co więcej, tylko programy które standardowo liczą na liczbach większych niż 32-bitowe uzyskają jakikolwiek...
(at)idepopizze Chyba tak zrobię... Problem z tym, że jak dojdą jeszcze z 2 języki to kodu będzie od groma! Jak nic nie wymyślę to najwyżej w międzyczasie pomyślę nad implementacją menu pomysłu tadzika. po prostu szukałem pomysłu na zapis stałej... nawet jeżeli miałoby się to wiązać z resetem programu czyli: - wybierz język (0-3) - zapisz stałą do flash:...
Nie prowadzi do żadnego zapętlenia, a jedynie do błędu adresacji. I w pierwszym i w drugim przypadku przypisanie wartości pod adres, który w żaden sposób nie został przydzielony lub wskazany - jest błędne i może (ale nie musi) doprowadzać do wyjątku błędu dostępu do pamięci. Może równie dobrze dokonać nadpisania części programu lub jego danych. Dużo...
Żadnych floatów, same operacje na typach uint8_t oraz C-stringach. Dużo danych w pamięci programu...r Wystarczą operacje na wskaźnikach a już okazuje się, że w asemblerze jest mnożenie. Jak już wspomniał (at)trol.six trzeba porównać listingi asemblerowe.
Przyjrzałem się funkcji "strtok2()" i wniosek mam taki, że nie nadaje się ona do Twojego programu. W funkcji "odczyt_IMEI" potrzebujesz odebrać IMEI, które jest zawarte przed napisem "OK". Możesz to zrealizować w taki sposób (przenieś do siebie tylko funkcję "odczyt_IMEI"): [syntax=c]#include <iostream> #include <string.h> using namespace...
Hmm chciałem trzymać sobie pewne łańcuchy znakowe w pamięci programu. Po RTFM wiem, że można tak: __farflash unsigned char komunikat Jest to alternatywa dla: unsigned char komunikat Jezeli chciałbym umiescic w pamieci programu wiecej komunikatow, musiałbym zrobic tak: __farflash unsigned char komunikat Nie jest to zbyt efektywne, wiec chciałbym umiescic...
A czego się spodziewasz po tym: [syntax=cpp]scanf("%lf", &arg1->x);[/syntax] ? scanf pisze po nie przydzielonej pamięci.
Najprostsze rozwiązanie. Tworzysz w pamięci programu tablicę funkcji sinus (na 8 bitach). Tworzysz trzy wskażniki do danych w tablicy, przesunięte o 1/3 rozmiaru tablicy. Ze zmienną częstotliwością (zmienianą np. przerwaniem od timera) odczytujesz wartości z tablicy i wystawiasz na trzy porty. Zwiększasz wskaźniki. I to chyba cały algorytm
Mój program służy do tworzenia macierzy i następnie robieniu na nich różnych operacji matematycznych. Na razie tylko dodaje do siebie macierze. W końcu przypomniałem sobie że muszę uwolnić pamięć na końcu programu... Lecz tu nie mam wskaźnika tylko pierw mam tablice wskaźników... więc usuwam wszystko wg schematu: http://obrazki.elektroda.pl/5125667900_1...
(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...
A czy taka ilość błędów sprzętowych to normalne? To jest sytuacja, kiedy program oczekuje jakichś danych pod danym adresem pamięci, a ich tam nie ma (bo np. system zwolnił akurat ten obszar pamięci dla innego programu), więc system musi je wczytać z dysku (z pliku, z którego oryginalnie dane miały pochodzić lub z pliku stronicowania). Wskaźnik ten...
Dr.Vee : Zależy, czy adresy liczysz w bajtach, czy słowach. Wskaźniki instrukcji odwołują się do słów pamięci flash (icall, ijmp we wskaźniku muszą mieć adres liczony w słowach). pgm_read_word i inne temu podobne wychodzące z LPM wykorzystują adres przesunięty w lewo o jeden bit, najniższy bit służy do wyboru bajtu w słowie pamięci programu. Traktowanie...
Witam, Mam funkcję, która odczytuje tablicę zadeklarowaną jako: const PROGMEM unsigned char ikonka[32] = {0xFF, 0x03, 0x05, 0x09, 0xF1, 0x11, 0x11, 0x91, 0x91, 0x11, 0x11, 0xF1, 0x09, 0x05, 0x03, 0xFF, 0xFF, 0xC0, 0xA0, 0x90, 0x8F, 0x88, 0x88, 0x89, 0x89, 0x88, 0x88, 0x8F, 0x90, 0xA0, 0xC0, 0xFF}; i zapisuje ją do wyświetlacza. void...
Niestety tak nie jest, gdyż gromadzisz potem te wskaźniki w kolejnej tablicy... Więck każdy jest użyty. Ale wskaźnik to przecież adres w pamięci i kompilator wie czy w programie się do niego odwołuje czy nie, to po co najpierw ładuje wszystkie zmienne/stałe do pamięci i nie sprawdza czy w ogóle są wykorzystane w programie. Przecież jeżeli wykomentuję...
Rany, co za piękna i kwiecista polszczyzna techniczna ;) :D - resorsy pamięci (to chyba zasoby pamięci ;) - hardwarowe implementacje (chyba chodzi o implementacje sprzętowe ;) - pointer staku :D (chyba wskaźnik stosu) - hardwareowo (chyba sprzętowo) - softwareowo (chyba programowo) (czyt. "tasku") czytaj zadania ;) - czas egzekucji (toż to jakieś katowskie...
Cześć Co do tego co napisałem wcześniej( będą strony z data sheet do Twojego procka): Jak program odwoła się do obszaru pamięci UNDEFINED(ABORT)str.18,19 to generowany jest wyjątek "data abort", procesor wchodzi w tryb "ABORT MODE" i skacze pod adres 0x00000010 a adres powrotny zostaje zapisyna w rejestrze R14_ABORT,str41. Adres niezdefiniowanej pamięci...
Oczywiście że bufor jest zawsze kończony nullem. Tak jak koledzy pisali wcześniej, gdzieś coś mi bruździ po pamięci. Właśnie przeszukuję program i wszystkie zmienne, no i wskaźniki.
Witam wszystkich! Jak stworzyć dynamicznie obiekt reprezentowany przez wskaźnik na tenże obiekt? Sedno problemu polega na tym, że mam klasę. Zdefiniowany wskaźnik na obiekt tej klasy zainicjowany wartością NULL. W trakcie życia programu chcę w pewnym momencie powołać do życia obiekt, wykorzystać, po czym zniszczyć. Nie chcę marnować pamięci (a na razie...
1. Deinicjalizujesz RCC, PLL i pozostałe zegary 2. Resetujesz i wyłączasz Systick 3. Wyłączasz przerwania wcześniej zerując flagi 4. Ustawiasz wskaźnik stosu na początek pamięci bootloadera 4. Skaczesz do adresu pamięci bootloadera +4 Wszystko jest analogiczne do poniższego przykładu dla F4: https://stm32f4-discovery.net/2017/04/tu...
W AVR8 była funkcja "memcpy_pf" a tutaj nie wiem. Można użyć DMA, ale nie opanowałem rego jeszcze. A tutaj jest tylko memcpy i to Ci wystarczy. Może jest szybciej, tylko czy ty tymi danymi chcesz pluć dziesiatkami MHz? Raczej wątpię. Tyle, że takie ciągłe odwoływanie się przez kilku mastrów AHB do flasha może mieć wpływ na wydajność kontrolera Flasha,...
Witam, od 2 dni próbowałem zmusić do działania jedną napisanych przez siebie funkcji - odczyt danych z pliku tekstowego na nośniku SD/MMC sformatowanym w FAT32. Funkcja ma za zadania przypisanie do zmiennych wartości z pliku tekstowego. Do obsługi FAT32 wykorzystałem bibliotekę http://obrazki.elektroda.net/82_12517521... Tutaj status po kompilacji,...
Poprzedni mój przykład działa poprawnie pod warunkiem że cały jego tekst zawarty jest w jednym pliku głównym. Jeśli wywołanie funkcji piszącej do lcd nastąpi w innym pliku, to argument funkcji będący zarazem wskaźnikiem do tekstu flash nie zostanie rozpoznany. Obszedłem to poprzez zdefiniowanie tekstów flash i makr w jednym pliku "flash.h" (nazwa dowolna...
musisz zadeklarować wskaźnik do tablicy elementów typu "wskaźnik do elementów typu struct dane" w nastepujący sposób: Po co ? Przecież on potrzebuje zwykłą tablicę, czyli jeden wskaźnik na obszar pamięci zaalokowany przez menadżer sterty. Natomiast to co ty robisz, to wskaźnik na pierwszy element tablicy wskaźników. Fakt, w podanym kodzie jest trochę...
Witam! Myślę, że warto tutaj skorzystać z wskaźników do tablic i utworzyć tablicę tychże wskaźników np: TYP *(*t)[] i odwoływać się do tak zdefiniowanej poprzez: (*t)[wiersz][kolumna] [syntax=c]typedef float TYP; /* w miejsce TYP wstawiamy dowolny typ */ /* i definiujemy funkcję */ TYP *(*alokuj(int iletablic))[] { int i; TYP *(*p)[]; p = malloc(sizeof...
Błąd siedzi w tym miejscu: [syntax=c] strcpy(Book->description, DEFAULT_DESCRIPTION); int *newDesc = realloc(Book->description,25*sizeof(char... if (newDesc ==NULL) printf ("NULL!!!!!"); else printf ("OK!!!!!"); return Book; } [/syntax] Chyba nie zdajesz sobie sprawy, jak działa funkcja realloc: ona realokuje podany obszar pamięci w inne miejsce (zmniejsza/zwiększa...
Mam takie małe pytanko... W procedurze wyszukującej pliki po nazwie wykorzystuję raz nazwę zapisaną bezpośrednio w pamięci programu - ładowaną jako wskaźnik const, innym razem jest to nazwa dynamicznie zbudowana (wygenerowana) i umieszczona w buforze 11-bajtowym. W tej chwili istnieje flaga, która wskazuje procedurze wyszukującej z którego źródła informacji...
Z tym LPM to różnie bywa. Samo LPM bez parametru zadziała na pewno i kompilator też przyjmie. Nowe LPM z dowolnym rejestrem to dobra sprawa ale ja z tego nie korzystam, nie chcę niespodzianek. Podsumowując do danych: R26-R27 wskaźnik dla tablicy w RAM / odczyt LD, LDS, LDD / zapis ST, STS, STD R30-R31 wskaźnik dla tablicy we FLASH (czyli pamięci programu)...
Dlaczego trzymasz czcionki w formacie 565? Przecież wspomniany program zapisuje czcionki w formacie mono + ew. antialiasing. To zajmuje dużo mniej miejsca. Jeżeli chcesz jeszcze poprawić wydajność, to możesz ręcznie zmodyfikować pliki z fontami poprzez uproszczenie ich struktury. Możesz też użyć innego programu, np. FontCvt od Segger'a, który pakuje...
Poczytaj w pomocy o instrukcjach: DATA , RESTORE, READ... To się nie nadaje , ponieważ Restore potrzebuje etykiety , a Read to odczyt sekwencyjny i nie da sie wybrać konkretnego elementu tablicy , tylko trzeba odczytywać kolejno , począwszy od pierwszego elementu. Ale ... Bascom AVR posiada funkcje , za pomocą których można naśladować mechanizm wskaźników...
Niestety to, co chcesz zrobić nie jest wspierane przez architekturę 8051. Dostęp do SFR jest możliwy tylko przez adresowanie bezpośrednie, tak samo jak dostęp do pamięci adresowalnej bitowo. Dlatego też nie ma możliwości implementacji wskaźników do poszczególnych bitów. Deklaracja sbit = sfr ^ nr_bitu to tylko statyczna deklaracja, a nie instrukcja,...
Nie lepiej będzie zainicjować tablicę w pamięci operacyjnej i pobierać kolejne dane pośrednio przez indeks, wtedy wystarczy tylko wpisać w rejestr indeksowy adres początkowy tablicy, a w pętli zwiększać wartość indeksu. Pobieranie danych z pamięci programu jest w MCS'51 kłopotliwe, przez MOVC z wskaźnikiem danych DPTR, żeby użyć akumulatora jako indeksu...
Podmiana wskaźnika też, ale to już trzeba mieć 2 bufory, więcej ... zależnie od koncepcji zmiany. Potrzebujesz 2 buforów zadeklarowanych w pamięci programu i jednego wskaźnika. W niby Twoim "klasycznym" rozwiązaniu potrzebujesz 2 buforów na napisy (które, suprise suprise, na AVR wylądują w RAM) oraz dodatkowego bufora w RAM. Rzeczywiście, mniej to...
Epromy przed każdym użyciem musisz wykasować oświetlając okienko wysokim ultrafioletem. Do zaprogramowania potrzebujesz programatora obsługującego dany typ pamięci (jeśli są to stare BIOSy z pecetów, to pewnie jest to seria 27Cxxx). Ponadto kasowanie trwa kilkadziesiąt minut, więc warto wyposażyć się w emulator, aby przy każdej modyfikacji programu...
Dziękuję za odpowiedź. Samo &(f_Function_table powinno zwrócić adres w pamięci Flash, bo porównanie komendy (będącej zmienną) z łańcuchem, pobieranym poprzez wskaźnik w pamięci Flash &(f_Command_table działa poprawnie - program dobrze dokonuje porównania, ponieważ tablica f_Command_table jest dobrze zadeklarowana. Wobec tego problem faktycznie leży...
"Natomiast przekazując "a" jak przez wartość nie wiemy, czy w sygnaturze argumentu funkcji nie czai się referencja, która znienacka coś nam w zmiennej "a" zmodyfikuje (znaczące nazwy funkcji pomagają)." Przecież i tak musisz patrzeć jakie funkcja przyjmuje argumenty a tam zobaczysz &, no moze jak ktos patrzy w kod, bez zaglądania, co funkcja przyjmuje,...
Wskaźnik na pamięć programu w AVR studio to const prog_char* pamiec;
Witam. Mam pewien problem z programem na mikrokontrolerze STM32L151CBU6A. Mianowicie podczas wywoływania funkcji free, czyli zwalniania wskaźnika do zaalokowanej wcześniej pamięci wyrzuca mnie do HardFault. Co może powodować ten problem? Wiem, że może on nastąpić w sytuacji, że ten sam rejon jest kolejny raz zwalniany, jednak w moim programie na pewno...
Dynamic Battery Simulator 2281S-20-6 Keysight N6705B DC Keithley Series 2300 Battery Simulating DC - model2306,2308 Keithley 6060B-J08 Special Order Electronic Load Cadex C8000 ale i Cadex serii C7000 Rigol DL3000 Series DC Electronic Load ewentualnie ACCUMASTER C5 (• Zintegrowany Datenlagger do zapisu przebiegu krzywych ładowania/ rozładowania...
Samo testowanie algorytmów istniejących lub nowych to bardziej kryptoanaliza niż uruchamianie programu i zapisywanie wyników. Symetryczne algorytmy szyfrujące są deterministyczne i wiadomo ile zajmie przeliczenie jednego klucza. Znając długość klucza, rodzaj algorytmu możemy obliczyć potrzebną ilość iteracji, do wykonania ataku brutforce, przy założeniu...
Przy programowaniu na goły sprzęt wartość wskaźnika stosu musisz ustawić sam. Zwykle potrzebny jest też tzw skrypt linkera, czyli instrucja dla linkera gdzie są odpowiednie obszary pamięci i w które z tych obszarów ładujesz program , gdzie masz ram i gdzie stos. RPi to trochę dziwny komputer, bo zanim uruchomi się arm pewną robotę robi procesor graficzny,...
Zajrzyj do Microsoft Platform SDK -> Base Services -> Interprocess Communication. Jeśli zależy Ci na pamięci współdzielonej, to zainteresuj się tematem "File Mapping".
stała pamięci programu uszkodzenie programu pamięci zabezpieczenie pamięci programu
kondensatory sprzężenia zwrotnego licznik błędów komórki zamiana pamieci
Instrukcja obsługi pralki Ariston Margherita ALS948TX Wirnik do młota udarowego Sthor 79051 - gdzie kupić?