打印
[AVR单片机]

【求助】在main函数中调用子函数就会出错。

[复制链接]
1690|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
handy_bupt|  楼主 | 2008-12-9 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我用的是AVR Studio 4.14,编译器用的WinAVR20070525,之前没用过AVR单片机,现在做一个点灯的小程序做测试。却发现,所有的语句都写在main函数中就没有问题,只要是写成单独的子函数,在main函数中调用,就不会出现结果,灯也不会闪,请达人指教!谢谢!
    运行正确的程序如下:
------------------------------------------------------------------
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    unsigned char i=0;
    unsigned char led = 0xfe;
    DDRA = 0x07;
    while(1)
    { 
        PORTA = led;
        for(i=0;i<10;i=i+1)
        {
            _delay_loop_2(50000);
        }

        led <<= 1;
        led |= 0xf1;
        if(led == 0xf7)
        {
            led = 0xfe;
        }
    }
    return 0;
}
------------------------------------------------------------------
写成单独的函数,在main中调用,就出不来结果了
------------------------------------------------------------------
#include <avr/io.h>
#include <util/delay.h>

void my_fun(void);

int main(void)
{
//    unsigned char i=0;
    unsigned char led = 0xfe;
    DDRA = 0x07;
    while(1)
    { 
        PORTA = led;
//      for(i=0;i<10;i=i+1)
//      {
//         _delay_loop_2(50000);
//      }
        my_fun();
        led <<= 1;
        led |= 0xf1;
        if(led == 0xf7)
        {
            led = 0xfe;
        }
    }
    return 0;
}

void my_fun(void)
{
    unsigned char i=0;
    for(i=0;i<10;i=i+1)
    {
        _delay_loop_2(50000);
    }
}
------------------------------------------------------------------
我在网上查了一下,也有一些人出现这种情况,大多是说是优化级、熔丝位设置的问题,但是我将M103C的熔丝位也设置成1,优化级设置成00级,也还是这种情况。不知道怎么回事,为此郁闷了好几天了《《

相关下载

相关帖子

沙发
handy_bupt|  楼主 | 2008-12-9 16:27 | 只看该作者

在main函数中调用子函数就会出错

PORTA的低3位分别接了一个发光二极管,程序是让这三个发光二极管循环闪烁。

使用特权

评论回复
板凳
tiankai001| | 2008-12-13 08:41 | 只看该作者

在main函数中调用子函数就会出错

问题解决了吗,表面看应该没问题
编译的时候提示错误或者警告了吗

使用特权

评论回复
地板
laidaihua| | 2008-12-14 21:36 | 只看该作者

我觉得应该是堆栈设置问题。。

有可能是将编译器的默认堆栈空间设置到了其它地方所致。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

1

粉丝