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

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

?? ex2_8051r.c

?? uCos-II 在多種處理器上移植的源代碼
?? C
字號:
/*****************************************************************************
|*
|*  Copyright (c) 2001 TASKING, Inc.
|*
|*  Description:
|*
|*	This module shows an example how to use uC/OS.
|*	It implements 5 tasks:
|*	Stat() calculates some statistics about the processor usage
|*	DispStr() is used to display string created by other tasks
|*	Task() sets/resets an I/O pin and creates a string to display by DispStat()
|*	Task() is created 3 times, each with other startup data.
|*	Stat() is created in main(). The other tasks are created by Task();
|*
 ****************************************************************************/

#include "includes.h"
#include "lcd.h"

#define	VIRT_STACK_1	0x400
OS_STK		Stk3[VIRT_STACK_1 + OS_SYS_STACK_SIZE];

#define	VIRT_STACK_2	0x400
OS_STK		Stk2[VIRT_STACK_2 + OS_SYS_STACK_SIZE];

#define	VIRT_STACK_3	0x400
OS_STK		Stk1[VIRT_STACK_3 + OS_SYS_STACK_SIZE];

#define	VIRT_STACK_STAT	0x400
OS_STK		Stk_stat[VIRT_STACK_STAT + OS_SYS_STACK_SIZE];

#define	VIRT_STACK_DISP	0x400
OS_STK		Stk_disp[VIRT_STACK_DISP + OS_SYS_STACK_SIZE];

#define printfQ_SIZE	5


unsigned char		msg[4][2];			/* messages to send to DispStr() */

OS_EVENT	* printfSem;				/* semaphore for printf */
OS_EVENT	* printfQPtr;				/* pointer to queue for printf messages */
void		* printfQ[printfQ_SIZE];		/* printf queue */

void Task(void *pdata);
void Stat(void *data);
void DispStr(void *data);
void StartTimer0(void);
int main( void );

/*
 * Data[] is organized as "taskno,bitno,delay"
 */

int	Data1[] = {1,7,10};
int	Data2[] = {2,6,20};
int	Data3[] = {3,5,40};



/*****************************************************************************
|*
|*  FUNCTION:           Task
|*
|*  DESCRIPTION:
|*
|*      Set/reset I/O pin (P1x) and post a message to display a string
|*
 */
void Task(void *pdata)
{
	unsigned char	output;				/* used to display if pin is set or reset */
	unsigned char	portnr;				/* used to displat which pin is set */
	unsigned char	tasknr;				/* used to display which task set the pin */

	unsigned char	mask;				/* holds bitmask for the pin */
	unsigned int	dlay;				/* timeticks between toggling the pin */


	tasknr = ((int *)pdata)[0] & 0xFF;		/* determine task number... */
	portnr = ((int *)pdata)[1] & 0xFF;		/* ...port number... */
	mask = 1 << portnr;
	dlay = ((int *)pdata)[2];			/* ...and delay */

	/* avoid compiler warning */
	pdata = pdata;

	while (1)
	{
		/* Toggle P1.<bitno> */
		P1 ^= mask;
		output = (P1 & mask)? 1 : 0;

		/* write output to global */
		msg[tasknr][0] = tasknr;
		msg[tasknr][1] = output;

		/* Post message to display the string */
		OSQPost(printfQPtr, &msg[tasknr]);

		/* wait for a certain time */
		OSTimeDly(dlay);
	}
}


/*****************************************************************************
|*
|*  FUNCTION:           Stat
|*
|*  DESCRIPTION:
|*
|*      Starts the other tasks and compute CPU usage
|*
 */
void Stat(void *data)
{
	unsigned long	max;				/* Maximal idle count if no other processes run */
	int		usage;				/* Percent of used CPU time */
	unsigned char	err;				/* Contains err if OSSemPend() fails */
	char		str[12];


	data = data;					/* Prevent compiler warning */

	InitLcd();					/* initialize the LCD */

	strcpy( str, "CALC. REF. ");
	OSSemPend(printfSem, 0, &err);
	WriteLcdStr( str );
	OSSemPost(printfSem);

	OSTimeDly(1);					/* Synchronize to clock tick */
	OSIdleCtr = 0L;					/* Determine max. idle counter value ... */
	OSTimeDly(30);					/* ... for 30 clock ticks */
	max = OSIdleCtr;

	P1 = 0xE0;

	OSTaskCreate(Task, Data3, &Stk3[VIRT_STACK_3 + OS_SYS_STACK_SIZE], 20);
	OSTaskCreate(Task, Data2, &Stk2[VIRT_STACK_2 + OS_SYS_STACK_SIZE], 30);
	OSTaskCreate(Task, Data1, &Stk1[VIRT_STACK_1 + OS_SYS_STACK_SIZE], 40);
	OSTaskCreate(DispStr, (void *)0, &Stk_disp[VIRT_STACK_DISP + OS_SYS_STACK_SIZE], 60);

	OSIdleCtr = 0L;

	while (1)
	{
		OS_ENTER_CRITICAL();

		/* Reset statistics counters */
		OSCtxSwCtr = 0L;
		OSIdleCtr  = 0L;
		OS_EXIT_CRITICAL();

		/* Wait about one second */
		OSTimeDly(30);

		/* Compute and post statistics */
		usage = 100 - ((100 * OSIdleCtr) / max);
		msg[0][0] = 0;
		msg[0][1] = usage;
		OSQPost(printfQPtr, &msg[0]);
	}
}


/*****************************************************************************
|*
|*  FUNCTION:           DispStr
|*
|*  DESCRIPTION:
|*
|*      After receiving a message, display the corresponding string
|*
 */
void DispStr(void *data)
{
	unsigned char	err;				/* Contains err if OSQPend() fails */
	static char	str[12];	
	char		* s;				/* pointer to message char */

	data = data;					/* avoid compiler warnings */

	s = str;					/* point to str */
	strcpy(s, "00  P.0.0.0.");			/* init string */ 

	while (1)
	{
		/* Wait forever for message */
		s = OSQPend(printfQPtr, 0, &err);

		switch (s[0])
		{
		case 0:
			/* update CPU usage */
			str[0] = (s[1] / 10) + '0';
			str[1] = (s[1] % 10) + '0';
			break;
		case 1:
			/* update port 1 */
			str[10] = s[1] + '0'; 
			break;
		case 2:
			/* update port 2 */
			str[8] = s[1] + '0'; 
			break;
		case 3:
			/* update port 3 */
			str[6] = s[1] + '0'; 
			break;
		default:
			/* do nothing */
			break;
		}

		/* wait for semaphore before use of the LCD routine */
		OSSemPend(printfSem, 0, &err);
		WriteLcdStr( str );
		OSSemPost(printfSem);
	}
}

/*****************************************************************************
|*
|*  FUNCTION:           StartTimer0
|*
|*  DESCRIPTION:
|*
|*      Initialize Timer 0 (used as timer for OSTimeTick, see OS_CPU_C.C).
|*
 */
void StartTimer0(void)
{
	unsigned char Temp;

	/* Program Timer 0:
	 *     Gate = 0 => timer enabled on TR0
	 *     C/nT = 0 => source = 1/12 fOSC
	 *     mode = 1 => 16-Bit counter/timer
	 */

	Temp = TMOD;
	Temp &= 0xF0;
	Temp |= 0x01;
	TMOD = Temp;

	TL0 = 0;
	TH0 = 0;

	ET0 = 1;		/* Enable Interrupt on Timer 0 Overflow */

	TR0 = 1;		/* Start Timer 0 */
}


/*****************************************************************************
|*
|*  FUNCTION:           main
|*
|*  DESCRIPTION:
|*
|*      Create first task (Stat()) and start OS
|*
 */
int main( void )
{
	OSInit();

	printfSem = OSSemCreate(1);
	printfQPtr = OSQCreate(&printfQ[0], printfQ_SIZE);

	OSTaskCreate(Stat, (void *)0, &Stk_stat[VIRT_STACK_STAT + OS_SYS_STACK_SIZE], 50);

	OS_ENTER_CRITICAL();

	StartTimer0();

	/* Start multitasking - will do OS_EXIT_CRITICAL() */
	OSStart();

	return 0;	/* will never happen... */
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区在线观看| 日欧美一区二区| 天天色综合成人网| 国产一区二区在线影院| 欧美写真视频网站| 国产精品久久久久久户外露出| 午夜精品久久久久影视| av高清久久久| 久久精品一二三| 麻豆一区二区三| 欧美日韩精品免费| 一区二区三区在线免费视频| 国产宾馆实践打屁股91| 26uuu亚洲| 日韩精品电影一区亚洲| 日本韩国欧美一区二区三区| 欧美一区二区三区精品| 亚洲第一成年网| 久久久久久影视| 老司机精品视频导航| 欧美日韩五月天| 亚洲国产人成综合网站| 色屁屁一区二区| 中文字幕一区二区三| 本田岬高潮一区二区三区| 久久久亚洲高清| 国产一区在线观看麻豆| 精品国产露脸精彩对白| 国内精品国产三级国产a久久| 日韩视频一区二区在线观看| 久久99久久久久| 精品剧情在线观看| 国产一区二区三区四区五区美女 | 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲三级电影网站| aa级大片欧美| 中文字幕制服丝袜成人av| www.爱久久.com| 亚洲男同性恋视频| 欧美色精品在线视频| 亚洲网友自拍偷拍| 91精品久久久久久久91蜜桃| 久久精品国产在热久久| www激情久久| 成人精品视频网站| 亚洲欧美电影一区二区| 欧美日韩一区二区三区免费看| 性做久久久久久| 欧美一区二区三区在线观看| 久久国产精品99精品国产| 国产日韩综合av| 色94色欧美sute亚洲线路一久| 亚洲国产美国国产综合一区二区| 欧美日韩不卡视频| 91老师片黄在线观看| 亚洲激情综合网| 欧美刺激脚交jootjob| 成人小视频在线| 亚洲一区二区三区免费视频| 精品国产伦一区二区三区观看体验 | 成人av影视在线观看| 洋洋成人永久网站入口| 欧美大片一区二区| 波多野结衣中文一区| 夜夜嗨av一区二区三区| 欧美成人官网二区| 97精品超碰一区二区三区| 日韩av中文在线观看| 日韩免费观看2025年上映的电影| 午夜一区二区三区视频| 国产亚洲欧美日韩在线一区| 国产成人精品免费网站| 亚洲女同ⅹxx女同tv| 欧美成人精品3d动漫h| 成人av在线看| 男男gaygay亚洲| 亚洲伦在线观看| 久久蜜桃一区二区| 91精品国产综合久久久久久久| 成人午夜精品一区二区三区| 丝袜a∨在线一区二区三区不卡| 欧美激情在线免费观看| 日韩一卡二卡三卡| 欧美色综合久久| 97久久超碰精品国产| 久久 天天综合| 无码av免费一区二区三区试看| 国产精品久久久久影院亚瑟| 精品国产一二三| 欧美精品丝袜中出| 欧亚一区二区三区| 成人伦理片在线| 国产福利精品导航| 狠狠色丁香婷婷综合| 蜜臀av性久久久久av蜜臀妖精| 一区二区理论电影在线观看| 国产精品国产三级国产aⅴ入口 | 精品国产乱码久久久久久浪潮 | 欧美日韩国产首页| 91一区二区在线| 成人性生交大片免费看视频在线 | 国产一区欧美一区| 免费在线观看视频一区| 亚洲一二三区不卡| 亚洲综合久久久久| 亚洲免费在线视频| 亚洲天堂久久久久久久| 中文字幕一区视频| 亚洲女人小视频在线观看| 中文字幕五月欧美| 亚洲男人的天堂在线观看| 亚洲美腿欧美偷拍| 一区二区三区在线影院| 亚洲资源在线观看| 视频精品一区二区| 麻豆国产精品视频| 国产精品一二一区| 成人动漫一区二区在线| www..com久久爱| 91电影在线观看| 亚洲黄色片在线观看| 国产精品成人一区二区艾草| 中文字幕精品三区| 天堂蜜桃91精品| 91亚洲男人天堂| 日韩午夜电影av| 亚洲日本电影在线| 奇米影视7777精品一区二区| 国产a精品视频| 欧美一区二区三区影视| 国产精品三级在线观看| 久久精品国产99国产精品| 成人av在线资源网| 精品制服美女丁香| 国产成人在线免费| 91在线porny国产在线看| 欧美日韩视频在线第一区| 69堂成人精品免费视频| 久久影视一区二区| 精品一区二区三区免费毛片爱 | 无码av免费一区二区三区试看 | 国产亚洲精品7777| 日韩美女精品在线| 日本午夜精品视频在线观看| 国产一区二区三区四区五区入口| 9久草视频在线视频精品| 欧美亚洲国产怡红院影院| 日韩欧美国产综合一区| 中文字幕一区二区三区色视频| 亚洲成人动漫一区| 国产麻豆精品95视频| 91成人国产精品| 久久精品亚洲精品国产欧美kt∨| 一区二区三区在线不卡| 成人精品国产福利| 91精品婷婷国产综合久久竹菊| 久久久亚洲国产美女国产盗摄| 亚洲主播在线观看| 国产suv精品一区二区883| 欧美日韩国产首页| 亚洲欧洲日韩av| 国产一区二区调教| 在线播放91灌醉迷j高跟美女| 国产亚洲污的网站| 日本aⅴ免费视频一区二区三区| av一二三不卡影片| 欧美精品一区二区久久久| 亚洲国产视频一区| 99国产精品久久久久久久久久久| 欧美成人免费网站| 视频在线在亚洲| 欧美在线影院一区二区| 中文字幕高清不卡| 久草这里只有精品视频| 3d成人动漫网站| 亚洲国产成人av网| 日本高清成人免费播放| 欧美国产日本韩| 九九视频精品免费| 91精品国产免费| 亚洲亚洲精品在线观看| 91国内精品野花午夜精品| 国产精品三级视频| 国产91富婆露脸刺激对白| 欧美电影免费观看高清完整版在线观看 | 日产欧产美韩系列久久99| 欧美在线啊v一区| 夜夜精品视频一区二区 | 一二三区精品视频| 色综合天天综合网天天看片 | 欧美电影免费观看高清完整版在线| 一区二区视频免费在线观看| 成人白浆超碰人人人人| 日本一区二区电影| 岛国精品一区二区| 中文字幕在线观看一区| 91在线精品一区二区| 亚洲伦在线观看| 欧洲一区二区三区在线| 偷拍日韩校园综合在线|