2014-11-05 64 views
1

編輯:我忘記在連接器步驟中添加-mmcu標誌,這意味着我的程序沒有爲avr微控制器編譯。代碼本身是正確的。當初始化移入函數時,attiny261將不起作用

我使用這段代碼驅動七段顯示:

#include <avr/io.h> 

int main(void) 
{ 
    DDRA = 0xff; 
    DDRB = 0xff; 

    for (;;) { 
    PORTA = _BV(7); 
    PORTB = ~0x07; 
    } 

    return 0; 
} 

這工作得很好,但是當我嘗試設置這些DDR在這樣的輔助功能,它不再起作用:

#include <avr/io.h> 

void initIO(void) 
{ 
    DDRA = 0xff; 
    DDRB = 0xff; 
} 

int main(void) 
{ 
    initIO(); 

    for (;;) { 
    PORTA = _BV(7); 
    PORTB = ~0x07; 
    } 

    return 0; 
} 

爲什麼這是不正確的?

這是反彙編代碼:

Disassembly of section .text: 

00000000 <initIO>: 
    0: 8f ef   ldi r24, 0xFF ; 255 
    2: 8a bb   out 0x1a, r24 ; 26 
    4: 87 bb   out 0x17, r24 ; 23 
    6: 08 95   ret 

00000008 <main>: 
    8: fb df   rcall .-10  ; 0x0 <initIO> 
    a: 90 e8   ldi r25, 0x80 ; 128 
    c: 88 ef   ldi r24, 0xF8 ; 248 
    e: 9b bb   out 0x1b, r25 ; 27 
    10: 88 bb   out 0x18, r24 ; 24 
    12: fd cf   rjmp .-6   ; 0xe <main+0x6> 
+0

這聽起來不對;發佈'initIO()'和'main()'的反彙編。 – 2014-11-05 06:54:59

+0

除了這個問題,在過去的幾個小時裏,這讓我瘋狂。 – 2014-11-05 07:00:30

+0

這是反彙編對象文件還是最終的二進制文件? – 2014-11-05 07:04:03

回答

2

如果在最後的鏈接步驟中沒有指定所述設備模型然後AVR-GCC不會產生初始化變量和調用main()功能所需的適當的前同步碼。請務必在每次調用avr-gccavr-ld時指定適當的型號。

相關問題