终于被 volatile “暗算”了一把

前些天调试一个蜂鸣器,该蜂鸣器是用方波驱动,由于硬件工程师将其接在一个普通IO上,只能用IO模拟一个方波来测试

 

板子上跑的是WINCE5的系统,众所周知,在WINCE5中是可以在AP中直接访问物理地址的,于是我用EVC写了一个小的测试代码

 

调用Test_Beep函数时输入不同的freq即可产生不同频率的波形,但是编译下载程序到平台上测试,发现蜂鸣器根本不响,更改了N个freq值也不行。遂拿了一台示波器测试IO,发现输出的频率根本不随freq变化,检查寄存器值是正确的,很令人费解。后来用DEBUG版本编译下载,居然可以!!后与同事讨论,DEBUG版和RELEASE版对代码优化等级不同,感觉问题是出在Loop函数上,于是尝试将Loop函数修改成:

void Loop(volatile UINT32 time)

{

while(time);

}

再次编译下载执行,就可以了!^^

究其原因,是编译器认为Loop函数只是个空循环,当作无用代码直接优化掉了!!

 

通过这次问题的排除,又加深了对volatile修饰符的认识,哟西~~,呵呵

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值