下面的程序很典型~~~全局变量soft_dog_timer 首先不考虑是否合理,若soft_dog_timer是主程序和中断服务程序共有的变量
则建议加volatile修饰全局变量soft_dog_timer
因为全局变量soft_dog_timer是主程序和中断服务程序共有的变量。 uchar可能问题不大,但uint肯定会出数据临界的问题。
若全局变量soft_dog_timer只在某个函数或中断服务程序中使用, 则一个考虑局部变量,若soft_dog_timer要长期生存,则应该考虑
在某个函数或中断服务程序中申请静态的局部变量。
全局变量的最大坏处是在任何地方都可对之修改,故很不安全~~~
所以:A人之恶习---满地的全局变量
例如:(俺对事不对人~~~望Batistuta_谅解之)
Batistuta_ 发表于 2009-1-18 17:50 侃单片机 ←返回版面 举报该贴
#define SOFT_DOG_TIME XX // xx小于硬件狗溢出时间的一半 bit flg_soft_dog=0; uchar soft_dog_timer=0; main() { ... while(1) { ... //----------------- flg_soft_dog = 0; //----------------- ... } }
time_interrupt() //通用定时器 { ... //-------------------------- soft_dog_timer++; if(soft_dog_timer>=SOFT_DOG_TIME) { soft_dog_timer = 0; } if(flg_soft_dog) { soft_reset(); //软件复位 } else { flg_soft_dog = 1; } //-------------------------- ... }
http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=3213530
|
用户1415597 2009-1-22 16:49