logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odzysk kodu z atmega16 i kompilacja

adass 20 Cze 2009 09:24 1715 8
  • #1 6679429
    adass
    Poziom 25  
    Mam XP sp2 i plik c którego nie mogę skompilować w studio4 ver4.14.589 w kompilatorze GCC brakuje chyba biblioteki co jest nie tak ...
    Czy da się skompilować ten kod obojętnie jakim kompilatorem ?.
    Proszę o pomoc.

    #include <avr/io.h> 
    #define F_CPU 4000000UL
    #include <util/delay.h> 
    
    #define Rs0 PORTA &= ~0x20; 
    #define Rs1 PORTA |= 0x20; 
    #define Rw0 PORTA &= ~0x40; 
    #define Rw1 PORTA |= 0x40; 
    #define E0 PORTA &= ~0x80; 
    #define E1 PORTA |= 0x80; 
    
    void Nout(unsigned char _d) 
    { 
        E1; 
        if(_d & 0x01) PORTC |= 0x10 ; else PORTC &= ~0x10; 
        if(_d & 0x02) PORTC |= 0x20 ; else PORTC &= ~0x20; 
        if(_d & 0x04) PORTC |= 0x40 ; else PORTC &= ~0x40; 
        if(_d & 0x08) PORTC |= 0x80 ; else PORTC &= ~0x80; 
        E0; 
        _delay_us(100); 
    } 
    
    void Dout(unsigned char _d) 
    { 
        E1; 
        if(_d & 0x10) PORTC |= 0x10 ; else PORTC &= ~0x10; 
        if(_d & 0x20) PORTC |= 0x20 ; else PORTC &= ~0x20; 
        if(_d & 0x40) PORTC |= 0x40 ; else PORTC &= ~0x40; 
        if(_d & 0x80) PORTC |= 0x80 ; else PORTC &= ~0x80; 
        E0; _delay_us(100); E1; 
        if(_d & 0x01) PORTC |= 0x10 ; else PORTC &= ~0x10; 
        if(_d & 0x02) PORTC |= 0x20 ; else PORTC &= ~0x20; 
        if(_d & 0x04) PORTC |= 0x40 ; else PORTC &= ~0x40; 
        if(_d & 0x08) PORTC |= 0x80 ; else PORTC &= ~0x80; 
        E0; _delay_us(100); 
    } 
    
    void Hd44780init(void) 
    { 
        Rs0 ; Rw0 ; E0 ; _delay_ms(100); 
        Nout(0x02); 
        Dout(0x28); 
        Dout(0x0c); 
        Dout(0x06); 
        Dout(0x01); 
        Dout(0x02); 
        _delay_ms(100); 
        Dout(0x86); 
        Rs1; 
        Dout(                                                       'K'); 
        Dout(                                                       'O'); 
        Dout(                                                       'N'); 
        Dout(                                                       'I'); 
        Dout(                                                       'E'); 
        Dout(                                                       'C'); 
        Dout(                                                       ' '); 
        Dout(                                                       'D'); 
        Dout(                                                       'A'); 
        Dout(                                                       'R'); 
        Dout(                                                       'M'); 
        Dout(                                                       'O'); 
        Dout(                                                       'W'); 
        Dout(                                                       'Y'); 
        Dout(                                                       'C'); 
        Dout(                                                       'H'); 
        Rs0 ; Dout(0xc0) ; Rs1; 
        Dout(                                                       'K'); 
        Dout(                                                       'O'); 
        Dout(                                                       'D'); 
        Dout(                                                       'O'); 
        Dout(                                                       'W'); 
        Dout(                                                       '!'); 
        Dout(                                                       '!'); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        Rs0 ; Dout(0xc0) ; Rs1; 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       ' '); 
        Dout(                                                       '!'); 
        Dout(                                                       '!'); 
        Dout(                                                       'W'); 
        Dout(                                                       'O'); 
        Dout(                                                       'D'); 
        Dout(                                                       'O'); 
        Dout(                                                       'K'); 
        Rs0 ; Dout(0x80) ; Rs1; 
        Dout(                                                       'H'); 
        Dout(                                                       'C'); 
        Dout(                                                       'Y'); 
        Dout(                                                       'W'); 
        Dout(                                                       'O'); 
        Dout(                                                       'M'); 
        Dout(                                                       'R'); 
        Dout(                                                       'A'); 
        Dout(                                                       'D'); 
        Dout(                                                       ' '); 
        Dout(                                                       'C'); 
        Dout(                                                       'E'); 
        Dout(                                                       'I'); 
        Dout(                                                       'N'); 
        Dout(                                                       'O'); 
        Dout(                                                       'K'); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
        _delay_ms(250); 
    } 
    
    int main(void) 
    { 
        PORTA = 0x10; 
        DDRA = 0xf0; 
    
        PORTB = 0x00; 
        DDRB = 0x00; 
    
        PORTC = 0x00; 
        DDRC = 0xff; 
    
        PORTD = 0x00; 
        DDRD = 0x00; 
    
        TCCR0 = 0x00; 
        TCNT0 = 0x00; 
        OCR0 = 0x00; 
    
        TCCR1A = 0x00; 
        TCCR1B = 0x00; 
        TCNT1H = 0x00; 
        TCNT1L = 0x00; 
        ICR1H = 0x00; 
        ICR1L = 0x00; 
        OCR1AH = 0x00; 
        OCR1AL = 0x00; 
        OCR1BH = 0x00; 
        OCR1BL = 0x00; 
    
        ASSR = 0x00; 
        TCCR2 = 0x00; 
        TCNT2 = 0x00; 
        OCR2 = 0x00; 
    
        MCUCR = 0x00; 
        MCUCSR = 0x00; 
    
        TIMSK = 0x00; 
    
        ACSR = 0x80; 
        SFIOR = 0x00; 
        Hd44780init(); 
        while(1) 
        { 
            PORTA ^= 0x10; 
            _delay_ms(500); 
            Rs1; 
            Dout(                                                       'K'); 
            Dout(                                                       'O'); 
            Dout(                                                       'N'); 
            Dout(                                                       'I'); 
            Dout(                                                       'E'); 
            Dout(                                                       'C'); 
            Dout(                                                       ' '); 
            Dout(                                                       'D'); 
            Dout(                                                       'A'); 
            Dout(                                                       'R'); 
            Dout(                                                       'M'); 
            Dout(                                                       'O'); 
            Dout(                                                       'W'); 
            Dout(                                                       'Y'); 
            Dout(                                                       'C'); 
            Dout(                                                       'H'); 
            Rs0 ; Dout(0xc0) ; Rs1; 
            Dout(                                                       'K'); 
            Dout(                                                       'O'); 
            Dout(                                                       'D'); 
            Dout(                                                       'O'); 
            Dout(                                                       'W'); 
            Dout(                                                       '!'); 
            Dout(                                                       '!'); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            Rs0 ; Dout(0xc0) ; Rs1; 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       ' '); 
            Dout(                                                       '!'); 
            Dout(                                                       '!'); 
            Dout(                                                       'W'); 
            Dout(                                                       'O'); 
            Dout(                                                       'D'); 
            Dout(                                                       'O'); 
            Dout(                                                       'K'); 
            Rs0 ; Dout(0x80) ; Rs1; 
            Dout(                                                       'H'); 
            Dout(                                                       'C'); 
            Dout(                                                       'Y'); 
            Dout(                                                       'W'); 
            Dout(                                                       'O'); 
            Dout(                                                       'M'); 
            Dout(                                                       'R'); 
            Dout(                                                       'A'); 
            Dout(                                                       'D'); 
            Dout(                                                       ' '); 
            Dout(                                                       'C'); 
            Dout(                                                       'E'); 
            Dout(                                                       'I'); 
            Dout(                                                       'N'); 
            Dout(                                                       'O'); 
            Dout(                                                       'K'); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
            _delay_ms(250); 
        }; 
    }
    

    takie błędy wywala :
    Odzysk kodu z atmega16 i kompilacja
    Co do pierwszego pytania to chodzi oto że przypadkowo załadowałem kod do atmega16 zabezpieczonej nie kasując tego który już tam był i procek działa na drugim kodzie ale chodzi mi oto czy można wyciągnąć (odczytać ) ten pierwszy kod . Jak ustawie fusebity tak :
    Odzysk kodu z atmega16 i kompilacja
    to odczytuje pierwszy kod ale z błędami tak jak przy zablokowanym procku. Zależy mi żeby odzyskać pierwszy kod
  • #2 6709423
    arrevalk
    Poziom 25  
    Po 1: Z tego co pamiętam C jest językiem wyczulonym na wielkość liter. Więc zmienna "Porta" to nie to samo co "PORTA" czy "porta". To samo dotyczy słów kluczowych w stylu "if else".
    No i nazwy plików nagłówkowych masz źle. O czym Ci kompilator mówi w błędach.

    Teraz moje pytanie. Czy kiedykolwiek pisałeś coś w C czy po prostu znalazłeś ten kod na jakimś tajemniczym portalu? Bo wygląda on na totalny żart. Chyba że on ma wyświetlać "KONIEC DARMOWYCH KODÓW".

    Jeżeli korzystasz z AVRStudio i WinAVR to załączanie nagłówków z rejestrami wygląda tak:
    #include <avr/io.h>

    a rodzaj procesora zostanie wybrany przez parametr mmcu przekazywany kompilatorowi jeżeli wybierzesz procesor przy tworzeniu projektu. W tym pliku są rejestry zdefiniowane samymi dużymi literami, czyli np. PORTA, DDRA itp.
  • #3 6710691
    Konto nie istnieje
    Poziom 1  
  • #4 6710802
    adass
    Poziom 25  
    Odczytuje kod hex 46,5 kb co był wcześniej wgrany i zabezpieczony ale z błędami (same literki znaczki ) ale po załadowaniu hexa spowrotem do innego procesora nie działa . I chyba nic z tego :cry: chyba żeby jaki dekompilator pomógł ?
  • #5 6710894
    Konto nie istnieje
    Poziom 1  
  • #6 6710905
    maly_elektronik
    Poziom 23  
    Prawdę mówiąc nie wiem czy kompilator rozpozna coś takiego Portx Ddrx bo jak ogólnie wiadomo to rozróżnia on wielkość liter a zapis powinien wyglądać tak PORTx DDRx (x to numer pinu). Podobnie jest z unsigned Char, a powinno być unsigned char :)
  • #8 6711049
    Konto nie istnieje
    Poziom 1  
  • #9 6713630
    adass
    Poziom 25  
    Poprawiłem kod teraz się kompiluje ale program nie działa mi prawidłowo . Powinien wyświetlać text i podświetlanie powinno pulsować 2 razy na sek, a program miesza text czasem znika i podświetlanie miga nie regularnie w długich odstępach . Co jest jeszcze nie tak ?
REKLAMA