查看: 1928|回复: 1

ATmega168 Xplained Mini 额一点点问题 volatile

[复制链接]
  • TA的每日心情
    慵懒
    2014-7-28 10:46
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-5-29 18:59:33 | 显示全部楼层 |阅读模式
    分享到:
    可能自己的c语言学的不过关0.0
    今天才知道编译优化这一说法,额 其实呢是这样的
    在点亮led后按51的想法应该是进入流水灯的程序
    经过尝试后发现
    #include <avr/io.h>

    void delay();

    int main(void)
    {
        while(1)
        {
            //TODO:: Please write your application code
                    //unsigned int i,j;
                    DDRD = 0xff;
                    PORTD = 0x0f;
                    delay();

                    PORTD = 0xf0;
                    delay();
                   
        }
    }

    void delay()
    {
            unsigned int i;
            for(i=65535;i>0;i--);
    }

    这样的程序居然没有效果,额也不是没有效果,就是灯不闪,8个全亮,只是亮度略低
    而如果全部写在主函数里就不会这样而是一闪一闪的

    #include <avr/io.h>

    //void delay();

    int main(void)
    {
        while(1)
        {
            //TODO:: Please write your application code
                    unsigned int i;
                    DDRD = 0xff;
                    PORTD = 0x0f;
                    for(i=65535;i>0;i--);

                    PORTD = 0xf0;
                    for(i=65535;i>0;i--);
                   
        }
    }

    void delay()
    {
            volatile unsigned int i;
            for(i=65535;i>0;i--);
    }


    像这样则可以正常运行,百思不得其解0.0,今天偶然间看到了有关这个的问题0.0额可能我看过太少了。。。

    这个是编译器的一个编译优化的功能。。。。
    #include <avr/io.h>

    void delay();

    int main(void)
    {
        while(1)
        {
            //TODO:: Please write your application code
                    //unsigned int i,j;
                    DDRD = 0xff;
                    PORTD = 0x0f;
                    delay();

                    PORTD = 0xf0;
                    delay();
                   
        }
    }

    void delay()
    {
            volatile unsigned int i;
            for(i=65535;i>0;i--);
    }


    把程序像这样写告诉编译i不需要优化就好了这样

    volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
    这个是百度上的解释  
    额  写出来呢也为了像我一样的新手  长姿势 额貌似可能我是最新的吧0.0
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-7-28 10:46
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

     楼主| 发表于 2014-5-29 19:03:26 | 显示全部楼层
    奋斗ing     这个也算是成长日记了   不知道叁伍年后回头再来看看这些当年写的东西是什么心情0.0   继续玩去了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 07:20 , Processed in 0.110334 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.