近日做射频系统,一个简单的MCU系统,程序全部用C语言设计,开发环境为盗版的Keil,用到定时器定义一个60秒的时间时,如此定义: uint16 time; //16位变量 /*初始化 */ time = 60*1000/TMRCYC //TMRCYC=5,定时器中断间隔为5ms //time总时间60s 实际运行时,60s定时总是感觉不到,也就是说60s根本就没定义成功。 理论上讲,time =12000,比16位最大值65535小,应该没问题,但实际就是不行,以前没怎么用过Keil,所以也没注意这个问题,是否其他编译器也有这个问题不得而知,最后,定义改为: time = 60*1000L/TMRCYC //常量1000后加L 问题解决。 但仍未完全明白其中道理,难道是编译器的问题,在此抛砖引玉,鄙人虽说也有几年程序经验,但哎,偏偏这么一个看似基础性的东西却不懂, 希望有大虾们解释下,可能对你们来说问题很简单,但不懂或没有遇见的小菜们却是有千千万万,你们就权当做好事了。
|