Hey prawidłowo program w asm dla t2313 powinien się zaczynac od adresy 0x0013, adresy od 1 do 0x0012 zarezerwowane są dla wektorów przerwań. W adresie 0x0013 powinna być deklaracja stosu, zgodnie z notą: RESET: ldi r16, low(RAMEND); Main program start out SPL,r16; Set Stack Pointer to top of RAM Czyli program powinien wyglądać tak, że pod adresem 0x0000...
Wydaje mi sie ze to calkowicie wyczerpuje problem. #include <stack> int main() { stack<int> Stos; //deklaracja stosu liczb calkowitych S.push(8); // odlozenie na stos liczby 8 S.push(7); // i 7 S.push(4); // i 4 assert(S.size() == 3); //dlugosc stosu wynosi 3 inty assert(S.top()...
A gdzie masz deklaracje STOSU.
A gdzie deklaracja stosu :> Teraz ludzie zaczna wklejac programy ktore zapalaja co drugi pin na co drugim porcie, co drugi pin na co rzecim porcie itp ;)
Zerknij tutaj: script.sct to skrypt linkera. W pliku startup.h przy deklaracji stosów jest wykorzystany atrybut zero_init .
Tę tablicę alokujesz na stosie, a jego rozmiar jest zapewne nie za duży. Albo alokuj statycznie, albo powiększ stos w ustawieniach projektu.
start: ldi r16,ramend out sp,r16 ;deklaracja dna stosu ..............
Ustaw rozmiar stosu na przerwań - domyślnie w przykładzie jest 0, bo nie ma tam przerwań. 4\/3!!
Bo jak już będę miał wszystko tak jak chcę, czyli na stałych tablicach w SDRAMie to prawie cały RAM bedę miał wolny. Więc duży rozmiar stosu mi nie przeszkadza. Zresztą, to tylko deklaracja. Stos rozrośnie się i tak tak bardzo jak tylko będzie chciał. Tutaj to jeszcze kwestia kolejności ułożenia bass, stack i data i innych rzeczy, ale mniej więcej tak...
(at)funak Z ciekawości zainstalowałem najnowsze AS 7 i potwierdzam obserwację. Wygląda to na jakiś gruby błąd w Atmel Studio. (at)Freddie Chopin Funkcja SystemInit() jest trywialna. (at)Piotrus_999 Skrypt linkera jest o tyle interesujący, że przy braku innych deklaracji wielkości stosu (przez #define STACK_SIZE) na stos rezerwuje 0x10000, czyli 1MiB....
Nie wiem, co miałeś na myśli pisząc: (jedyne co zmieniam to wielkość bufora danych we flashu) Dla mnie taka sprawa ewidentnie "pachnie" nakładaniem się segmentów zmiennych globalnych ze stosem danych lokalnych oraz stosem powrotów z wywoływanych funkcji. Generalnie kompilatory nie radzą sobie z automatycznym wyznaczaniem niezbędnych rozmiarów stosów...
Napisałem już obsługę wyświetlacza LCD na ARMa po rejestrach, ale robiłem to na „gotowcu” z bibliotek z ksiązki pana Galewskiego. Niestety mam problem ze zrobieniem tego od zera. W Keilu 5 tworzę goły projekt, który zawiera tylko wbudowany plik z deklaracjami stosu itp i dopisuję swój program np. migający diodą. W ogóle nic nie rusza. Czy...
Mam problem z prawidłowymi deklaracjami stosów pamięci. Żeby obliczyć zapotrzebowanie próbowałem zastosować rozwiązanie z $HWCHECK opisane w helpie, ale niestety nie działa prawidłowa na M2561 - zmienna _hw_lowest jest stale równa zero... Być może pomogła by obserwacja zawartości RAM podczas pracy programu co jakiś czas. Chyba najlepiej byłoby użyć...
Task w którym jest strtok() nie jest przerywany w trakcie wykonywania tej funkcji, żadnym innym używającym strtok(). Druga sprawa, że z strtok i tak wskakuje do __strtok_r() a więc reentrant i pod Yagarto to działało. Jednak rzeczywiście wymiana na strtok_r() poprawia sytuacje. Nie jestem w stanie sprawdzić całego kodu czy działa, bo wywołań tej funkcji...
Nie pokazałeś najważniejszego, czyli deklaracji tych zmiennych adc_result/prev_adc_result. Niech zgadnę - zmienne automatyczne? Jeżeli tak, to zagaduję dalej, że brakuje stosu.
No, niedociągnięć to trochę jest. Przede wszystkim zaraz przed pierwszym rozkazem asemblera (u Ciebie deklaracja stosu) powinieneś dać .cseg .org 0 - tak dla pewności. Po drugie, źle ustawiasz port LCD. (out DDRD). Powtarzasz to polecenie dwa razy i w efekcie tylko PD0 zostaje ustawiony jako wyjście - reszta linii portu D jest jako wejście. W twoim...
Oczywiście że masz błąd w programie, bo do podprogramów skaczesz (LJMP) zamiast je wywołać LCALL I dlatego stos "leci". To raczej nie to. Jezeli skaczemy z podprogramu JMP i konczy sie on unstrukcją RET to tak jakbysmy wykonali podprogram glowny. Często stosowana sztuczka w celu zaoszczedzenia 2 lub wiecej bajtow. Nie widze deklaracji poczatku stosu...
teraz tak na starej wyskakuje mi ten błąd, a na nowej nie czyta mi w ogóle cipa . hahahahah :D odpal combofixa. Moze pomoze i dodaj jeszcze deklaracje programowego stosu i ramki. Narazie zwiekszyles tylko stos sprzetowy. Moim zdaniem jest to typowy blad z kompem a nie z kodem. Ja bym poazadnie go przeczyscil. A w tej nowej wersji co ci nie czyta chipa,...
Kliknij sobie kolego słowo Select i naciśnij klawisz F1, dowiesz się wtedy jak wygląda instrukcja Select Case. Wywal też 2 ostatnie End If i wstaw je w odpowiednich miejscach, Jeśli nie wiesz gdzie, to ponownie skorzystaj z klawisza F1. Dorzuć jeszcze deklaracje wielkości stosu i ramki i powinno się skompilować. I jeszcze jedna rada na przyszłość nawet...
ATtiny13 nie ma wewnętrznego zegara 4MHz a zewnętrznego na schemacie nie widać. Błędna deklaracja procesora. Przy domyślnych ustawieniach stosu zabraknie pamięci.
Nie znam mozliwości w tym zakresie Bascoma. Jedno jednak jest pewne. Każdy program tego typu może działać sekwencyjnie. Oznacza to, że wywoływanie kolejnych procedur w procedurze działać musi. Jest jednak tzw granica zagnieżdzeń. Może ona wynika z możliwości samego kompilatora (programu tłumaczącego - w tym wypadku Twoim nie sądzę aby tak było), albo...
ustawiłem bufor dla tych wprowadzanych znaków z klawiatury... Przeciez o to chodziło :) do asemblacji to używam programu emu8086 To jakieś środowisko. Jaki jest w nim asembler? Nie będę ściągał. Nie bawię się już asmem 16 bit od lat. Pytam bo "mój" Tasm protestuje przeciwko użyciu słowa stos w deklaracji segmentu: "Reserved word used as symbol: STOS"...
Co do Twojego problemu deklaracji typu układu - typ ten zdefiniowany jest w Makefile (MD, HD, CL, ...) Jeśli używasz przerwań, to ustaw jakąś wielkość stosu dla przerwań w skrypcie linkera (domyślnie jest 0, bo nie ma przerwań w przykładach). 4\/3!!
Witam, Dyrektywa: $Crystal = 1000000 nic nie daje. Nie zależy mi na odliczaniu idealnych odstępów czasu, mają być to odstępy między "uderzeniami przekaźnika". Jednak w tej sytuacji, nieraz "waitms" zadziała tak że przekaźnik nie zdąży się załączyć, a nieraz czekam dobrych kilka sekund (waitms 500). Zgadza się, procesor ma mało SRAM-u, ale jednak ją...
Witam, Dużo rozkazów jest niepotrzebnych: ustawioanie pojedynczo bitów a potem przez zapis całego rejestru (rejestr IE), nie powtarza się konfigurowania liczników w przerwaniach jeśli zostały skonfigórowane na początku, to samo z aktywacją przerwań, więc po okrojeniu: $mod51 ;istotne dla kompilatora asm51 pre0equ10h;deklaracje komórek zmienne "set"...
Otwierasz plik startup_xxxxx.s, klikasz poniżej okna edytora w zakładkę Configuration Wizard i ustawiasz rozmiar stosu. Radziłbym jednyk przemyśleć deklaracje danych. To na ogół nie jest dobry pomysł, żeby mieć zmienne lokalne procdury o objętości setek bajtów lub więcej.
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...
Witam Zacznę od tego, że chciałbym zrobić grę tv, ale wszystkie kody tych gier ,na jeden uc, są w asm, na którym się nie znam. Moja prośba jest taka, czy ktoś mógłby przetłumaczyć mi ten kod. Oto on: .nolist .include "/home/maro/include/m8def.inc" .list ; .listmac .cseg .equ video=7 ; pin obrazu video .equ sync=0 ; pin synchronizacji .equ...
Zgaduję, że albo brak stosu, albo brak atrybutu interrupt przy deklaracji procedury, który niestety powinien być w przypadku STM32F1, jak to niedawno wyszło.
Tak się dzieje jak stosujesz instrukcje Gosub, program idzie do procedury a tam znowu stosujesz Gosub i w tej na koncu nieszczęsne Retrurn. Program idzie w "krzaki" bo przepełniasz stosy i nadpisujesz w pamięci Ram zmienne. Poczytaj o procedurach i funkcjach w pomocy Bascoma, użyj Declare Sub a potem Sub: i END SUB. Stosuj też deklaracje ramki i stosu...
No to radziłbym się zaznajomić z tego typu pojęciami bo są to podstawy. Otóż w języku C mamy cztery klasy pamięci. Określają one widoczność zmiennych oraz czas ich życia. Są to: auto , register , static oraz extern . Wszystkie zmienne deklarowane w funkcji (bez słowa kluczowego static) należą do klasy auto . Zakres ich widoczności oraz czasu życia określa...
I jeszcze jedno: szybsze jest alokowanie pamięci na stercie, a następnie zwalnianie jej czy może przechowywanie dużych tablic na stosie? Oczywiście cały czas mówię tutaj o zarezerwowaniu pamięci tylko i wyłącznie na czas działania funkcji. Dodano po 5 Właśnie z tymi statycznymi tablicami i zmiennymi też mi się za bardzo nie widziało. Ale teraz mam dylemat...
Zauważyłem, zauważyłem, ale o tym że to teraz nieużywane już nie wspomniałeś Ty. Tak samo jak nie piszesz w kodzie jakie są rozmiary stosów i ramki. Dlatego czasem szkoda czasu na rozpatrywanie takich pytań jak o tyle rzeczy jeszcze trzeba dopytać... Napisz uczciwie ile miałeś poustawiane w IDE na te stosy ;) a najlepiej umieszczaj deklaracje w kodzie....
(at)grko, możesz mi powiedzieć, o co chodzi z tym brakiem const? Pogoogluj za hasłem "const correctness". Nie wiem, czy miałeś to samo, co ja zauważyłem, że jak deklarowałem zmienne w funkcji taska przed pętlą while(1), to gdy użyłem "const typ nazwa_zmiennej", to mimo wszystko miałem tą zmienną umieszczoną w stosie. Dopiero pomagała deklaracja "static...
To kod, który u mnie na STMF107 działa - może znajdziesz jakieś róznice... W przerwaniu mam obsługę klawiatury 4x4 + kilka liczników, ale to tutaj nieistotne, więc nie zamieszczam. [syntax=c] //--------------------------------------... // Inicjalizacja TIM2 //--------------------------------------...
No więc tak, docelowo zamiast tego puthex'a ma być spi_write(16bit), który dane będzie dane brał z jakiejś tablicy. I tego już nie obejdę inaczej. Przy spi, efekt jest ten sam co tutaj dla puthexa. Zastąpiłem wysyłanie liczby wysyłaniem znaku, a nawet wielu putstr1("......................... no i działa poprawnie. Spróbowałem...
Całość - to deklaracja i definicja tablicy adresów obsługi wyjątków w Cortex-M. Tablica ta zawiera adresy procedur obsługi wyjątków, ale jej pierwszy element nie jest adresem procedury, tylko inicjalną wartością wskaźnika stosu, ładowaną przy starcie procesora. kawałki, o które pytasz, to: Pierwsze - deklaracja tablicy wskaźników na funkcje, czyli adresów...
Czytałem wprawdzie jakiegoś i tak fajnego PDF'ka autorstwa kolegi Zbigniewa Gibka , i jest tam trochę na te tematy. Jednak tam opisane jest tworzenie własnych procedur które hmmm trzeba deklarować jeszcze samemu w programie głównym. To troszkę ciężko tak działać. A czy zastanawiałeś się w jaki sposób przekazać kompilatorowi czy ma na stos wrzucić jakieś...
No tak, tylko że w tym twoim attiny13 nic się nie zmieści, żadna deklaracja zmiennej. Zmieści się. Tylko trzeba zmniejszyć stos, który Bascom ustawia domyślnie na cały RAM.
Witam, próbowałem przeanalizować ten kodzik ale naprawdę , uwierz - jest to baardzo ciężkie. Robisz narazie wszystko niezgodnie z zasadami programowania. Rozumiem oczywiście, że dopiero się uczysz ale postaraj się przestrzegać kilku zasad o których za chwilę a będzie nie tylko tobie łatwiej analizować napisany kod ale co najważniejsze szukać błędów....
Podnieś Bascom do nowszej wersji. Wersję 2078 już spokojnie znajdziesz w sieci. Na 2080 się to kompiluje bez błędów mimo iż program zgłasza kilka ostrzeżeń o dwukrotnej deklaracji tych samych zmiennych itd.. Musisz wiedzieć że AVR-DOS potrzebuje minimum 1500B SRAM i w Mega32 zostaje Ci 500B SRAM. Nie zadeklarowałeś wielkości stosów HW i SW oraz ramki...
#include <avr/io.h> #include <avr/interrupt.h> volatile int a,b; SIGNAL(TIMER2_OVF_vect) { TCNT2 = 0xCD; a++; if(a == 148) //milisekunda { a = 0; b++; } if(b == 1000) //sekunda { b = 0; PORTD &= ~_BV(PD3); } if(b == 25) PORTD |= _BV(PD3); } int main (void)...
uP nie korzysta ze stosu bo standardowo dane zapisywane są w pamięci ram. Jeśli chcesz używac stosu do przechowywania danych tymczasowych użuj komendy reentrant przy deklaracji funkcji.
Twój program ma jedną klasę główną - Kalkulator, dwie klasy pomocnicze - Stos i Wektor. Wektor jest samodzielną klasą, Stos zależy od Wektora (choć w sumie nie powinien, bo powinien być wzorcem), a Kalkulator to główna funkcjonalność. A więc tworzysz wektor.hh i stos.hh, do nich wektor.cpp i stos.cpp. Kalkulator i funkcję main zostawiasz w pliku kalkulator.cpp....
Nie widzę deklaracji pamięci na stosy, a program potrzebuje sporo pamięcina nie, bo co chwila jest skok do jakiegoś podprogramu. Nie chce mi sie go kopiowac i i emulować, ale założę sie, że za chwilę ujrzałbym na standardowych ustawieniach stosu taki fajny napis "...stack overlaped".
Jak masz wyłączoną optymalizację to nic dziwnego, że procesor odkłada na stos wszystkie rejestry. Lepiej zastosować optymalizację i pododawać w programie volatile tam gdzie ma być żeby nie było jaj. Jak chcesz zupełnie uniknąć odkładania w ISR na stos to możesz dodać flagi __attribute__((naked)) do deklaracji przerwania. Jest to bardzo niebezpieczne...
Skasuj te słowa "Iram" - w wersji 2075 ten numer nie przejdzie w ten sposób. Pod deklaracją procesora powinieneś też określić wielkości stosów i ramki. Na przykład: [syntax=vbnet] $regfile = "attiny13.dat" 'typ proca $crystal = 1200000 $hwstack = 8 $swstack = 8 $framesize = 24[/syntax] Musisz też wiedzieć że nowy Tiny13 jest taktowany predkością 1,2MHz...
A deklaracje od definicji rozróżniasz? ... 1. deklarujesz ... 2. deklaracja ... 3. deklaracja ... Fajne, czyścisz mi monitor. A do autora: ad 1. Spróbój utworzyć coś co się nazywa drzewo, lista, stos to sam się przekonasz. Ale poza tym myślę, że trochę pomyliłeś forum. Albert
bezpośredniego skutku zwykle nie ma (sizeof(char)==1), ale zamiast -zmieniłem nazwy ... read na read1 Ja bym zmienił na znaczącą, oddająca intencję projektową. Coś w rodzaju read_and_trim albo read_from_line czy read_one_from_line Nazwa która wyznacza funkcjonalność pomaga (nawet w projekcie jednoosobowym) się zdyscyplinować. A nie ukrywajmy, funkcja...
Lepiej wykorzystaj do tego celu pamiec programu , ewentualnie eeprom. Sposob deklaracji tablic dla winavr : dla eeprom : #include <avr/eeprom.h> #define EEPROM __attribute__ ((section (".eeprom"))) unsigned char temp [20] EEPROM ={1,2,3,4,}; dla pamieci programu : #include <avr/pgmspace.h> static unsigned char temp_1 [2] PROGMEM = {1,2,3,4};
Pamiętaj, że program nie zaczyna się od main. Wcześniej jest jeszcze odpowiedni kod biblioteczny - zwykle nazywa się crt/crt0 itp. Zarówno w mikrokontrolerach jak i w PC, a nawet w większych maszynach plik binarny rozpoczyna swoje wykonanie od ustalonego adresu. Linker umieszcza tam właśnie moduł crt, i dopiero z tego modułu wołany jest main - po przygotowaniu...
Witam, Za pomocą CubeMX wygenerowałem projekt z systemem FreeRTOS oraz biblioteką LwiP aby uruchomić serwer WWW. Wszystko uruchomiłem tylko problem jest taki że mam tylko deklarację funkcji do odczytu z buforu i wysłania do stosu lwip : MX_LWIP_Process(); Ta funkcja powinna być wygenerowana w CubeMX? Dodano po 16 Oczywiście na ping odpowiada.
Zaczynam zabawę z programowaniem µC więc robię przykłady z książki :) Gdy wywołuję program w symulatorze AVR(jeszcze nie zmontowałem płytki uruchomieniowej :-/ ) to gdy wywołuję podprocedurę procedurą CALL i na końcu tej podprocedury jest RET to po wywołaniu RET następuje RESET. Nazwa błędu w symulatorze(z 8 lub 9 na końcu ... różnie ... teraz...
Troszkę za dużym ogólnikiem rzuciłem... Tak, stos to HW Stack (sprzętowy) i Soft Stack (programowy). Należało by zwiększyć rozmiar stosu sprzętowego, bo używasz przerwania od Trmer1. Wywołanie obsługi przerwania powoduje zajęcie 32 bajtów stosu (czyli tyle, ile masz zadeklarowane), a nie tylko do tego jest on używany. Możesz ustawić np. dwukrotnie więcej....
Poniższy zapis: ISR (INT0_vect) { } Oznacza, że deklarujesz funkcję/kod obsługi przerwania INT0 trybie blokującym (ISR_BLOCK). Oznacza to, że jeśli w trakcie wykonywania funkcji obsługującej przerwanie INT0 pojawi się inne przerwanie, np INT1 to nie zostanie ono obsłużone. Rozwiązaniem może być deklaracja ISR z atrybutem ISR_NOBLOCK....
W jaki sposób dokładnie określić rozmiar __main_stack_size i __process_stack_size w skrypcie linkera? Nie da się - nawet jak sobie to sprawdzisz metodami o których piszesz to i tak jest to wartość "na oko". Co do wypełnienia stałymi danymi i podglądania, to samo podglądanie można wykonać przy użyciu zakładki Memory, a wypełnianie najlepiej zrobić w...
Dziękuję za odpowiedzi, nie wszystko jest jeszcze dla mnie jasne, ale chyba zaczynam rozumieć zagadnienie. Proszę rzucić okiem na ten przykład i na jego podstawie określić czy "załapałem" czy może jednak nie do końca: -------------------------------- get_data(int a , void(*wskaznik)(void)... { (...); wskaznik();...
Te deklaracje to są w jednym pliku czy w różnych? Jak się ma wielkość pamięci MCU do ilości zmiennych + stos? Jaka to wersja kompilatora SDCC (do sprawdzenia komendą sdcc -v)? Albert
Kompilator nie ma żadnego obowiązku tworzenia niczego na stosie. Może sobie np. te wartości trzymać w rejestrach. Pokaż kod funkcji to Ci wyjaśnimy. Nie bój się - nie ukradniemy
Witam! Generowanie obrazu za pomocą AVR w polskim internecie to temat tabu. Zdaję sobie oczywiście sprawę, że wyważam otwarte drzwi, gdyż są już odpowiednie procedury obsługi wyświetlania. Niemniej każdy pisze pod siebie, a raz napisana dobre procedura np. do obsługi LCD, czy jakiejś magistrali jest bezcenna. Nie jestem zawodowcem w programowaniu, wiec...
Można jeszcze inaczej, jeżeli zależy Ci na przerwaniach, to przy deklaracji, na końcu parametr NOSAVE On Timer1 Gen NOSAVE Durny BASCOM wrzuca na stos prawie wszystkie rejestry po wejściu do przerwania (w sumie 29 sztuk w AVR), a przed wyjściem z przerwania zdejmuje rejestry ze stosu. Stąd niesamowite opóźnienie. Oczywiście po zastosowania NOSAVE rejestrami...
Skoro uczysz się samego C, nie używaj C++, ani obiektów typu cin, cout. Przy okazji, jeśli korzystasz z Visual Studio, przestań używać funkcji pokroju gets() - zamień je na bezpieczniejsze gcc , skorzystaj z fgets . Twój przykład zawiera pewien klasyczny problem nadpisania stosu, dzięki czemu przy pomocy danych wejściowych można przechwycic kontrolę...
Witam, Kiedy zadeklaruje ATmega8/16/32 to program działa fizycznie nawet na mega64. Kiedy mam wybrany Atmega64 to domyślna deklaracja zakłada 64kb ramu. Nie wiem dlaczego, chyba powinno być tylko 4kB. Ponieważ wartość jest za duża, procek restartuje się już przy pierwszym powrocie ze skoku po pobraniu adresu na nieistniejący stosu, czyli adresu 0x000....
Arduino z założenia jest platformą deweloperską, nie produkcyjną. Sama płytka Arduino to mikrokontroler, kwarc i stabilizator, oraz ew. konwerter rs232 na USB. Wbudowywanie Arduino w urządzenie produkcyjne nie ma większego sensu, bo i tak trzeba zaprojektować PCB na peryferia z miejscem na osadzenie Arduino... to lepiej po prostu na tym PCB umieścić...
1. framesize ustawiasz na 8 2. softstack ustawiasz na 16 Najprawdopodobniej twoją pamięc w tiny zapychaja stos i frame, zmniejsz te wartosci eksperymentalnie. Zmienna bit w bascomie jest definiowana w innym obrzarze pamięci, poza tym rezerwuje od razu cały bajt pozostawiając 7 pozostałych bitów na inne zmienne typu bit. Nie mozesz wywalić "$regfile",...
Ustawiłeś stos dla przerwań w skrypcie linkera? Dodałem tę deklarację ale i bez niej funkcja obsługi przerwania jest poprawnie przypisana w tabeli wektorów. __attribute__ nie ma nic wspólnego z tym czy funkcja trafi do tablicy wektorów czy nie, za to wpływa na fakt, czy taka funkcja będzie poprawnie działać podczas wywoływania innych funkcji które mają...
... Widzę że ARM umieszcza to na stosie, ciekawe co będzie jak będę miał 100 funkcji. Da się w tej sytuacji umieścić to int (*pxFun)(int*, int*, int*)=(void *)0x101584; na stałe we flashu? ... Da się w C "powiedzieć" kompilatorowi żeby umieścił funkcję pod określonym adresem? pxFun to normalna zmienna. Tak więc sposób jej umieszczenia zależy od sposobu...
Dzięki Freddie. Twój syscalls oczywiście poprawnie się kompiluje. Próbowałem go już wcześniej. Ale chciałem mieć możliwość sprawdzenia zakresu stosu. Naprawdę nie ma sensu tego sprawdzać? Próbowałem tą deklarację wstawić do twojego kodu i nie działa. W którym miejscu ją umieściłeś w kodzie? Dodano po 1 Może te dwie etykiety ze skryptu linkera nie są...
Jako ciekawostę wrzucę Ci prosty sterowniczek do RS-a na PC mojego autorstwa. Możesz go lekko przerobić i używać na PC do wysyłania określonych sekwencji ;) ;---------------------------------------... ;Sekcja dyrektyw kompilatora ;.model tiny = program i dane musza sie zmiecic w obrebie ; 1 segmentu pamieci (64 kB) ;.stack 100h...
OJ kolego ! Podstawy jezyka C sie klaniaja. W przypdku deklaracji zmiennej: uint16_t [480] kompilator wyrzuci blad bo nie wie o jaka zmienna chodzi. Poprawna deklaracja zmiennej tablicowej wyglada tak: typ zmiennej nazwa zmiennej ilosc elementow, wiec poprawny zapis to uint8_t hexek[480] Moze przyczyna jest brak pamieci stosu. Dla uint8_t hexek[480]...
Hej. Mam dwa moduły esp8266 z zintegrowanymi wyświetlaczami OLED 128x32. Płytka wyjęta z torebki ma fabrycznie załadowany program skaner wifi i on działa bezproblemowo. Niestety mam problem z użytkowaniem innych programów. Próbowałem różne biblioteki, używane w róznych przykładach: Adafruit_GFX z Adafruit_SSD1306 OLED.h SSD1306Wire.h Niby wszystko działa,...
Dane wpisane do tego skryptu zakładają, że nie korzystasz z ŻADNYCH wyjątków. Musisz sobie je ustawić w zależności od swoich potrzeb. __irq_stack_size = 0; Czyli po wejściu w przerwania mam dostępne 0 pamięci ram na zminne? W skrócie: Funkcji ustawiającej stosy przekazane jest 0 dla trybu XXX, a więc (w zależności od kolejności) dany stos będzie pokrywał...
Jest to trochę dla mnie dziwne co piszesz. Stosuje ten sposób w avrstudio i nigdy nie miałem problemów. Do tego właśnie według mojej wiedzy służą dyrektywy warunkowe, po zdefiniowaniu __MAIN_H, następnym razem partia kodu wewnątrz dyrektyw nie będzie załączana. Tak przynajmniej wyczytałem w książce do ansi C.
Przykładów można szukać w SPL - można się w ten sposób dowiedzieć, w których rejestrach i co trzeba wpisać. Powoli szykuję tutorial do STM32 bez biblioteki, ale to jeszcze trochę potrwa. Kłopoty z bibliotekami są wielorakie. Ostatni kłopot - to to, do czego nas zachęcają przykłady z użyciem bibliotek, czyli deklarowania struktur jako zmiennych i pracowitego...
Czy ktoś potrafi mi wyjaśnić drogę programu od napisania do umieszczenia w mikrokontrolerze ? kompilator odkłada funkcjie main na stosie ? co się dzieje np. z takim zapisem : int wyw(4,5); // deklaracja funkcji wyw int main(void) //Co się dzieje z funkcją i jej ciałem gdzie ona trafia proszę o schemat tego procesu { int zmienna=5;...
Oczywiście, że podawanie do 4 miejsc po przecinku wywołuje uśmiech na twarzy. Rzadko który producent podaje SPL z dokładnością do 0,5. Pomiary w STX były wykonane w jakiś tam sposób i co kalkulator pokazał to wpisali. Jednakże postęp w stosunku do "wczsniejszych czasów" i tak jest ogromny. Specjalnie napisałem w tytule "estrada" w cydzysłowie. Niektórych...
Przeniosę to przerwanie i tablice do plików .c. Ale wtedy w pliku głównym .c mam includować plik przerwania .c? Myślałem, że tam inkluduje się tylko pliki .h Nie musisz include'ować pliku .c, a nawet nie powinieneś. W Makefile dopisz go tylko do plików źródłowych (SRC = $(TARGET).c przerwanie.c inny_plik.c itd.) a linker odwali resztę roboty. Zostało...
To wbrew pozorom nie jest proste. Wmontowanie do języka wysokiego poziomu wymaga, aby wiedzieć co nam wolno zrobić. Normalnie każdy taki język robi zrzut na stos, zmiennych, a te są uzależnone od deklaracji. Czy są liczbami jedno, dwu czy więcej bajtowymi. Same rozkazy w asemblerze są proste, ale jeżeli zmienne nie są sformatowane konkretnie to trzeba...
No to pora na wyjaśnienie. Najpierw raport z valgrind a: Program sprawdza czy podane liczby sa liczbami zaprzyjaznionymi. Podaj liczbe calkowita dodatnia: 210 Wyswietlam testowo wyniki: 70, 58657919, 70, 30, 21, 15, 14, 10, 7, 6, 5, 3, 2, 1, Wyswietlam testowo sume dzielnikow liczby uzytkownika: 58658173 ==7861== Invalid write of size 4 ==7861== at...
1. Zmieniasz tę deklarację z int. na char. 2. Zmieniasz procedury zapisu i odczytu: PROCEDURE na_stos (VAR wstosu: wsk; d: Integer); na: PROCEDURE na_stos (VAR wstosu: wsk; d: char); 3. Zapisujesz na stos: for x:=1 to length(slowo) do na_stos(wskaznik,slowo[x]... 4. Odczyt ze stosu: repeat ze_stosu(wskaznik,literka);...
Porocesor 90s8535, pod pin6 portu D podpięty DS1820 na 3 kabelkach podciągnięty 4,7k. Problem: nie chce zwrócić ID układu DS resetuje się dobrze bo podaje 0 w procedurze resetu, ale za nic nie chce zczytać id. Timingi są ustawione tak jak na stronie maxima. program bit czytany z z DS zapisuje do rejestru r22 i podprogram "rej" wyświetla w hex zawartość...
Teraz już sprawy idą w lepszym kierunku. Problematyczny jest jeszcze sposób deklaracji zmiennych w programie. Proponuję pobrać z internetu dowolny assembler na 8051 (np. ASEM-51), wtedy wszystkie błędy składniowe można na bieżąco sprawdzać. Struktura programu (dowolnego) może wyglądać np. tak: - deklaracja zmiennych i stałych, - instrukcja skoku do...
#lit1 jest z tego co pamietam oznaczeniem numeru bitu, czyli cyfra od 0 do 15. takie operacje realizowane sa na normalnych zmiennych/rejestrach o wiekszym rozmiarze. warto chyba jeszcze dodac, ze powyzsza deklaracja stworzy ci zmienna STATYCZNA, to znaczy bedzie ona zajmowac miejsce w pamieci przez caly czas. zmienne lokalne dla dsPIC sa tworzone albo...
Witam serdecznie, mam banalny problem heh siedzę od paru dni i nie mogę go rozwiązać , a mianowicie gdy wykorzystuję przerwanie zewnętrzne INT_0 ustawiam sei gimsk oraz mcucr na stan niski i wywołuje przerwanie lecz program nie chce z niego wyjsc , nie wiem o co chodzi , program praz pętle czasowe sa na 100% napisane dobrze bo dgy używam warunków sbic...
Witam Testuje wyświetlanie czasu ( godziny/minuty/sekundy ) na sześciu wyświetlaczach LED WA, używam dwóch 74HC595 oczywiście ULN2803 + rezystory oraz UDN2981. Atmege i 74HC595 zasilam z 5V a wyświetlacze z dodatkowego zasilacza na LM2575, na którym dobrałem eksperymentalnie napięcie. Zdarza się czasem, że przy uruchomieniu całości wyświetlacze niebezpiecznie...
A jak sprawdzać wolną pamięć w czasie pracy programu na AVR, podaj przyklad kodu Dodano po 1 Cześć! Bardzo dobrze, że pytasz o monitorowanie wolnej pamięci w trakcie pracy programu na mikrokontrolerach AVR, ponieważ jest to ważny aspekt w projektowaniu stabilnych i efektywnych aplikacji. Istnieje kilka metod na sprawdzanie dostępnej pamięci RAM, ale...
Ostatnio zająłem się RTL8019 i do napisania stosu urzylem AVRStudio + WinAVR. Wszystko ładnie pięknie dopóki nie chciałem wyników pracy poprzenosi do zewnętrznych bibliotek. Poprzenosiłem funkcje do plików C (np. RTL8019.C) do tego pliki H z definicjami i deklaracjami funkcji. Jeżeli teraz w pliku main wpisze #include "RTL8019.H" to kompilator nie może...
no to problem rozwiazany [; caly czas nie zwracalem uwagi, ze ty dane pchasz przez DMA. no wiec problem polegal na tym, ze UART jest na tyle wolny (albo procek na tyle szybki [; zalezy jak na to patrzec), ze zanim on zaczal te dane tak naprawde odbierac i wysylac spod zadanego adresu, to juz funkcja sie skonczyla. skoro zmienna byla lokalna, to byla...
Mam kila pytań dotyczącej Atmegi 64: 1 Czy dobrze ustawiłem segment deklaracji .INCLUDE "m64def.inc" na scalaku pisze Atmega64 16AU ? 2 Do czego jest pamięć Extended I/0 ? 3 Czy dobrze ustawiłem adres na dane .DSEG ;PAMIĘĆ DANYCH .ORG 0x0100 4 Na symulatorze AVR studio za uwarzyłem gdy zainicjuje stos to część zapisu powstaje w pamięci Extended I/0...
Nie ma możliwości kompilacji stosu BitCloud bez makefilea. W makefile includiwane są pliki konfiguracyjne oraz w zależności od define'ow kompilowany jest stos na różne płyty (RAVEN AVR, meshbean itp). Z błędów wynika że nie zdefiniowano "appUsartDescriptor" więć plik usart.h nie jest dołączony. Czy oryginalny lowpower kompiluje się ? W poniedziałek...
a więc w deklaracji zmiennych lokalnych nie ma zmiennej o adresie 12. Jak to wytłumaczyć? Dodam, że odwołanie do L 12.4 jak i L12.6 występuje tylko raz w danym FB i jest to w pierwszym segmencie. 1. L 12.4 i L 12.6 nie muszą być zadeklarowane, żeby być... miejsca na stosie jest zazwyczaj dosyć... 2. Masz do czynienia z typowym błędem programowym: najpierw...
Na 99.9% Twoje problemy nie są zawinione przez Keila. Obstawiałbym przepełnienie stosu, ale nie widząc kodu trudno coś wymyślić. Dziś poeksperymentowałem nadając stosowi usera i przerwań wybitnie nadmiarowe wartości. Również inne nieistotne stosy przetrenowałem w ten sposób, ale efekt był dokładnie taki sam. Dla pewnej wartości licznika watchdoga program...
1. Projekt OpenBk7231N i prawdopodobnie wszystkie inne kompatybilne projekty/systemy operacyjne korzystające z OpenBK7231T_App używają standardu C99 (a nie C89). Zatem deklarowanie zmiennych w funkcji nie musi znajdować się na początku funkcji. Dla mnie zadeklarowanie zmiennych tam, gdzie ich potrzebuję, czyni kod znacznie bardziej czytelnym i krótszym....
(at)m_misek Z ciekawości wrzuciłem Twój program do Atmel Studio i sprawdziłem jego wykonanie w symulatorze. Nie widzę żadnych błędów. Więcej, ciąg znaków najpierw jest kopiowany z Flash do RAM, a następnie na stos. To co widzisz jako 21 FF, to jest zawartość stosu bezpośrednio za tablica znaków wrzuconą na stos. Proponuje sprawdzić: 1. Jaki układ masz...
Witam! Uczę się programowania mikrokontrolerów STM32 (aktualnie męczę STM32F103). Programy piszę w C, ale co jakiś czas zerkam w to co spłodził kompilator - w celach edukacyjno-poznawczych. Napisałem prostą funkcję obsługi przerwania od SysTicka. Deklaracja funkcji ma postać: [syntax=c]void SysTick_Handler(void) __attribute__((interrupt));[/syntax]...
Chodziło mi o to, że program na początku ma dane konfiguracyjne: typ procesora, taktowanie, konfiguracja podzespołów i deklaracje zmiennych. Co do wyrażeń IF THEN ELSE END IF to są one poprawne. Do badania warunków można użyć symulatora wbudowanego w Bascom. Co do restartów to jest oto uwarunkowane wieloma czynnikami: stabilność zasilania, praca w warunkach...
Różnic nie zauważam, tak długo jak "biblioteka to zbiór gotowych programów", a plik nagłówkowy takowe zawiera:) No i dalej to samo. Biblioteka zawiera faktyczne definicje funkcji, zaś nagłówek zawiera (w typowym przypadku) jedynie ich deklaracje. To że obydwa słowa zaczynają się na "de-", to jeszcze nie znaczy że są tożsame. 32kiB to wręcz niewyobrażalna...
Witam Bardzo sensowne jest to co napisał eskwadrat, bo tu mam już napisany programik który robi pomiar ale wartość tego pomiary odrazu wyrzuca na port co mozna definiować jako formę wyswietlania wartości jednak w realu to za mało wiec spróbuję sie zastosować do w/w uwag pozdrawiam !!! KOD: $MOD51 ;istotne dla kompilatora asm51 (at)(at)(at)(at)(at) ;...
Witam Należy ustalić źródło sygnału zegarowego. Czy Twój Attiny pracuje z kwarcem zewnętrznym czy z wewnętrznym oscylatorem RC? Wszystko jest pięknie wyjaśnione w PDF Attiny str. 22 (Clock sources). Nie wiem czy nasz kod źródłowy programu czy tylko plik hex. Jeśli źródło to w deklaracjach powinno być coś takiego: $regfile = "Attiny2313.dat" ‘zadeklarowany...
Ja podam jeden powód dlaczego warto zacząć od C. Zarządzanie pamięcią. W C jest się "trochę" bliżej sprzętu i widać co się dzieje z tą pamięcia, jak nią zarządzać, etc. Fakt, że pod tym względem najlepiej by zacząć od assemblera ale to już masochizm:P (chociaż ja właśnie w asemblerze + winapi + olydbg zrozumiałem co się dzieje z pamięcią w windowsie,...
analiza stosu pamięć stosu ramka stosu
zapchany katalizator renault radio clarion zmieniarka radio error
Alternator w Galaxy MK1 1.9 TDI 110 KM przestaje ładować przy 2000 obrotów Buczek włącza się przy rozładowanym akumulatorze, milknie po podłączeniu prostownika