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>
這聽起來不對;發佈'initIO()'和'main()'的反彙編。 – 2014-11-05 06:54:59
除了這個問題,在過去的幾個小時裏,這讓我瘋狂。 – 2014-11-05 07:00:30
這是反彙編對象文件還是最終的二進制文件? – 2014-11-05 07:04:03