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