|
不同的功能函數(shù)可以單獨(dú)定義一套自己的計(jì)時(shí)時(shí)基變量(通常是1ms)、調(diào)用標(biāo)志、內(nèi)部子步驟執(zhí)行號(hào)(step)等等。其中把時(shí)基變量放進(jìn)定時(shí)器里面累加或遞減,一些你想要共享給外部調(diào)用數(shù)據(jù)可以定義成全局變量、方便獨(dú)立調(diào)試排除問(wèn)題。 以下是我常用的程序框架 (這里隨便放了一段)
void Demon_B(void) {
if(lgRunTime_B <cTimes_B) return; //定時(shí)時(shí)間未到 return不往下執(zhí)行。
{
lgRunTime_B = 0; //定時(shí)時(shí)間清0
if(FLAG_B & SET_Flow1){ //需要演示的標(biāo)志立起?
if(cgStep_B==0){ //步驟0
//執(zhí)行代碼
cTimes_B = 10; //延時(shí)10ms
}else if(cgStep_B==1){ //步驟1
//執(zhí)行代碼
cTimes_B = 1000;//延時(shí)1000ms
} else{;}
if(++cgStep_B>5) cgStep_B = 0; //步驟號(hào)大于5
}}}
按照這樣思路創(chuàng)建不同功能的ABCD函數(shù)(名字懶得取-_-),每個(gè)函數(shù)有自己的獨(dú)立延時(shí)而不會(huì)引起干擾動(dòng)作。執(zhí)行步驟號(hào)中也可以塞入一些帶返回值函數(shù)、其他功能的全局變量、標(biāo)志什么的 if 判斷一下,不符合就簡(jiǎn)單粗暴的return掉,前提是你自己的邏輯思路要清晰,原則上應(yīng)盡量減少函數(shù)之間的耦合以提高效率。最后主調(diào)函中用 FLAG_B 標(biāo)志調(diào)用或關(guān)閉它們,很方便靈活。 |
|