2462|2

76

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

水贴之SOC开发中volatile限定词与编译器的优化!!!! [复制链接]

 最近上手nios软核处理器,入门自然少不了流水灯,开始按照“NIOS2那些事儿”写的流水灯程序,但是然后函数是自己写的,结果所有等都是一直长亮,死活不能流水。

代码如下:




/*

* main.c

*

*  Created on: 2015-4-14

*      Author: meicai

*/

#include "../inc/sopc.h"

#include "system.h"



void delay(void);





int main(void){





        while(1){



                LED->DATA =0x01;



                delay();



                LED->DATA =0x02;



                delay();



        }

        return 0;

}



void delay(void)

{

        int i;



        for(i = 0; i < 400000; i++ );



}




后来发现是delay函数中的变量 i 被编译器优化掉了,甚是郁闷,通过观察其他人的代码发现在变量声明的时候都会加上volatile,我也效仿了一下,在delay函数中声明变量 volatile int i;嘿,果然就好了。后来翻书找到了volatile的解释。如下:

voaltile用于强制某个实现屏蔽可能的优化。



另外要注意的一点是,我使用的开发板上led灯灯饰阳极接电源,引脚拉低点亮,然而移位操作是用0补的,这就导致所有led灯都会一直亮。












此帖出自Altera SoC论坛

最新回复

有时觉得很无奈的,编译器自己帮忙优化,结果越帮越忙...  详情 回复 发表于 2015-4-17 13:12
点赞 关注
 
 

回复
举报

421

帖子

1

TA的资源

一粒金砂(高级)

沙发
 
有时觉得很无奈的,编译器自己帮忙优化,结果越帮越忙...
此帖出自Altera SoC论坛

点评

是啊,现在每次定义变量都直接上volatile了,反正加了肯定没事!  详情 回复 发表于 2015-4-20 19:08
个人签名君应有语,渺万里层云,千山暮雪,知向谁边?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
我的学号 发表于 2015-4-17 13:12
有时觉得很无奈的,编译器自己帮忙优化,结果越帮越忙...

是啊,现在每次定义变量都直接上volatile了,反正加了肯定没事!
此帖出自Altera SoC论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表