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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? test.c

?? atmel AVR MCU UCOS Source code.
?? C
字號(hào):
/*
*******************************************************************************
*                                    uC/OS-II
*                               The Real-Time Kernel
*
*
*                                  AVR Sample code
* File        : TEST.C
* By          : Ole Saether
* Version     : V1.01
*
* AVR-GCC port version : 1.0 2001-04-02 modified/ported to avr-gcc by Jesper Hansen
*						 (jesperh@telia.com)
*
*
* Description : This file contains a simple example program showing how to use the AVR port of
*				uC/OS-II. It is based on Example #1 from Jean Labrosse's book "MicroC/OS-II, The
*				Real Time Kernel." The main difference is that this example does not display the
*				time of day and the uC/OS-II version number. You must have the AVR UART connected
*				to a VT102 compatible terminal (HyperTerminal in Windows is OK) to get the most out
*				of this example.
*				The support routines at the end of this file are included only to make this example
*				run; they should not be used in production code without careful testing.
*******************************************************************************
*/

#include "includes.h"
#include "uart.h"

/*
*******************************************************************************
*                                   CONSTANTS
*******************************************************************************
*/

#define  TASK_STK_SIZE  OS_TASK_DEF_STK_SIZE            /* Size of each task's stacks (# of bytes)*/
#define  N_TASKS        10                              /* Number of identical tasks*/

/*
*******************************************************************************
*                                  VARIABLES
*******************************************************************************
*/

OS_STK     TaskStk[N_TASKS][TASK_STK_SIZE];    /* Tasks stacks*/
OS_STK     TaskStartStk[TASK_STK_SIZE];
char       TaskData[N_TASKS];     /* Parameters to pass to each task*/
OS_EVENT   *RandomSem;
OS_EVENT   *DispStrSem;
INT32U     RndNext;               /* Used by random generator*/
INT8U      UartTxBuf[256];        /* 256 bytes UART transmit buffer*/
INT8U      UartTxRdPtr;           /* UART transmit buffer read pointer*/
INT8U      UartTxWrPtr;           /* UART transmit buffer write pointer*/
INT8U      UartTxCount;           /* Number of characters to send*/
OS_EVENT   *UartTxSem;


unsigned char kurt;

/*
*******************************************************************************
*                                 FUNCTION PROTOTYPES
*******************************************************************************
*/

void  Task(void *data);				/* Function prototypes of tasks*/
void  TaskStart(void *data);		/* Function prototypes of Startup task*/
void  PutChar(char c);				/* Write a character to the AVR UART*/
void  AvrInit(void);				/* Initialize AVR*/
void  PutString(const char *s);		/* Write a null-terminated string to the AVR UART*/
void  SPrintDec(char *, INT16U, INT8U);	/* Output an INT16U to a string (right adjust)*/
void  PutDec (INT8U x);			/* Display an INT8U without leading zeros*/
void  VT102Attribute (INT8U fgcolor, INT8U bgcolor);		/* Set attributes on VT102 terminal*/
void  VT102DispClrScr(void);	/* Clear VT102 terminal*/
void  VT102DispChar(INT8U, INT8U, char, INT8U, INT8U);	/* Display a character on VT102 terminal*/
void  VT102DispStr(INT8U, INT8U, char *, INT8U, INT8U);	/* Display a string on VT102 terminal*/
INT8U random(INT8U n);			/* Simple random generator (found in K&R)*/

/*
*******************************************************************************
*                                       MAIN
*******************************************************************************
*/

int
main (void)
{
    AvrInit();/* Initialize the AVR UART and Timer*/
    OSInit();
    RandomSem  = OSSemCreate(1);		/* Random number semaphore*/
    DispStrSem = OSSemCreate(1);		/* Display string semaphore*/
    UartTxSem  = OSSemCreate(254);		/* Initialize Uart transmit buffer semaphore to 2*/

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);

    RndNext = 1;						/* set random generator seed to 1*/
    OSStart();							/* Start multitasking*/
    return 0;
}

/*
*******************************************************************************
*                                 STARTUP TASK
*******************************************************************************
*/
void
TaskStart (void *data)
{
    INT8U   i;
    char    s[10];

    data = data;/* Prevent compiler warning*/

    VT102DispClrScr();				/* Clear the screen*/
    VT102DispStr(26,  1, "uC/OS-II, The Real-Time Kernel", COLOR_WHITE, COLOR_RED);
    VT102DispStr(33,  2, "Jean J. Labrosse", COLOR_WHITE, COLOR_BLACK);
    VT102DispStr(29,  3, "AVR port by Ole Saether", COLOR_WHITE, COLOR_BLACK);
    VT102DispStr(29,  4, "gcc port by Jesper Hansen", COLOR_WHITE, COLOR_BLACK);
    VT102DispStr(1,  23, "Determining  CPU's capacity ...", COLOR_WHITE, COLOR_BLACK);

    OSStatInit();					/* Initialize uC/OS-II's statistics*/
    
    for (i = 0; i < N_TASKS; i++) {	/* Create N_TASKS identical tasks*/
        TaskData[i] = '0' + i;		/* Each task will display its own letter*/
        OSTaskCreate(Task, (void *)&TaskData[i], (void *)&TaskStk[i][TASK_STK_SIZE - 1], i + 1);
    }
    VT102DispStr(1, 23, "#Tasks          : xxxxx  CPU Usage: xxx %", COLOR_WHITE, COLOR_BLACK);
    VT102DispStr(1, 24, "#Task switch/sec: xxxxx", COLOR_WHITE, COLOR_BLACK);
    for (;;) {
        SPrintDec(s, (INT16U)OSTaskCtr, 5);			/* Display #tasks running*/
        VT102DispStr(19, 23, s, COLOR_WHITE, COLOR_BLUE);
        SPrintDec(s, (INT16U)OSCPUUsage, 3);		/* Display CPU usage in %*/
        VT102DispStr(37, 23, s, COLOR_WHITE, COLOR_BLUE);
        SPrintDec(s, (INT16U)OSCtxSwCtr, 5);		/* Display #context switches per second*/
        VT102DispStr(19, 24, s, COLOR_WHITE, COLOR_BLUE);
        OSCtxSwCtr = 0;
        OSTimeDlyHMSM(0, 0, 1, 0);					/* Wait one second*/
    }
}

/*
*******************************************************************************
*                                       TASKS
*******************************************************************************
*/
void
Task (void *data)
{
    INT8U x;
    INT8U y;
    INT8U err;

    for (;;) {
        OSSemPend(RandomSem, 0, &err);			/* Acquire semaphore to perform random numbers*/
        x = random(80);							/* Find X position where task number will appear*/
        y = random(15);/* Find Y position where task number will appear*/
        OSSemPost(RandomSem);					/* Release semaphore*/
/* Display the task number on the screen*/
        VT102DispChar(x + 1, y + 6, *(char *)data, COLOR_WHITE, COLOR_BLACK);
        OSTimeDly(3);							/* Delay 3 clock ticks*/
    }
}

/*
*******************************************************************************
*                                  SUPPORT ROUTINES
*******************************************************************************
*/

/* UART Transmit Complete Interrupt Function */
SIGNAL(SIG_UART_TRANS)      
{
    UartTxCount--;				/* Decrement number of characters left to send*/
    if (UartTxCount) {
        outp(UartTxBuf[UartTxRdPtr], UDR);	/* Place next character into UART transmit register */
        UartTxRdPtr++;			/* Advance to next character*/
        OSSemPost(UartTxSem);	/* Signal that we have room for one more character*/
    } else {
        outp(inp(UCR) & ~0x40, UCR);	/* Disable UART transmit complete interrupt*/
    }
}

void
AvrInit (void)
{
    outp(0x05,	TCCR0);				/* Set TIMER0 prescaler to CLK/1024*/
    outp(0x02,  TIMSK);				/* Enable TIMER0 overflow interrupt*/

    outp((INT8U)UART_BAUD_SELECT, UBRR); /* 9600 BAUD at 4MHz*/

    outp((1<<SRE)/*|(1<<SRW)*/, MCUCR);	/* Enable external RAM*/
    outp(0x08,	UCR);			/* Enable UART transmitter*/
    outp(inp(UDR) | 0x40,UDR);	/* Clear UART transmit complete bit (TXC)*/

    UartTxCount = 0;			/* Clear number of characters to send*/
    UartTxRdPtr = 0;			/* Initialize transmit buffer read pointer*/
    UartTxWrPtr = 0;			/* Initialize transmit buffer write pointer*/
}

void
PutChar (char c)
{
    INT8U err;

    if (UartTxCount) {
        OSSemPend(UartTxSem, 0, &err);	/* Wait for space in transmit buffer*/
    }
    OS_ENTER_CRITICAL();
    if (UartTxCount) {
        UartTxBuf[UartTxWrPtr] = c; /* Put character to send in transmit buffer*/
        UartTxWrPtr++;				/* Prepare for next character*/
        UartTxCount++;				/* Increment number of characters to send*/
    } else {
        outp(c,	UDR);/* Write first char directly to the UART*/
        UartTxCount = 1;
        outp(inp(UCR) | 0x40,UCR); /* Enable UART transmit complete interrupt*/
    }
    OS_EXIT_CRITICAL();
}

void
PutString (const char *s)
{
	while (*s != '\0') {
		PutChar(*s++);
	}
}

void
SPrintDec(char *s, INT16U x, INT8U n)
{
	INT8U i;

	s[n] = '\0';
	for (i = 0; i < n; i++) {
		s[n - i - 1] = '0' + (x % 10);
		x /= 10;
	}

	for (i = 0; i < (n - 1); i++) {
		if (s[i] == '0') {
			s[i] = ' ';
		} else {
			break;
		}
	}
}

INT8U
random (INT8U n)
{
	RndNext = RndNext * 1103515245 + 12345;
	return ((INT8U)(RndNext / 256) % (n + 1));
}

void
PutDec (INT8U x2)
{
	INT8U	x0;
	INT8U	x1;

	x0 = (x2 % 10);
	x2 /= 10;
	x1 = (x2 % 10);
	x2 /= 10;
	if (x2) {
		PutChar(x2 + '0');
	}
	if (x1 || x2) {
		PutChar(x1 + '0');
	}
	PutChar(x0 + '0');
}

void
VT102Attribute (INT8U fgcolor, INT8U bgcolor)
{
    PutChar(0x1b);
    PutChar('[');
    PutDec(30 + fgcolor);
    PutChar(';');
    PutDec(40 + bgcolor);
    PutChar('m');
}


void
VT102DispClrScr (void)
{
    VT102Attribute(COLOR_WHITE, COLOR_BLACK);
    PutString("\x1B[2J");
}


void
VT102DispChar (INT8U x, INT8U y, char c, INT8U fgcolor, INT8U bgcolor)
{
    INT8U err;

    OSSemPend(DispStrSem, 0, &err); /* Acquire semaphore to display string*/
    VT102Attribute(fgcolor, bgcolor);
    PutChar(0x1B);
    PutChar('[');
    PutDec(y);
    PutChar(';');
    PutDec(x);
    PutChar('H');
    PutChar(c);
    OSSemPost(DispStrSem);		/* Release semaphore*/
}


void
VT102DispStr (INT8U x, INT8U y, char *s, INT8U fgcolor, INT8U bgcolor)
{
    INT8U err;

    OSSemPend(DispStrSem, 0, &err); /* Acquire semaphore to display string*/
    VT102Attribute(fgcolor, bgcolor);
    PutChar(0x1B);
    PutChar('[');
    PutDec(y);
    PutChar(';');
    PutDec(x);
    PutChar('H');
    PutString(s);
    OSSemPost(DispStrSem);			/* Release semaphore*/
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女视频一区| 亚洲精品中文字幕乱码三区| 666欧美在线视频| 欧美日韩午夜在线| 美女视频黄 久久| 偷偷要91色婷婷| 亚洲免费在线视频一区 二区| 国产午夜精品久久久久久免费视| 精品欧美一区二区在线观看| 日韩欧美国产三级| 精品人在线二区三区| 日韩精品专区在线| 精品日韩一区二区三区 | 2019国产精品| 久久久久久久性| 久久久久久久久久久久久久久99| 久久免费的精品国产v∧| 久久久久久免费毛片精品| 久久久精品2019中文字幕之3| 国产午夜一区二区三区| 国产无一区二区| 中文字幕一区三区| 夜夜嗨av一区二区三区四季av| 亚洲国产精品自拍| 日韩不卡免费视频| 加勒比av一区二区| 成人精品鲁一区一区二区| 99久久婷婷国产综合精品| 色av成人天堂桃色av| 欧美高清dvd| 精品剧情v国产在线观看在线| 久久久久久久久一| 一色桃子久久精品亚洲| 亚洲国产精品久久久男人的天堂| 天天综合色天天综合色h| 老汉av免费一区二区三区| 国产毛片精品视频| 91日韩一区二区三区| 欧美精品亚洲一区二区在线播放| 日韩精品一区二区三区在线观看| 精品对白一区国产伦| 亚洲欧洲色图综合| 日韩中文字幕1| 高清不卡一区二区| 日本韩国精品在线| 日韩欧美国产综合一区| 中文字幕乱码久久午夜不卡| 亚洲午夜在线电影| 国产综合一区二区| 色哟哟欧美精品| 日韩一区二区电影在线| 国产精品久久久久久户外露出 | 欧美日韩国产精选| 亚洲精品在线观看网站| 亚洲色图欧美在线| 麻豆精品国产91久久久久久| 不卡高清视频专区| 91精品国产综合久久精品图片| 国产欧美一区二区精品忘忧草| 亚洲激情五月婷婷| 国产在线精品不卡| 精品视频免费看| 亚洲国产精品精华液ab| 日韩精品成人一区二区三区| 成人黄页毛片网站| 日韩欧美国产综合| 亚洲妇女屁股眼交7| 国产成人鲁色资源国产91色综| 欧美色图免费看| 欧美国产日韩a欧美在线观看| 午夜精品一区在线观看| 99久久精品国产麻豆演员表| 精品国产99国产精品| 亚洲成年人影院| 94色蜜桃网一区二区三区| 欧美大胆人体bbbb| 欧美日韩一级片网站| 中文一区二区在线观看| 久草精品在线观看| 欧美网站大全在线观看| 国产精品久久久久久久久免费相片| 久久99精品久久久久婷婷| 在线免费观看不卡av| 国产精品乱码一区二区三区软件| 精品亚洲成a人在线观看| 欧美日韩www| 一区二区三区视频在线观看| 成人教育av在线| 国产午夜精品一区二区三区四区| 蜜桃久久av一区| 7777精品伊人久久久大香线蕉经典版下载 | 艳妇臀荡乳欲伦亚洲一区| 成人性视频免费网站| 久久久久久久久一| 极品少妇一区二区| 欧美一区二区免费观在线| 午夜精品aaa| 欧美亚洲国产一区在线观看网站| 亚洲桃色在线一区| 成人h动漫精品一区二区| 国产日产欧美一区二区视频| 国产综合久久久久影院| 日韩欧美色综合| 三级影片在线观看欧美日韩一区二区 | 国产欧美一区二区三区在线看蜜臀| 精品一区二区三区久久久| 91麻豆精品国产91久久久久久久久| 亚洲国产精品一区二区久久| 欧洲亚洲精品在线| 亚洲国产婷婷综合在线精品| 91福利视频网站| 亚洲国产精品久久人人爱 | 亚洲美女少妇撒尿| 欧美中文字幕久久| 亚洲成av人影院在线观看网| 欧美老女人第四色| 奇米精品一区二区三区在线观看一| 91精品国产免费| 蜜臀av一区二区| 欧美一二区视频| 国内精品久久久久影院色| 久久免费精品国产久精品久久久久| 国产成人av电影| 国产精品成人一区二区三区夜夜夜| zzijzzij亚洲日本少妇熟睡| 亚洲人成人一区二区在线观看| 一本色道久久综合亚洲91| 亚洲五月六月丁香激情| 91精品国产一区二区| 激情国产一区二区 | 欧美午夜片在线观看| 午夜一区二区三区视频| 日韩视频在线一区二区| 国产成人啪免费观看软件| 综合久久一区二区三区| 欧美视频中文字幕| 久久99久久99| 国产精品久久久久永久免费观看| 色综合天天综合网国产成人综合天| 亚洲一区二区视频在线| 欧美一区二区在线免费观看| 国模娜娜一区二区三区| 日韩毛片视频在线看| 在线成人小视频| 国产mv日韩mv欧美| 亚洲小少妇裸体bbw| 精品精品欲导航| www.欧美亚洲| 日韩成人免费看| 久久精品一区二区| 欧美亚洲高清一区| 国产一区二区三区日韩| 亚洲黄色小说网站| 欧美mv日韩mv国产网站| 91色|porny| 理论电影国产精品| 亚洲免费高清视频在线| 日韩三级视频在线看| 99国产精品国产精品久久| 日韩av一级片| 中文字幕中文字幕在线一区 | 亚洲欧洲成人精品av97| 7777精品伊人久久久大香线蕉| 国产传媒日韩欧美成人| 亚洲va欧美va天堂v国产综合| 国产性天天综合网| 欧美群妇大交群的观看方式| 成人激情小说乱人伦| 六月丁香婷婷久久| 亚洲黄色小说网站| 国产调教视频一区| 91精品国产91久久久久久一区二区 | 亚洲国产精品一区二区久久| 国产欧美一区二区精品婷婷| 欧美一区二区日韩| 在线精品视频免费播放| 国产aⅴ综合色| 麻豆精品视频在线观看免费| 一区二区国产视频| 国产精品乱码人人做人人爱 | 欧美国产精品一区二区| 欧美一区二区三区在线观看| 91成人网在线| 国产99久久久精品| 九一久久久久久| 日韩激情中文字幕| 亚洲综合视频在线| 国产精品激情偷乱一区二区∴| 精品国产一区二区三区不卡| 欧美日韩高清在线播放| 色悠悠久久综合| 91在线云播放| 成人激情小说网站| 高清成人免费视频| 国产一区二三区| 久久99精品久久久久| 日韩av在线播放中文字幕| 亚洲国产欧美在线| 一二三区精品福利视频| 亚洲精品高清在线|