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

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

?? can_busload.c

?? 開放源碼實時操作系統源碼.
?? C
字號:
//==========================================================================
//
//        can_busload.c
//
//        CAN bus load test
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s):     Uwe Kindler
// Contributors:  Uwe Kindler
// Date:          2007-06-26
// Description:   CAN bus load test
//####DESCRIPTIONEND####


//===========================================================================
//                                INCLUDES
//===========================================================================
#include <pkgconf/system.h>

#include <cyg/infra/testcase.h>         // test macros
#include <cyg/infra/cyg_ass.h>          // assertion macros
#include <cyg/infra/diag.h>

// Package requirements
#if defined(CYGPKG_IO_CAN) && defined(CYGPKG_KERNEL)

#include <pkgconf/kernel.h>
#include <cyg/io/io.h>
#include <cyg/io/canio.h>


// Package option requirements
#if defined(CYGFUN_KERNEL_API_C)

#include <cyg/hal/hal_arch.h>           // CYGNUM_HAL_STACK_SIZE_TYPICAL
#include <cyg/kernel/kapi.h>

// We need two CAN channels
#if defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN0) && defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN1)


// The same baud rates are required because we send from one channel to the other one
#if CYGNUM_DEVS_CAN_LPC2XXX_CAN0_KBAUD == CYGNUM_DEVS_CAN_LPC2XXX_CAN1_KBAUD


// We need a large RX buffer
#ifdef CYGNUM_DEVS_CAN_LPC2XXX_CAN0_QUEUESIZE_RX_1024

#include "can_test_aux.inl" // include CAN test auxiliary functions
//===========================================================================
//                               DATA TYPES
//===========================================================================
typedef struct st_thread_data
{
    cyg_thread   obj;
    long         stack[CYGNUM_HAL_STACK_SIZE_TYPICAL];
    cyg_handle_t hdl;
} thread_data_t;


//===========================================================================
//                              LOCAL DATA
//===========================================================================
cyg_thread_entry_t can0_thread;
thread_data_t      can0_thread_data;
cyg_io_handle_t    hCAN_Tbl[2];


//===========================================================================
// Thread 0
//===========================================================================
void can0_thread(cyg_addrword_t data)
{
    cyg_uint32      len;
    cyg_can_message tx_msg;
    cyg_can_event   rx_event;
    cyg_uint32      i;
    cyg_uint32      rx_msg_cnt = 0;

    
    //
    // Prepeare message - we use a data length of 0 bytes here. Each received message
    // causes an iterrupt. The shortest message is a 0 data byte message. This will generate
    // the highest interrupt rate
    //
    CYG_CAN_MSG_SET_PARAM(tx_msg, 0, CYGNUM_CAN_ID_STD, 0, CYGNUM_CAN_FRAME_DATA);
    
    //
    // Now send 1024 CAN messages as fast as possible to stress the receiver of CAN
    // channel 1
    //
    for (i = 0; i< 1024; ++i)
    {
        tx_msg.id = i; 
        len = sizeof(tx_msg);
        if (ENOERR != cyg_io_write(hCAN_Tbl[1], &tx_msg, &len))
        {
            CYG_TEST_FAIL_FINISH("Error writing to channel 0");    
        }
    }
    
    //
    // Now try to receive all 1024 CAN messages. If all messages are received
    // and no overrun occured then the message processing is fast enought
    //
    while (1)
    {
        len = sizeof(rx_event);  
        //
        // First receive CAN event from real CAN hardware
        //
        len = sizeof(rx_event);
        if (ENOERR != cyg_io_read(hCAN_Tbl[0], &rx_event, &len))
        {
            CYG_TEST_FAIL_FINISH("Error reading from channel 1");   
        }
        
        if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
        {
            print_can_msg(&rx_event.msg, "RX chan 1:");
            rx_msg_cnt++;
            if (rx_msg_cnt == 1024)
            {
                CYG_TEST_PASS_FINISH("CAN load test OK");        
            }
        } // if (rx_event.flags & CYGNUM_CAN_EVENT_RX)
        else
        {
            print_can_flags(rx_event.flags, "");  
            if (rx_event.flags & CYGNUM_CAN_EVENT_OVERRUN_RX)
            {
                CYG_TEST_FAIL_FINISH("RX overrun for channel 1");       
            }
            
            if (rx_event.flags & CYGNUM_CAN_EVENT_ERR_PASSIVE)
            {
                CYG_TEST_FAIL_FINISH("Channel 1 error passive event");       
            }
            
            if (rx_event.flags & CYGNUM_CAN_EVENT_BUS_OFF)
            {
                CYG_TEST_FAIL_FINISH("Channel 1 bus off event");       
            }
        }
    } // while (1)
}


//===========================================================================
// Entry point
//===========================================================================
void cyg_start(void)
{
    CYG_TEST_INIT();

    //
    // open CAN device driver channel 1
    //
    if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN0_NAME, &hCAN_Tbl[0])) 
    {
        CYG_TEST_FAIL_FINISH("Error opening CAN channel 0");
    }
    

    //
    // open CAN device driver channel 2
    //
    if (ENOERR != cyg_io_lookup(CYGPKG_DEVS_CAN_LPC2XXX_CAN1_NAME, &hCAN_Tbl[1])) 
    {
        CYG_TEST_FAIL_FINISH("Error opening CAN channel 1");
    }
   
    //
    // create the main thread
    //
    cyg_thread_create(5, can0_thread, 
                        (cyg_addrword_t) 0,
                        "can_tx_thread", 
                        (void *) can0_thread_data.stack, 
                        1024 * sizeof(long),
                        &can0_thread_data.hdl, 
                        &can0_thread_data.obj);
                        
    cyg_thread_resume(can0_thread_data.hdl);
    
    cyg_scheduler_start();
}
#else // CYGNUM_DEVS_CAN_LPC2XXX_CAN0_QUEUESIZE_RX_1024
#define N_A_MSG "Channel 0 needs RX buffer size for 1024 events"
#endif

#else // CYGNUM_DEVS_CAN_LPC2XXX_CAN0_KBAUD == CYGNUM_DEVS_CAN_LPC2XXX_CAN1_KBAUD
#define N_A_MSG "Baudrate of channel 0 and 1 need to be equal"
#endif

#else // defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN0) && defined(CYGPKG_DEVS_CAN_LPC2XXX_CAN1)
#define N_A_MSG "Needs support for CAN channel 1 and 2"
#endif

#else // CYGFUN_KERNEL_API_C
#define N_A_MSG "Needs kernel C API"
#endif

#else // CYGPKG_IO_CAN && CYGPKG_KERNEL
#define N_A_MSG "Needs Kernel"
#endif

#ifdef N_A_MSG
void
cyg_start( void )
{
    CYG_TEST_INIT();
    CYG_TEST_NA(N_A_MSG);
}
#endif // N_A_MSG

//---------------------------------------------------------------------------
// EOF can_busload.c

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆精品theporn| 日韩一级黄色片| 色综合天天综合网天天看片| 欧美理论片在线| 久久久精品人体av艺术| 亚洲一区二区美女| 粉嫩高潮美女一区二区三区 | 亚洲一区二区三区精品在线| 蜜乳av一区二区三区| 色婷婷久久久综合中文字幕| 久久久精品天堂| 裸体一区二区三区| 欧美日韩精品一区二区| 国产精品免费丝袜| 国产成人综合在线观看| 日韩一区二区三区电影| 一级做a爱片久久| av成人免费在线| 国产色一区二区| 国产一区二区视频在线| 日韩欧美国产综合在线一区二区三区| 亚洲精品一二三区| caoporen国产精品视频| 国产精品人人做人人爽人人添| 精品影视av免费| 精品少妇一区二区三区日产乱码| 亚洲成av人综合在线观看| 色激情天天射综合网| 亚洲欧洲日本在线| 99久久伊人精品| 国产精品国产精品国产专区不蜜 | 国产在线麻豆精品观看| 久久夜色精品一区| 麻豆精品一区二区| 国产高清不卡二三区| 亚洲电影中文字幕在线观看| a美女胸又www黄视频久久| 国产欧美日韩另类一区| 国产麻豆视频精品| 久久午夜色播影院免费高清| 韩国av一区二区三区在线观看| 日韩欧美国产wwwww| 麻豆成人91精品二区三区| 欧美r级电影在线观看| 国内欧美视频一区二区| 久久嫩草精品久久久精品一| 国产成人在线色| 国产精品久久久久久久久免费相片 | 久久综合九色综合97_久久久| 麻豆精品视频在线| 国产亚洲精品免费| av一本久道久久综合久久鬼色| 中文一区在线播放| 在线观看国产91| 日本三级亚洲精品| 国产亚洲精品bt天堂精选| www.亚洲免费av| 亚洲国产综合91精品麻豆| 久久久不卡网国产精品二区| 日本三级亚洲精品| 久久精品无码一区二区三区| 成人app在线观看| 亚洲午夜在线视频| 欧美成人aa大片| 欧美日韩一区二区三区高清| 图片区小说区国产精品视频| 久久久久久久久久久久久女国产乱 | 国产拍欧美日韩视频二区| 99亚偷拍自图区亚洲| 五月天亚洲婷婷| 国产日韩欧美一区二区三区综合 | 国产精品女同互慰在线看| 欧美无人高清视频在线观看| 激情丁香综合五月| 国产日韩欧美亚洲| 欧美变态tickling挠脚心| 精品一区二区国语对白| 国产色产综合色产在线视频| 91丨porny丨户外露出| 日韩一区精品字幕| 日韩美女久久久| 欧美成人video| 欧洲亚洲精品在线| 国产成人av电影在线播放| 午夜精品一区二区三区三上悠亚| 国产婷婷精品av在线| 久久精品国产亚洲aⅴ| 欧美韩国日本一区| 欧美一级黄色录像| 欧美在线不卡一区| 99久久精品国产毛片| 精品一二三四区| 婷婷久久综合九色综合伊人色| 亚洲欧美影音先锋| wwww国产精品欧美| 日韩丝袜美女视频| 欧美精品日韩一区| 在线观看视频一区二区| 成人免费av资源| 91天堂素人约啪| 国产一区二区三区在线观看免费| 亚洲成人免费视| 亚洲美女少妇撒尿| 综合中文字幕亚洲| 国产精品久久看| 国产精品另类一区| 国产精品美女一区二区三区 | 一区二区三区欧美日韩| 亚洲美腿欧美偷拍| 国产丝袜在线精品| 精品三级av在线| 欧美一级日韩一级| 在线不卡中文字幕| 欧美三级一区二区| 欧美日韩综合色| 欧美羞羞免费网站| 欧美性受xxxx黑人xyx| 在线精品视频小说1| 色中色一区二区| 一本色道久久加勒比精品| 国产999精品久久| 亚洲欧美另类久久久精品| 正在播放亚洲一区| 91精品国产一区二区| 欧美日韩精品一区二区天天拍小说| 色婷婷av一区| 欧美日韩国产高清一区二区| 制服丝袜中文字幕亚洲| 91精品国产欧美一区二区| 国产精品久久久久久久午夜片| 久久久欧美精品sm网站| 久久九九影视网| 亚洲欧洲精品天堂一级| 亚洲综合久久久久| 奇米影视在线99精品| 精品一区二区三区的国产在线播放| 国产自产v一区二区三区c| 国产精品1024| 色悠悠久久综合| 欧美日韩一区在线| 精品国产三级a在线观看| 久久精品一二三| 亚洲欧美一区二区不卡| 日韩精品亚洲一区二区三区免费| 蜜桃一区二区三区在线观看| 大胆欧美人体老妇| 欧美三级中文字幕在线观看| 日韩精品最新网址| 国产一区二区在线看| 久久电影网电视剧免费观看| 国产精品自产自拍| 色综合久久精品| 日韩欧美视频在线| 中文字幕欧美一| 在线观看视频一区二区| 成人免费va视频| 成人性生交大片免费看中文网站| 国产在线看一区| 国产又黄又大久久| 国产91精品一区二区| 99在线精品视频| 欧美在线观看视频一区二区| 91福利在线导航| 麻豆高清免费国产一区| 91在线观看下载| 久久尤物电影视频在线观看| 亚洲精品久久久蜜桃| 国产尤物一区二区在线| 欧美日韩国产片| 亚洲视频中文字幕| 国产精品一区二区果冻传媒| 欧美日韩一区三区| 亚洲视频一区二区在线| 国内精品久久久久影院薰衣草 | 日韩av中文字幕一区二区| 成人在线一区二区三区| 日韩欧美国产高清| 久久精品日产第一区二区三区高清版 | 亚洲蜜臀av乱码久久精品| 精品制服美女久久| 欧美日韩国产大片| 亚洲激情图片小说视频| 国产成人精品午夜视频免费 | 老司机免费视频一区二区| 91蜜桃网址入口| 国产精品人人做人人爽人人添| 人妖欧美一区二区| 欧美精品粉嫩高潮一区二区| 亚洲蜜臀av乱码久久精品| 菠萝蜜视频在线观看一区| 久久久精品国产99久久精品芒果| 日韩精品一卡二卡三卡四卡无卡| 日本精品一区二区三区高清 | 亚洲影院久久精品| 波多野结衣中文字幕一区| 久久久久久久国产精品影院| 美女尤物国产一区| 日韩午夜激情av| 免费亚洲电影在线| 日韩欧美专区在线|