Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 kwi 2024, o 01:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 48 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 24 sty 2015, o 17:26 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Witam.
Napisałem program do kostki do gier na Attiny13.
Kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Założenie jest takie, że timer w trybie ctc liczy sobie z i zwiększa zmienna 'i'.
Gdy nacisnę przycisk, przerwanie PCINT ma wyliczyć zmienna 'liczba' ze wzoru '' liczba = ((i % 5) + 1) ''. Takie losowanie liczby z zakresu od 1 do 6 :)
Schemat podłączenia diod jest następujący:
Obrazek
Problem to brak reakcji na przycisk i wyświetlanie losowo liczb na kostce.
Wie ktoś może dlaczego tak się dzieje?
Z góry dziękuję za zainteresowanie tematem.

Pozdrawiam: Piter3132!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2015, o 21:34 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Piter3132 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Brakuje ustawienia 1 na PB3 i pull-up raczej używałbym tylko w odniesieniu do wejść, a w przypadku wyjść ustawienie.
Piter3132 napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Bardzo to jest brzydkie, bo nic nie mówi i źle działa, bo wyłącza pull-up przyciskowi. Popraw sobie na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2015, o 22:06 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Dziękuję za pokazanie błędów.
Nie wiem jak mogłem zrobić coś tak głupiego z tym wyłączaniem ledów :D
Układ teraz bardzo ładnie robi co ma robić :)

Jeszcze raz dziękuje i obiecuje poprawę ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2015, o 02:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Z ciekawości złożyłem powyższy układ na stykówce i znalazłem jeszcze jeden błąd. Mianowicie nigdy nie uda się wylosować liczby o 6 oczkach.

Po zmianie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

działa jak trzeba.

Poniżej moja wersja troszkę przerobiona, z użyciem switch zamiast if'ów.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2015, o 17:26 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Zrobiłem dokładnie to samo 5 minut po odkryciu błędów przez użytkownika Krauzer :) ale dzięki za chęć pomocy ;)

Ostateczny kod wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kod zajmuje 40% pamięci FLASH i 3,1% RAM'u tego małego klocka :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2015, o 17:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

No to super, że sobie tak świetnie poradziłeś. Sprawdziłem na swoim kodzie i wygląda to tak:

AVR Memory Usage
----------------
Device: attiny13

Program: 330 bytes (32.2% Full)
(.text + .data + .bootloader)

Data: 2 bytes (3.1% Full)
(.data + .bss + .noinit)

Oczywiście dla Attiny13.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2015, o 18:18 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Pewnie u ciebie zajmuje mniej bo zrobiłeś funkcję przywolywana po wyswietleniu liczby, a ja za kazdym razem używam delaya.
Zastosuję twoje rozwiązanie, trzeba się uczyć oszczędzania pamięci w prockach :D
Widzę, że mój pomysł z kostką się spodobał :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 11:48 

Pomógł: 0

Challenge accepted :mrgreen:

Kod:
Device: attiny13

Program:     202 bytes (19.7% Full)
(.text + .data + .bootloader)

Data:          1 bytes (1.6% Full)
(.data + .bss + .noinit)


Kto da mniej ;> bo jeszcze jest potencjał :twisted:

(testowane w układzie na kolanie, ale wygląda na to, że działa ok)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 12:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Niezle!

A moze tak:

Device: attiny13

Program: 184 bytes (18.0% Full)
(.text + .data + .bootloader)

Data: 1 bytes (1.6% Full)
(.data + .bss + .noinit)

Bedzie dzialac?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 16:12 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 05 sty 2015
Posty: 10
Pomógł: 0

Ale was to wzięło :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 16:33 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Wyścig o jak najmniejszy kod jest zabawny i pouczający ale proponuję zastanowić się nad czymś bardziej użytecznym ;-) Mianowicie nad zrezygnowaniem z pstryczka zasilania i utrzymywaniem procka w stanie uśpienia między losowaniami. Przyciśnięcie batona wybudza procek i losuje liczbę, który po wyświetleniu znów przechodzi w stan uśpienia.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 17:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

I dodatkowo wszystko proszę napisać w asemblerze w ramach nauki :)

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2015, o 17:27 

Pomógł: 0

@anshar niestety - żeby działało z PROGMEM trzeba by odczytywać tablicę poprzez jakieś pgm_read... czy coś w tym stylu. Tak jak wrzuciłeś nie działa. Dodatkowo w opóźnieniu brakuje zerowania "j". Po zmianach:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język bash
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli i tak lepiej o 2B :D

@mokrowski - dla Ciebie zawsze ;d Część z proponowanych przez Ciebie zmian wymyśliłem już wcześniej (chociaż teraz pewnie nikt mi nie uwierzy). Tych na które nie wpadłem - nie śmiem sobie przypisywać. Tak czy siak: podbijam stawkę :D Kilka "dziwacznych" pomysłów:

1. wrzucenie zmiennej "i" do sekcji ".noinit" i ręczne wyzerowanie na początku main - w efekcie wylatuje kod startowy odpowiedzialny za zerowanie sekcji .bss -> z 202B flash'a (jako punkt wyjścia przyjąłem mój poprzedni kod) robi się 190B

2. własna tablica wektorów (dorzucone "-nostartfiles" do opcji linkera) - skrócona tylko do TIM0_COMP, bez funkcji "bad interrupt" -> z 190B robi się 176B

3. zmiana koncepcji: zmienna "i" przypisana do rejestru: 166B flash (0B sram)

Kod z powyższymi zmianami (zmieniłem nazwę zmiennej z "i" na dużo mówiące "zmienna" - "i" za mało rzucało się w oczy):

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--------

4 - zupełna zmiana koncepcji - wyrzucenie przerwania od timera i wszystkiego co związane z przerwaniem licznika i przerwaniami ogólnie :)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Efekt:
Składnia: [ Pobierz ] [ Ukryj ]
język bash
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kostka działa. Ponawiam pytanie - kto da mniej :mrgreen:



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 01:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


:D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 11:28 

Pomógł: 0

mokrowski napisał(a):
Kto da mniej :-) ?
Kolego mokrowski - kod nie zaliczony ;P TOP dla trybu CTC ustawiony na 9, TCNT nigdy nie doliczy do "wait_to". Obserwacje potwierdzone empirycznie - kostka wymaga resetu po użyciu :)

Kolega anshar i tak zniszczył system ;] Brawo!

Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Przy czym mam wrażenie, że po wyrzuceniu attrybutów funkcji main (w szczególności "naked") wyniki "rzutu kostką" są bardziej losowe. Wiąże się to z małym wzrostem objętości kodu - 2B. W ogóle w pierwszej chwili zdurniałem jak odpaliłem ten program - "gaszenie" wylosowanej cyfry odbywa się w iście szatański sposób :D Btw. jak ocenić losowość wyników :) ?

Dodano:

Ten mikroprogram nie korzysta ze stosu - można wywalić ustawienie wierzchołka - 4B do przodu ;)

Kolega xor zwrócił uwagę na problem zużycia energii. Jeśli dozwolone są zmiany sprzętowe to proponuję przełożyć "baton losujący" na pin reset. Po resecie losowanie i wyświetlenie wartości, potem uśpienie procka na czas ~1,5s. Wybudzenie np. watchdogiem. W przerwaniu od wdt zgaszenie ledów i powerdown mikrokontrolera. Niestety trzeba wtedy opracować inny random generator.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 19:03 

Pomógł: 0

@mokrowski - Twoja kostka jest dosyć "szulerska" :lol: Po resecie programu pętla for trwa za krótko żeby dało się "losowo" wstrzelić z przyciskiem. Dalej program czeka w pętli while(1) - 99% wciśnięć przycisku będzie w czasie oczekiwania w while - więc wynik losowania zawsze będzie ten sam. Dodatkowo przez te ~2s stan przycisku nie jest sprawdzany - trzeba go dłużej trzymać. Poza tym działa ok :) Pisanie "na sucho" (bez możliwości sprawdzenia z hardware'em) zdecydowanie jest złem!
Pozwoliłem sobie troszkę przerobić, żeby usunąć w/w problemy, powstało toto (52B):

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Konfiguracja wdt wrzucona w pętlę while żeby czas wyświetlania wylosowanej wartości był stały - nie jest to może "książkowy" sposób kasowania wdt... ale jeśli coś jest głupie i działa to nie jest głupie :mrgreen:

mokrowski napisał(a):
Jeśli się uda, proszę o jeszcze mniej
A proszę bardzo: kto powiedział, że r1 i SREG muszą być zerowane :roll: R1 nigdzie jest jest używany... Co do flag w sreg... cóż... program działa.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język bash
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


--------------------

Pomysł z podłączeniem przycisku do resetu dotyczył głównie postu kolegi xor o oszczędzaniu energii. Ale "power-saving" to raczej osobny challenge.
Też myślałem o ADC, tylko nie byłem przekonany czy się nie naładują jakie pojemności wejściowe ADC i nici z losowości.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 19:12 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

wwojtek napisał(a):
mam wrażenie, że po wyrzuceniu attrybutów funkcji main (w szczególności "naked") wyniki "rzutu kostką" są bardziej losowe.

Mi się zdaje, że w ogóle losowość dostaje trochę po nosie: wduszenie batona w dowolnym momencie między klamrą zamykającą pętlę a rozpoczęciem pętli zawsze da zero, nieprawdaż?

Co do powerdowna, ja to bym widział tak (chociaż nie wiem czy zadziała to tak jak myślę - jeszcze się czymś takim nie bawiłem :-)): wciśnięcie batona losującego budzi procek przez przerwanie PCINT albo INT0 (w tym wypadku trzeba przenieść baton na inny pin - PB1 OIDP. W obu przypadkach trzeba by podłączyć zewnętrzny pull-up). Losowanie w momencie puszczenia batona, a więc wynik funkcji losującej zależy od długości trzymania batona (chyba jest to wystarczająco losowe?). Delay odmierza czas wyświetlania (paskudny ale procek i tak nie ma nic innego do roboty), potem skok na początek pętli i ponowne uśpienie. Konieczne zmiany w hardware: oprócz przeniesienia batona i dodania rezystora, trzeba "obrócić" diody (anody-pin, katody do GND)

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 19:49 

Pomógł: 0

Masz rację, zero ma większe prawdopodobieństwo wylosowania :) Co do powersavingu: zamiast delaya proponuję ustawienie jakiegoś timera/wdt i uśpienie procka.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 20:15 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

wwojtek napisał(a):
Masz rację, zero ma większe prawdopodobieństwo wylosowania

Daję słowo, że jeszcze pisałem swój post gdy wytknąłeś to mokrowskiemu :lol:

wwojtek napisał(a):
zamiast delaya proponuję ustawienie jakiegoś timera/wdt i uśpienie procka.

Nie bardzo się da, bo w powerdown piny są utrzymywane w stanie LOW (dlatego właśnie mówiłem o zmianie polaryzacji diod). Przynajmniej tak zrozumiałem z dataszita.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 21:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2014
Posty: 446
Lokalizacja: DKL
Pomógł: 53

@mokrowski, tutaj wizualizacja, twoich założeń ;)

_________________
Migracja z punktu B do punktu C
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 sty 2015, o 23:05 

Pomógł: 0

@xor - no to chociaż Idle można zaaplikować - zawsze coś.
@mokrowski - hm nie powiem ten pomysł z czujnikiem drgań korci. Muszę się z tym "przespać" ;) Przyjemnym ficzerem byłoby "zupełnie przypadkowe wyrzucanie szóstki po wykryciu 'ręki Pana-stworzyciela'" :D

Swoją drogą - ponowię pytanie o ocenę "losowości" - można jakoś matematycznie ocenić losowość wyników? Wydaje mi się że nie bardzo, ale może się mylę?



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 10:20 

Pomógł: 0

Hehe, nie o paranoję tu chodzi :D Z ciekawości pytam. Bo złapałem się na tym, że "intuicyjnie" czułem, że jeśli elektroniczna-kostka np. 3 razy pod rząd wylosuje taką samą liczbę - to coś jest nie tak. Ale przecież prawdopodobieństwo wyrzucenia konkretnej wartości jest stałe (zakładam, że kostka działa i żadne zera nie są uprzywilejowane) - nie zależne od tego, co wypadło wcześniej. Więc wyniki 1-1-1 są "równie losowe" jak 1-2-3, 3-6-1 itd...

Hm stały rozkład powiadasz. Obawiam się, że nasza kostka miały by jakiś bardziej wykładniczy - zorientowany na zero jak zauważył kolega xor ;d Dlatego tez pozwolę sobie wrzucić jeszcze jeden wsad do kostki (ostatni - obiecuję!) - wydaje mi się, że pozbawiony tej wady.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jest tu jeszcze jedna mała sztuczka - ustawienie preskalera TIM0 jest tak dobrane, aby do TCCR0B była wpisywana liczba 5. Linijkę wyżej też jest wykorzystywana piątka. Dzięki temu stała "5" jest tylko raz ładowana do rejestru - a kod jest o 2B krótszy :) Całość zajmuje 50B.

Sekwencja potrząśnięć, może jakieś gwizdnięcie przy rzucaniu, chuchnięcie na szczęście, dotknięcie w odpowiednim miejscu czy inny niewinny gest rodem z filmu Ocean's Thirteen.

Dziękuję za podrzucenie lektury :)

ACHTUNG! W programie jest mały bug (dotyczy też kilku poprzednich wersji moich i kolegi mokrowskiego), co słusznie zauważył kolega xor - zainteresowanych uprasza się o doczytanie wątku do końca ;)



Ostatnio edytowano 28 sty 2015, o 17:30 przez wwojtek, łącznie edytowano 1 raz

Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 10:40 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

wwojtek napisał(a):
PORTB = port_val[TCNT0];

Tu chyba brakuje pgm_read_byte?

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 11:01 

Pomógł: 0

Gdyby port_val[] było zdefiniowane z PROGMEM to owszem - konieczne byłoby użycie pgm_read_byte. Na szczęście (?) developerzy avr-gcc zakasali rękawy i wzięli się za te nieszczęsne przestrzenie adresowe. Użycie __flash zamiast PROGMEM załatwia sprawę makr pgm_read_xxx.

Do poczytania: klik



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 11:29 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Czyli teraz ze stałymi we FLASH można stosować normalne operatory? To wspaniała wiadomość! Szkoda, że nic o tym nie ma w dokumentacji avr-libc (no dobra, rozumiem, że to jest ficzer gcc nie mający nic wspólnego z gcc). To oczywiście działa w toolchainie atmelowskim?

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 11:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Wyglada na to, ze dziala chociaz pokazuje warninga.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 14:04 

Pomógł: 0

Warninga pokazuje kompilator czy analizator kodu w Eclipse ;> ?

U mnie eclipse warczy, że __flash to syntax error, a stała zadeklarowana w ten sposób "could not be roselved". Bidulek nie wie jak to ugryźć ;) Na szczęście kompilator nie ma oporów (gcc 4.8.2).

Ficzer pojawił się w gcc od wersji 4.7, wcześniej był do tego jakiś patch z tego co się orientuję. Nie wiem na której wersji jest oparty oficjalny atmelowy toolchain. Mam zainstalowanego linuksa i w sumie nie wiem skąd ubunciak pobrał avr-gcc. Póki wszystko działa to mi to zwisa ;) Najłatwiej (i najfajniej) - potestować sobie :)



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 14:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

No tak masz rację, analizator kodu w Eclipsie!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 15:57 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Działa (gcc 4.7.2) :-)
...chociaż wywala syntax error
...i nie mogę go wyłączyć :-/

Jeszcze mała uwaga do programu na zakończenie: funkcja main bez atrybutów jest w hexie wstawiana za tablicą. To chyba może być problem ;-)

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 17:53 

Pomógł: 0

Wow! Ale kolega wypatrzył bug'a :) Dopisałem ostrzeżenie przy ostatniej wersji programu.

Faktycznie - musi być __attribute__((section (".vectors") )) żeby main lądował na początku pamięci. Swoją drogą, ciekawe co za rozkazy kryją się "w tablicy", trzeba będzie sprawdzić ;d

Przy okazji - w 84r. kod wykorzystujący analogiczny mechanizm wygrał konkurs IOCCC (link do programu mullender.c)

(dodano po chwili) Jakby kogoś interesowało to tablica port_val zinterpretowano jako kod programu, przedstawia się następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 48 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO