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

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

?? test.c

?? ATMEL ucos transplant of AVR
?? C
字號:
/*
 *************************************************************************************************************
 *                                                uC/OS-II
 *                                          The Real-Time Kernel
 *
 *
 *                                         ATmega103 Sample code
 * File     : TEST.C
 * By       : Ole Saether
 *
 * $Revision: 2 $
 *
 * 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.
 *
 * $History: TEST.C $
 * 
 * *****************  Version 2  *****************
 * User: Ole          Date: 8/13/00    Time: 15:14
 * Updated in $/UCOS-II/AT-M103
 * Added OS_TASK_DEF_STK_SIZE. Increase delay in Task from 3 to 10.
 * 
 * *****************  Version 1  *****************
 * User: Ole          Date: 8/12/00    Time: 17:46
 * Created in $/UCOS-II/AT-M103
 * File copied from AVR port version 1.0 to the version control system. 
 * 
 *************************************************************************************************************
*/

#include "includes.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;

/*
**************************************************************************************************************
*                                           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
**************************************************************************************************************
*/

void 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   */
                                                        /* bytes less than the buffer size                  */
    OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0);
    RndNext = 1;                                        /* set random generator seed to 1                   */
    OSStart();                                          /* Start multitasking                               */
}

/*
**************************************************************************************************************
*                                              STARTUP TASK
**************************************************************************************************************
*/
void TaskStart (void *data)
{
    INT8U   i;
    INT8U   err;
    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(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_BLUE, COLOR_CYAN);
        SPrintDec(s, (INT16U)OSCPUUsage, 3);            /* Display CPU usage in %                           */
        VT102DispStr(37, 23, s, COLOR_BLUE, COLOR_CYAN);
        SPrintDec(s, (INT16U)OSCtxSwCtr, 5);            /* Display #context switches per second             */
        VT102DispStr(19, 24, s, COLOR_BLUE, COLOR_CYAN);
        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(16);                                 /* Find Y position where task number will appear    */
        OSSemPost(RandomSem);                           /* Release semaphore                                */
                                                        /* Display the task number on the screen            */
        VT102DispChar(x + 1, y + 5, *(char *)data, COLOR_WHITE, COLOR_BLACK);
        OSTimeDly(10);                                  /* Delay 10 clock ticks                             */
    }
}

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

interrupt [UART_TX_vect] void UART_TX_interrupt (void)
{
    UartTxCount--;                                      /* Decrement number of characters left to send      */
    if (UartTxCount) {
        UDR = UartTxBuf[UartTxRdPtr];                   /* Place next character into UART transmit register */
        UartTxRdPtr++;                                  /* Advance to next character                        */
        OSSemPost(UartTxSem);                           /* Signal that we have room for one more character  */
    } else {
        UCR &= ~0x40;                                   /* Disable UART transmit complete interrupt         */
    }
}

void AvrInit (void)
{
    TCCR0       = 0x07;                                 /* Set TIMER0 prescaler to CLK/1024                 */
    TIMSK       = 0x01;                                 /* Enable TIMER0 overflow interrupt                 */
    UBRR        = 12;                                   /* 19200 BAUD at 4.0MHz                             */
    MCUCR      |= 0x80;                                 /* Enable external RAM                              */
    UCR         = 0x08;                                 /* Enable UART transmitter                          */
    USR        |= 0x40;                                 /* 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 {
        UDR         = c;                                /* Write first char directly to the UART            */
        UartTxCount = 1;
        UCR        |= 0x40;                             /* 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                                */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文久久乱码一区二区| 午夜欧美2019年伦理| 色悠悠亚洲一区二区| 日韩二区在线观看| 国产精品成人免费在线| 精品国产乱码久久久久久1区2区 | 福利一区在线观看| 久久久久久久电影| 色偷偷一区二区三区| 国产精品免费视频观看| 日韩一区二区在线观看视频| 欧美一区二区三区影视| 国产精品国产a级| 欧美日韩一区二区三区不卡| 欧美午夜理伦三级在线观看| 欧美在线免费观看亚洲| 在线观看一区日韩| 欧美高清激情brazzers| 欧美一级欧美一级在线播放| 日韩欧美国产麻豆| 久久久综合九色合综国产精品| 国产欧美一区二区精品久导航| 亚洲三级免费电影| 日韩精品亚洲专区| 1区2区3区精品视频| 中文字幕亚洲一区二区va在线| 国产在线不卡一区| 日韩免费高清av| 99久久99久久精品国产片果冻| 欧美国产1区2区| 精品国产123| 91精品国产综合久久婷婷香蕉| 国产传媒一区在线| 国产成人亚洲精品青草天美| 免费高清不卡av| 久久精品国产亚洲一区二区三区| 亚洲视频资源在线| 亚洲欧美一区二区在线观看| 久久精品欧美一区二区三区不卡 | 国产精品卡一卡二卡三| 精品人伦一区二区色婷婷| 欧美性videosxxxxx| 91亚洲精品乱码久久久久久蜜桃| 亚洲一区二区影院| 国产精品免费av| 亚洲人成亚洲人成在线观看图片| 一区二区三区四区国产精品| 国产精品福利一区二区三区| 国产另类ts人妖一区二区| 日韩成人av影视| 国产婷婷色一区二区三区在线| 欧美色视频在线观看| 欧美日韩一区二区电影| 欧美一级在线免费| 亚洲h动漫在线| 久久久久久免费网| 欧美日韩成人在线一区| 亚洲高清久久久| 欧美一区二区三区性视频| 国产在线国偷精品产拍免费yy| 国产精品久久久一区麻豆最新章节| 一本色道**综合亚洲精品蜜桃冫| 亚洲一区成人在线| 欧美变态口味重另类| 91片在线免费观看| 蜜臀va亚洲va欧美va天堂| 国产欧美一区二区三区鸳鸯浴 | 男女性色大片免费观看一区二区| 2019国产精品| 欧美在线啊v一区| 经典三级一区二区| 亚洲一区二区三区四区在线免费观看 | 国产原创一区二区| 亚洲视频在线一区二区| 日韩欧美成人一区二区| av激情综合网| 久久精品国产999大香线蕉| 中文字幕在线一区二区三区| 日韩一级大片在线| 欧美在线观看一区| 成人午夜电影久久影院| 免费人成在线不卡| 亚洲图片自拍偷拍| 国产精品短视频| 欧美变态tickling挠脚心| 91久久精品日日躁夜夜躁欧美| 国产在线视频一区二区| 性做久久久久久免费观看欧美| 国产精品美女一区二区三区 | 国产精品久久久久久久久免费桃花 | 国产午夜精品一区二区三区嫩草| 欧美日韩国产一二三| av成人动漫在线观看| 国内成人自拍视频| 蜜桃传媒麻豆第一区在线观看| 亚洲欧美日韩人成在线播放| 欧美极品美女视频| 久久日一线二线三线suv| 91精品黄色片免费大全| 在线观看区一区二| 色婷婷一区二区三区四区| 成人黄色小视频在线观看| 国产黄人亚洲片| 免费av网站大全久久| 亚洲第一福利一区| 亚洲不卡一区二区三区| 一区二区三区免费观看| 亚洲免费三区一区二区| 亚洲区小说区图片区qvod| 国产精品久久影院| 国产精品丝袜黑色高跟| 国产精品丝袜91| 亚洲日本电影在线| 一区二区三区四区五区视频在线观看| 18欧美亚洲精品| 亚洲欧美视频一区| 一区二区三区免费看视频| 亚洲美女视频在线观看| 一区二区三区加勒比av| 亚洲成a人在线观看| 日韩电影网1区2区| 九九国产精品视频| 国产另类ts人妖一区二区| 91成人在线观看喷潮| 色琪琪一区二区三区亚洲区| 欧美中文字幕一二三区视频| 欧美日韩国产一级二级| 日韩一区二区视频| 久久精品欧美日韩精品| 国产精品久久久久久久蜜臀| 中文字幕一区二区视频| 亚洲黄网站在线观看| 石原莉奈在线亚洲三区| 精品一区二区国语对白| 成人午夜短视频| 一本到三区不卡视频| 欧美日韩激情在线| 精品国产1区二区| 亚洲日本在线视频观看| 午夜天堂影视香蕉久久| 国产精品亚洲一区二区三区在线| 99精品偷自拍| 91精品免费在线| 国产午夜久久久久| 亚洲综合色区另类av| 日本不卡一区二区三区 | 青青草成人在线观看| 高清在线不卡av| 欧美日韩视频在线一区二区| 亚洲精品一线二线三线| 自拍视频在线观看一区二区| 日本vs亚洲vs韩国一区三区二区| 国产精品正在播放| 欧美日韩视频在线观看一区二区三区| 欧美精品一区二区三区四区| 亚洲人午夜精品天堂一二香蕉| 五月天亚洲婷婷| 成人一二三区视频| 91精品国产综合久久精品app| 久久久久久久精| 日韩av在线免费观看不卡| 成人高清在线视频| 欧美成人r级一区二区三区| 亚洲欧美一区二区三区孕妇| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲一区二区三区在线| 高清日韩电视剧大全免费| 日韩一级高清毛片| 夜夜爽夜夜爽精品视频| 国产一区二区久久| 9191成人精品久久| 一区二区国产盗摄色噜噜| 成人手机在线视频| 精品国内二区三区| 奇米色一区二区| 在线观看亚洲a| 亚洲欧美激情视频在线观看一区二区三区| 蜜桃视频免费观看一区| 欧美裸体一区二区三区| 一区二区免费看| 91丨九色丨蝌蚪富婆spa| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩成人免费看| 欧美亚洲国产一区二区三区va | 欧美丝袜自拍制服另类| 日韩一区日韩二区| 国产91精品一区二区| 久久久噜噜噜久久人人看| 久久精品国产色蜜蜜麻豆| 欧美精品丝袜中出| 日韩高清不卡一区二区三区| 欧美三区在线观看| 蜜桃久久av一区| 日韩欧美在线网站| 丝袜亚洲另类丝袜在线| 欧美男生操女生| 三级精品在线观看| 欧美一级生活片| 精品午夜一区二区三区在线观看| 日韩女同互慰一区二区|