亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? schedule._c

?? avr單片機ATMega16對三相異步電機的智能控制源碼
?? _C
字號:

///////////////////////////////////////////////////////////////
/**************************************************************

	公司名稱:	 揚州恒博科技
	模塊名	:	 點動型STQ執行機構主控程序 
	創建人	:	 章儉文                                         
	日期	:	 2008/08/19	                                         
	功能描述:   完成對本地旋鈕和遠程開關量的控制功能                                
	其它說明:   編譯環境為ICCAVR V6.31A                                            
	版本	:	 V1.0

**************************************************************/
///////////////////////////////////////////////////////////////

#define SCHEDULE_GLOBAL
#include "schedule.h"


static void SCH_Updata(void);


// 在任一時刻要求的任務最大數目
#define SCH_MAX_TASKS (3)

// 任務隊列
sTask SCH_tasks_G[SCH_MAX_TASKS];

// 錯誤代碼
#define ERROR_SCH_TOO_MANY_TASKS (1)
#define ERROR_SCH_CANNOT_DELETE_TASK (2)

#define RETURN_NORMAL 0
#define RETURN_ERROR 1




/*---------------------------------------------------------*-
 * 函數名稱: SCH_Dispatch_Tasks()
 * 入	 口: 
 * 出	 口:
 * 函數功能: 調度函數,當一個任務()需要運行時,此函數將運行它,
 * 
 * 說	 明: 這個函數必須被主循環(重復)調用 
-*---------------------------------------------------------*/

void SCH_Dispatch_Tasks(void)
{
	unsigned char Index;

	// 調度(運行)下一個任務(如果有任務就緒)
	for (Index=0; Index<SCH_MAX_TASKS; Index++)
	{
		if (SCH_tasks_G[Index].RunMe > 0)
		{
			// 運行任務
			(*SCH_tasks_G[Index].pTask)();
			
			// 復位 / 降低RunMe標志
			SCH_tasks_G[Index].RunMe -= 1;
			
			// 如果這個是'單次'任務,將它從隊列中刪除
			if (SCH_tasks_G[Index].Period == 0)
			{
				SCH_Delete_Task(Index);
			}
		}
	}
}



/*---------------------------------------------------------*-
 * 函數名稱: SCH_Add_Task()
 * 入	 口: (*pFunction)任務指針,(DELAY)到第一次運行間隔時標,
 * 			 (PERIOD)每次運行的間隔時標
 *
 * 出	 口: 返回SCH_MAX_TASKS表示任務隊列已滿
 *			 返回(Index)=任務位置
 *
 * 函數功能: 用來添加任務到任務隊列上,以保證它們在需要的時
 * 			 候被調用
 * 
 * 說	 明: 使任務函數每隔一定間隔或在用戶的延遲之后執行.
-*---------------------------------------------------------*/

unsigned char SCH_Add_Task(void (*pFunction)(),	// 任務指針
							const unsigned int DELAY,	// 延遲Delay個時標后函數將第一次運行
							const unsigned int PERIOD)  // 連續的運行之間的間隔(時標)
{
	unsigned char Index = 0;	// 首先在隊列中找到一個空隙

	while ((SCH_tasks_G[Index].pTask != 0) && (Index < SCH_MAX_TASKS))
	{
		Index++;	
	}
	if (Index == SCH_MAX_TASKS)
	{
		return SCH_MAX_TASKS;  // 同時返回錯誤代碼
	}

	// 如果能運行到這里,則說明任務隊列中有空間
	SCH_tasks_G[Index].pTask = pFunction;
	SCH_tasks_G[Index].Delay = DELAY;
	SCH_tasks_G[Index].Period = PERIOD;
	SCH_tasks_G[Index].RunMe = 0;
	return Index;		// 返回任務的位置(以便以后刪除)

}



/*---------------------------------------------------------*-
 * 函數名稱: SCH_Delete_Task()
 * 入	 口: TASK_INDEX -任務索引.由SCH_Add_task()提供
 * 
 * 出	 口: 返回值: RETURN_ERROR(或)RETURN_NORMAL
 *		
 * 函數功能: 從調度器刪除任務.
 * 
 * 說	 明: 請注意:并不是從存儲器中刪除相關的函數,僅僅是不再
 * 			 由調度器調用這個任務.
-*---------------------------------------------------------*/

uchar SCH_Delete_Task(const unsigned char TASK_INDEX)
{
	uchar Return_code;		//返回錯誤代碼

	if (SCH_tasks_G[TASK_INDEX].pTask == 0)
	{	
		Return_code = RETURN_ERROR;	  
	}
	else
	{
		Return_code = RETURN_NORMAL;
	}

	// 刪除任務
	SCH_tasks_G[TASK_INDEX].pTask = 0x00;
	SCH_tasks_G[TASK_INDEX].Delay = 0;
	SCH_tasks_G[TASK_INDEX].Period = 0;
	SCH_tasks_G[TASK_INDEX].RunMe = 0;

	return Return_code;
}


/*---------------------------------------------------------*-
 * 函數名稱: SCH_Update()
 * 入	 口: 
 * 出	 口:
 * 函數功能: 在調度器的中斷服務程序中運行
 * 
 * 說	 明: "刷新"函數,確定某個任務需要運行時,將這個任務的
 * 			 RunMe標志加1,然后該任務將由調度程序執行.
-*---------------------------------------------------------*/

static void SCH_Updata(void)
{
	unsigned char Index;
	for (Index=0; Index < SCH_MAX_TASKS; Index++)
	{
		// 檢測這里是否有任務?
		if (SCH_tasks_G[Index].pTask != 0)
		{
			if (SCH_tasks_G[Index].Delay == 0)
			{
				SCH_tasks_G[Index].RunMe += 1;	// RunMer標志加1
				if (SCH_tasks_G[Index].Period != 0)
				{
					// 調度定期的任務再次運行
					SCH_tasks_G[Index].Delay = SCH_tasks_G[Index].Period;	
				}
			}
			else
			{
				// 還沒有準備好運行,延遲減1
				SCH_tasks_G[Index].Delay -= 1;		
			}
		}	
	}
}


/*---------------------------------------------------------*-
 * 函數名稱: SCH_Init_Timer2()
 * 入	 口: 
 * 出	 口:
 * 函數功能: 準備調度器數據結構并且設置定時器以所需的頻率中斷
 * 
 * 說	 明: 調度器初始化化函數,必須在使用調度器之前調用它
-*---------------------------------------------------------*/
void  InitTimer1(void)			//8MHz,10ms,64分頻
{
 uchar i;
	
 for (i=0; i<SCH_MAX_TASKS; i++)
 {
  SCH_Delete_Task(i);
 }

 TCCR1B = 0x00; //stop
 TCNT1H = 0xFB; //setup
 TCNT1L = 0x1E;
 OCR1AH = 0x04;
 OCR1AL = 0xE2;
 OCR1BH = 0x04;
 OCR1BL = 0xE2;
 ICR1H  = 0x04;
 ICR1L  = 0xE2;
 TCCR1A = 0x00;
 TCCR1B = 0x03; //start Timer
} 


/*---------------------------------------------------------*-
 * 函數名稱: SCH_Update_Server()
 * 入	 口: 
 * 出	 口:
 * 函數功能: 調度器的中斷服務程序
 * 
 * 說	 明: "刷新"函數,確定某個任務需要運行時,將這個任務的
 * 			 RunMe標志加1,然后該任務將由調度程序執行.
-*---------------------------------------------------------*/
#pragma interrupt_handler SCH_Update_Server:9 //定時器溢出中斷
void SCH_Update_Server(void)
{
  TCNT1H = 0xFB; //reload counter value
  TCNT1L = 0x1E; 
  
  TimeTick++;
  MotorDelayTime++;
  
  
  if(TimeTick%100 == 0)	  //1s喂狗
  {
   if(TimeTick == 200)TimeTick = 0;
   OutWdServer();  
  }
  
  
  SCH_Updata();

}


/*---------------------------------------------------------*-
 * 函數名稱: SCH_Start()
 * 入	 口: 
 * 出	 口:
 * 函數功能: 通過允許中斷來啟動調度器
 * 
 * 說	 明: 在添加了所有定期的任務之后調用,從而使任務保持同步.
 *			 注意:應該只使能調度器中斷
-*---------------------------------------------------------*/

void SCH_Start(void)
{
 SEI();
}





//**************END OF FILE*********************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天使萌一区二区三区免费观看| 国产欧美日韩在线视频| 亚洲综合在线五月| 日本大香伊一区二区三区| 亚洲精品成人天堂一二三| av在线播放不卡| 亚洲小说春色综合另类电影| 欧美美女喷水视频| 精品在线观看视频| 国产精品久久久久久久久搜平片| 91视频你懂的| 日本不卡视频在线| 国产日产亚洲精品系列| 色先锋aa成人| 久久不见久久见中文字幕免费| 久久精品亚洲乱码伦伦中文| 色香色香欲天天天影视综合网| 日本欧美加勒比视频| 国产日韩高清在线| 欧美日本在线看| 国产99一区视频免费| 亚洲尤物在线视频观看| 久久夜色精品国产欧美乱极品| 成人va在线观看| 丝袜亚洲精品中文字幕一区| 欧美国产亚洲另类动漫| 欧美日韩国产高清一区| 国产成+人+日韩+欧美+亚洲| 亚洲成av人片一区二区三区| 精品久久久久久久人人人人传媒 | 亚洲啪啪综合av一区二区三区| 欧美天天综合网| 国产综合色产在线精品 | 亚洲女同女同女同女同女同69| 88在线观看91蜜桃国自产| 国产精品1024| 日韩国产精品久久久| 国产精品九色蝌蚪自拍| 日韩欧美一区在线| 日本福利一区二区| 国产福利一区二区| 青青草国产精品97视觉盛宴 | 欧洲精品一区二区| 国产激情视频一区二区三区欧美| 亚洲va国产天堂va久久en| 中文字幕va一区二区三区| 日韩视频在线你懂得| 欧美日韩一级视频| 成人高清视频免费观看| 国产一区美女在线| 亚洲国产精品久久久久秋霞影院 | 一区二区三区欧美久久| 日韩一级免费一区| 在线免费观看一区| 91在线码无精品| 国产99久久久精品| 久草中文综合在线| 午夜久久福利影院| 一区二区三区电影在线播| 自拍av一区二区三区| 中文字幕av一区二区三区免费看| 26uuu欧美日本| 欧美精品一区二区三区高清aⅴ| 欧美日产国产精品| 欧美日韩高清一区二区不卡| 在线亚洲人成电影网站色www| 99视频在线精品| 粉嫩欧美一区二区三区高清影视 | av中文一区二区三区| 国产寡妇亲子伦一区二区| 日本视频一区二区三区| 天天色图综合网| 亚洲国产日韩精品| 亚洲综合色噜噜狠狠| 亚洲乱码精品一二三四区日韩在线 | 久久免费偷拍视频| 久久免费视频一区| 久久精品一区二区三区不卡| 久久久久久99精品| 国产农村妇女毛片精品久久麻豆| 国产香蕉久久精品综合网| 久久精品日产第一区二区三区高清版| 日韩欧美成人激情| 欧美成人福利视频| 久久一留热品黄| 中文字幕av一区二区三区| 亚洲国产精品ⅴa在线观看| 国产网站一区二区三区| 国产精品热久久久久夜色精品三区| 久久久www成人免费无遮挡大片| 久久午夜色播影院免费高清| 中文字幕第一区第二区| 亚洲精品自拍动漫在线| 亚洲一区二区不卡免费| 日韩精品亚洲一区| 国产一区二区三区免费看| 成人a免费在线看| 日本韩国欧美在线| 欧美日韩成人在线| 精品国一区二区三区| 日本一区二区三区国色天香 | 另类小说色综合网站| 国产乱一区二区| 91在线无精精品入口| 欧美性一二三区| 91精品国产色综合久久ai换脸 | 日本久久电影网| 日韩欧美一区中文| 国产精品久久久久久福利一牛影视 | 日韩精品中文字幕一区二区三区| 亚洲一级不卡视频| 爽爽淫人综合网网站| 精品一区二区三区在线观看| 99精品视频在线播放观看| 欧美另类z0zxhd电影| 国产三级久久久| 午夜日韩在线电影| 国产电影一区在线| 欧美日韩精品一二三区| 国产欧美日韩在线视频| 亚洲电影第三页| 成人视屏免费看| 欧美一级黄色片| 亚洲欧美日韩在线不卡| 狠狠色综合日日| 欧美午夜不卡在线观看免费| 国产日韩欧美不卡在线| 五月天欧美精品| 99综合电影在线视频| 精品美女在线播放| 亚洲成人在线观看视频| zzijzzij亚洲日本少妇熟睡| 日韩一区二区高清| 亚洲一区二区三区四区五区中文 | 亚洲一区在线观看免费| 国产一区二区福利视频| 精品视频全国免费看| 国产精品福利一区| 国产一区二区三区| 88在线观看91蜜桃国自产| 亚洲精品日产精品乱码不卡| 国产宾馆实践打屁股91| 日韩一区二区三区免费观看| 亚洲一区自拍偷拍| 97精品久久久久中文字幕| 久久免费电影网| 免费成人在线网站| 欧美日韩久久不卡| 一级精品视频在线观看宜春院| 成人久久18免费网站麻豆| 精品对白一区国产伦| 婷婷国产v国产偷v亚洲高清| 色屁屁一区二区| 1024国产精品| av一本久道久久综合久久鬼色| 精品久久人人做人人爱| 蜜桃视频在线观看一区| 日韩写真欧美这视频| 日韩电影在线免费看| 7777精品伊人久久久大香线蕉完整版 | 亚洲va欧美va人人爽| 色天天综合色天天久久| 亚洲欧美成aⅴ人在线观看 | 国产精品亚洲а∨天堂免在线| 欧美不卡在线视频| 国内精品久久久久影院一蜜桃| 欧美v亚洲v综合ⅴ国产v| 老司机午夜精品| 精品99999| 国产麻豆精品在线观看| 国产色产综合产在线视频| 高清日韩电视剧大全免费| 国产亚洲成av人在线观看导航| 国产一区91精品张津瑜| 亚洲国产成人一区二区三区| 成人h精品动漫一区二区三区| 国产精品国产a| 在线亚洲免费视频| 亚洲va国产天堂va久久en| 欧美电影一区二区三区| 日本午夜一区二区| 久久综合色8888| 成人av在线播放网站| 亚洲在线中文字幕| 制服丝袜一区二区三区| 久久www免费人成看片高清| 久久精品夜色噜噜亚洲aⅴ| 不卡av免费在线观看| 一区二区国产视频| 欧美一级国产精品| 国产成人亚洲综合a∨婷婷 | 三级成人在线视频| 欧美精品一区二区三区四区| 大白屁股一区二区视频| 亚洲综合久久av| 日韩精品一区二区三区三区免费| 国产69精品久久777的优势| 亚洲最新视频在线播放| 日韩欧美国产成人一区二区| 成人av电影在线网|