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

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

?? coffloader.cpp

?? dsp2808控制的代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
	   m_swbplist = b;
   }
   return(TRUE);
}
/*F***************************************************************************
* NAME: AddSwbp( char * name ) 
*
* DESCRIPTION:  Add a software breakpoint to the list and put it in memory.
*
*F***************************************************************************/
BOOL CoffLoader::AddSwbp( char * name )
{

    SWBP_SYMBOL *  new_bp = NULL;
    SYMBOL      *  s = NULL;
    TEVT_DESC      Evt;

    // Always test for connection to prevent user calling in disconnected
    // state or with NULL handles.
    if( CheckConnection() == FALSE ) {
        return( FALSE );
    }

    s = FindSymbol( name );
    if( s == NULL )
        return( FALSE );

    Evt.EvtId = 0;
    Evt.Taddr = s->symaddr;
    Evt.Space = (s->sympage == 0) ? M_PROGRAM : M_DATA;
    Evt.Type  = EVT_SWBP;

    if( m_pSdti_Intf->pEvt->Add( m_Sdti_Hndl, &Evt ) == FALSE )
	    return( FALSE );

    new_bp       = (SWBP_SYMBOL *)new( SWBP_SYMBOL );
    if( new_bp == NULL )
       return( FALSE );
    new_bp->s    = s;
    new_bp->id   = Evt.EvtId;
    new_bp->prev = NULL;
    new_bp->next = m_swbplist;

    // Set previous to link backwards
    if( m_swbplist != NULL ) {
        m_swbplist->prev = new_bp;
    }
    // Set head to new bp
    m_swbplist   = new_bp;

    return( TRUE );
}

/*F***************************************************************************
* NAME: AddSwbp( char * name ) 
*
* DESCRIPTION:  Delete a swbp from memory and from the list.  If we get an
*               error on the delete then we will still take it out of the 
*               list.
*
*F***************************************************************************/
BOOL CoffLoader::DeleteSwbp( char * name )
{

    SWBP_SYMBOL *  bp = NULL;
    SWBP_SYMBOL *  previous;
    SWBP_SYMBOL *  next;
    TEVT_DESC      Evt;
    BOOL           Success = TRUE;

    // Always test for connection to prevent user calling in disconnected
    // state or with NULL handles.
    if( CheckConnection() == FALSE ) {
        return( FALSE );
    }

    if( m_pSdti_Intf->pExe->IsRunning( m_Sdti_Hndl ) == TRUE )
        return( FALSE );

    bp = FindSwbp( name );
    if( bp == NULL )
        return( FALSE );

    Evt.EvtId = 0;
    Evt.Taddr = bp->s->symaddr;
    Evt.Space = (bp->s->sympage == 0) ? M_PROGRAM : M_DATA;
    Evt.Type  = EVT_SWBP;

    Success = m_pSdti_Intf->pEvt->Delete( m_Sdti_Hndl, bp->id );

    previous = bp->prev;
    next     = bp->next;
    delete( bp );

    if( previous == NULL ) 
    {   // Was top of list, just move up
        m_swbplist = next;
    }
    else 
    { 
        if( next == NULL ) 
        {   // Was at the bottom of list just patch previous
            previous->next = NULL;
        }
        else
        {  // In the middle of the list so patch preious and next
            previous->next = next;
            next->prev     = previous;
        }
    }

    return( Success );
}

/*F***************************************************************************
* NAME: LoadGeneric   
*
* DESCRIPTION: Main entry point of the application worker thread.
*
*
*F***************************************************************************/
void CoffLoader::LoadGeneric( LPVOID lpParam )
{
    DWORD RanTheTest          = 0;
    DWORD Error_CheckPattern  = 0;
    DWORD Error_AddressAsData = 0;
    DWORD Error_AltPattern    = 0;
	DWORD Error_Can           = 0;
	DWORD Error_TxAToRxB      = 0;
	DWORD Error_TxBToRxA      = 0;
	DWORD Error_I2C           = 0;

    BOOL  TestPassed          = TRUE;

    // Fetch the SDLoader object that called this thread 
    CSDLoaderDlg* sdloaderObject = ( ( CSDLoaderDlg* )lpParam );

    // User inputs
    m_entryPoint        = sdloaderObject->m_entryPoint;
    m_useAltEntry       = sdloaderObject->m_useAltEntry;

	m_verboseError      = sdloaderObject->m_ErrorVerbose;
	m_verboseMessage    = sdloaderObject->m_MessageVerbose;
	m_SciLoopBack       = sdloaderObject->m_SciLoopBack;
	m_CanLoopBack       = sdloaderObject->m_CanLoopBack;
	m_I2CLoopBack       = sdloaderObject->m_I2CLoopBack;

    // Enviroment variables 
    m_mainWindow        = sdloaderObject->m_mainWindow;
    m_workingDirectory  = sdloaderObject->m_workingDirectory;

    // Path variables 
    m_driverPath        = sdloaderObject->m_driverPath;
    m_driverName        = sdloaderObject->m_driverName;
    m_targetPath        = sdloaderObject->m_targetPath;
    m_boardName         = sdloaderObject->m_boardName;

    // Processor Variables 
    m_procFamily        = sdloaderObject->m_procFamily;
    m_procName          = sdloaderObject->m_procName;
    m_procAddr          = sdloaderObject->m_procAddr;
    m_coffFileName      = sdloaderObject->m_coffFileName;

	m_ExecTimeoutMs      = 20000;  // ~20 seconds

	m_BoardFile = "DevBoardName=" + m_workingDirectory;
	int Len = m_BoardFile.GetLength();
	if( m_BoardFile[Len-1] == '\\' )
		m_BoardFile += m_boardName;
	else
		m_BoardFile += '\\' + m_boardName;

    
    // In order to load a program using SD device drivers, the
    // drivers need to located and use configuration files on the computer.
    // The driver itself needs to located and loaded for use in the
    // application.  This code set the working directory path to were these
    // files reside.  Note that some emulation drivers require the file
    // rtdx.dll.  Generally this file is copied from <CCS_INSTALL>\ccs\bin
    // directory into the current executable directory. Note that RTDX is
    // not used by this app but emulation drivers still have to find this
    // dll.
    SetCurrentDirectory( m_driverPath );

    if( OpenConnection() == FALSE ) {
        goto LOADGENERIC_ERROR;
    }

    
    //  Reset the processor to known good state.
    // 
	if( DoReset() == FALSE )
    {
        ErrMsg( "ERROR \tFailed to reset the Target." );
        goto LOADGENERIC_ERROR;
    }

    
    // Loading a coff file requires an in depth knowledge of the
    // how a coff file is structured.  The raw data is extracted from file
    // and loaded onto the processor through a series of memory writes.
    // The functions below take care of the extraction and writing of data.
    // The "entry point" to the program is set after the memory writes allowing
    // for program execution to begin.
    // 
    if ( ! LoadCoff( ) )
    {
        ErrMsg( "ERROR \tFailed to Load Coff File." );
        goto LOADGENERIC_ERROR;
    }

    // Go to main before setting any test variables
    if( GoMain() == FALSE )
    {
        ErrMsg( "ERROR \tCannot goto main." );
        goto LOADGENERIC_ERROR;
    }

    // Set variable to indicate test has not been run yet
    if( WriteToSymbol("_RanTheTest",  &RanTheTest ) == FALSE )
    {
        ErrMsg( "ERROR \tFailed to set test variables" );
        goto LOADGENERIC_ERROR;
    }

	// Enable SCI test if selected
	if( m_SciLoopBack == TRUE )
	{
		DWORD Val = 1;
		WriteToSymbol("_SciLoopBack",  &Val );
	}

	// Enable CAN test if selected
	if( m_CanLoopBack == TRUE )
	{
		DWORD Val = 1;
		WriteToSymbol("_CanLoopBack",  &Val );
	}

	// Enable CAN test if selected
	if( m_I2CLoopBack == TRUE )
	{
		DWORD Val = 1;
		WriteToSymbol("_I2CLoopBack",  &Val );
	}

    // Start test program running and wait for breakpoint.  Test code
    // has a breakpoint embedded so it should stop when done or simply
    // timeout.
	Message( "Running Target" );
    if ( RunTargetTillDone() == FALSE )
    {
        ErrMsg( "ERROR \tFailed to run test to completion" );
        goto LOADGENERIC_ERROR;
    }

    // These are "C" symbol names so they have a leading '_'.
    if(    ( ReadFromSymbol("_RanTheTest",  &RanTheTest                  ) == FALSE )
        || ( ReadFromSymbol("_Error_CheckPattern",  &Error_CheckPattern  ) == FALSE )
        || ( ReadFromSymbol("_Error_AddressAsData", &Error_AddressAsData ) == FALSE )
        || ( ReadFromSymbol("_Error_AltPattern",    &Error_AltPattern    ) == FALSE )
		|| ( ReadFromSymbol("_Error_Can",           &Error_Can           ) == FALSE )
		|| ( ReadFromSymbol("_Error_TxAToRxB",      &Error_TxAToRxB      ) == FALSE )
		|| ( ReadFromSymbol("_Error_TxBToRxA",      &Error_TxBToRxA      ) == FALSE )
		|| ( ReadFromSymbol("_Error_I2C",           &Error_I2C           ) == FALSE ))

    {
        ErrMsg( "ERROR \tFailed to read test results." );
        goto LOADGENERIC_ERROR;
    }

    if( RanTheTest == 0 ) {
        ErrMsg( "ERROR \tFailed to run the memory tests" );
        TestPassed = FALSE;
    }

    if( Error_CheckPattern != 0 ) {
        ErrMsg( "ERROR \tFailed memory pattern test." );
        TestPassed = FALSE;
    }

    if( Error_AddressAsData != 0 ) {
        ErrMsg( "ERROR \tFailed memory address==data test." );
        TestPassed = FALSE;
    }

    if( Error_AltPattern != 0 ) {
        ErrMsg( "ERROR \tFailed memory alt pattern test." );
        TestPassed = FALSE;
    }

	if( TestPassed == TRUE ) {
        Message( "Memory Tests Passed");
	}

	if( m_CanLoopBack == TRUE ) {

		if( Error_Can != 0 ) {
			ErrMsg( "ERROR \tFailed CAN loopback test." );
			TestPassed = FALSE;
		} else {
			Message( "CAN Loop Back Tests Passed");
		}
	}

	if( m_SciLoopBack == TRUE ) {
		if( Error_TxAToRxB != 0 ) {
			ErrMsg( "ERROR \tFailed SCI TXA to RXB." );
			TestPassed = FALSE;
		} else {
			Message( "SCI TXA to RXB Tests Passed");
		}

		if( Error_TxBToRxA != 0 ) {
			ErrMsg( "ERROR \tFailed SCI TXB to RXA." );
			TestPassed = FALSE;
		}else {
			Message( "SCI TXB to RXA Tests Passed");
		}
	}

	if( m_I2CLoopBack == TRUE ) {

		if( Error_I2C != 0 ) {
			ErrMsg( "ERROR \tFailed I2C loopback test." );
			TestPassed = FALSE;
		} else {
			Message( "I2C Loop Back Tests Passed");
		}
	}

    if( TestPassed == TRUE ){
        ErrMsg( "\tPASSED\tPASSED\tPASSED" );
        ErrMsg( "\tPASSED\tPASSED\tPASSED" );
        ErrMsg( "\tPASSED\tPASSED\tPASSED" );
        ErrMsg( "\tPASSED\tPASSED\tPASSED" );
    }

    //RealtimeDemo();

LOADGENERIC_ERROR:


    // Close the emulation connection
    CloseConnection();

    /* Post a Message to the Dialog Window to notify of completion */ 
    m_mainWindow->PostMessage( UWM_ONTHREADSTOP, NULL, NULL );

	// Restore the working directory as we changed it to load the driver
    SetCurrentDirectory( m_workingDirectory );

    return;
}


BOOL CoffLoader::RealtimeDemo()
{

    DWORD  SavedTimeout     = m_ExecTimeoutMs;
    DWORD  EnableInterrupts = 1;
    DWORD  ToggleUpdate     = 1;
    DWORD  TogglePeriod     = 0;
    BOOL   isEvt;
    BOOL   Success          = TRUE;
    DWORD  Loop             = 10;
    DWORD  MaxPasses        = 10;

    // The test code stopped on an embedded SW breakpoint (ESTOP0).
    // We have to step off of this breakpoint before setting up for
    // realtime mode.  This should ensure that all the breakpoint
    // state has been cleared out before attempting to enter realtime
    // mode.
    if( StepTarget( 1 ) == FALSE )
    {
        ErrMsg( "ERROR \tFailed to step over the embedded breakpoint" );
        return( FALSE );
    }

    // Read the current update rate.  We use this as our base value
    if( ReadFromSymbol("_TogglePeriod", &ToggleUpdate ) == FALSE )
    {
        ErrMsg( "ERROR \tFailed to read _TogglePeriod parameter" );
        return( FALSE );
    }

    // Set EnableInterrupts to 1 to enable the realtime interrupt.  If target
    // code sees this value as 1 then it will enable the 28xx timer0 for
    // the realtime demo.
    if( WriteToSymbol("_EnableInterrupts", &EnableInterrupts ) == FALSE )
    {
        ErrMsg( "ERROR \tFailed to write to EnableInterrupts" );
        return( FALSE );
    }

    // Enter realtime mode
    if( EnableRealtimeMode() == FALSE )
    {
        ErrMsg( "ERROR \tFailed to enter realtime mode" );
        return( FALSE );
    }
    // Goto Polite realtime mode
    if( SwitchRealtimeMode( REALMODE_POLITE ) == FALSE )
    {
        ErrMsg( "ERROR \tFailed to enter polite realtime mode" );
        return( FALSE );
    }

    // Now run the code whichl will immediately hit another breakpoint
    // following the interrupt setup.  At this point the main cpu loop will
    // have stopped but the critical interrupt will continu to run.  We
    // can show this by feeding the ISR a update value to change the LED.
    if( RunTarget() == FALSE )
    {
        ErrMsg( "ERROR \tFailed to run target in realtime mode" );
        return( FALSE );
    }

    // We will loop writing to ToggleUpdate and reading ToggleRate to
    // verify it was set.  Then wait for a while and adjust the delay.
    // We are going to use the WaitForHaltEvent() function to politely
    // wait for an event.  Once we get going there should not be any halt
    // events but this will also catch errors.
    //
    m_ExecTimeoutMs = 1000;

    while( Loop-- )
    {
        isEvt = WaitForHaltEvent();
        if( isEvt == TRUE )
        {
            // We should fall into this loop right after running.  But on
            // subsequent calles we should not unless there is an error.
            if( m_Evt.System != EVT_SYS_NONE )
            {
                ErrMsg( "ERROR \tError during realtime" );
                Success = FALSE;
                goto EXIT_REALTIME_DEMO;
            }
            if( m_Evt.Type == EVT_SWBP ){
                // This is the breakpoint that should stop main loop
                // exeuction but allow interrupts to proceed.
                Message("Realtime demo is stopped on breakpoint");
                Message("However target interrupts are still active");
            }
        }
        ToggleUpdate += (ToggleUpdate/2);

        if( WriteToSymbol("_ToggleUpdate", &ToggleUpdate ) == FALSE )
        {
            ErrMsg( "ERROR \tFailed to write _ToggleUpdate parameter" );
            return( FALSE );
        }
        
        MaxPasses = 10;
        do {

            if( ReadFromSymbol("_TogglePeriod", &TogglePeriod ) == FALSE )
            {
                ErrMsg( "ERROR \tFailed to read _TogglePeriod parameter" );
                return( FALSE );
            }
        }while( (TogglePeriod != ToggleUpdate ) && ( MaxPasses-- > 0 ) );

        if( MaxPasses <= 0 )
            break;
    }

EXIT_REALTIME_DEMO:
    m_ExecTimeoutMs = SavedTimeout;
    return( Success );  
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美日韩一区二区三区| 欧美四级电影在线观看| 97se亚洲国产综合自在线不卡| 欧美在线啊v一区| 国产日本亚洲高清| 日本网站在线观看一区二区三区 | 成人激情电影免费在线观看| 欧美日韩一区二区三区不卡| 国产欧美1区2区3区| 蜜桃视频一区二区三区| 91国偷自产一区二区三区成为亚洲经典| 日韩免费看的电影| 亚洲成年人网站在线观看| a在线播放不卡| 久久精品亚洲精品国产欧美kt∨| 亚洲成av人影院| 色老汉一区二区三区| 国产精品久久三| 福利91精品一区二区三区| 日韩精品一区二区三区视频在线观看| 亚洲一二三级电影| 91一区二区在线| 最新热久久免费视频| 成人在线视频一区| 国产亲近乱来精品视频| 精品一区二区在线播放| 日韩精品自拍偷拍| 免费高清视频精品| 欧美一区二区三区的| 日韩高清不卡一区二区| 欧美丰满一区二区免费视频| 亚洲影院在线观看| 欧美偷拍一区二区| 亚洲成人免费电影| 欧美日韩美少妇| 午夜精品久久久久久久久| 欧美在线观看禁18| 亚洲bt欧美bt精品| 91精品综合久久久久久| 美国毛片一区二区| 久久综合九色综合97_久久久| 美女任你摸久久| 久久久精品蜜桃| 成人性生交大片| 亚洲猫色日本管| 欧美无砖专区一中文字| 丝袜诱惑亚洲看片| 日韩精品一区二区三区四区视频| 久久精品久久99精品久久| 欧美v国产在线一区二区三区| 精品一区二区三区在线观看| www成人在线观看| 夫妻av一区二区| 亚洲黄色av一区| 在线精品国精品国产尤物884a| 一区二区三区不卡视频| 在线观看91av| 国产精品 日产精品 欧美精品| 国产精品久久福利| 欧美在线综合视频| 麻豆久久一区二区| 国产欧美日韩精品在线| 色婷婷国产精品| 久久国产尿小便嘘嘘尿| 午夜视频久久久久久| 精品久久国产字幕高潮| 成人av网站在线观看| 亚洲韩国精品一区| 久久色在线观看| 在线日韩一区二区| 国产在线播放一区三区四| 成人欧美一区二区三区视频网页 | 亚洲欧洲无码一区二区三区| 欧美性色黄大片手机版| 国产在线一区观看| 亚洲午夜精品在线| 中文字幕不卡的av| 欧美日韩一区二区三区高清| 国产91在线看| 另类的小说在线视频另类成人小视频在线| 国产日韩一级二级三级| 欧美丰满少妇xxxxx高潮对白| www.亚洲免费av| 久久成人av少妇免费| 亚洲国产日韩一区二区| 国产亚洲一区二区在线观看| 欧美系列亚洲系列| a美女胸又www黄视频久久| 久久国产人妖系列| 午夜视黄欧洲亚洲| 亚洲精品国产无套在线观| 久久日韩精品一区二区五区| 欧美视频一区二| 91视频免费播放| 国产成人99久久亚洲综合精品| 日韩电影在线观看网站| 一区二区三区在线免费视频 | 一区二区三区在线免费视频 | 日韩三级精品电影久久久| 色偷偷一区二区三区| 粉嫩嫩av羞羞动漫久久久| 久久国内精品自在自线400部| 天堂成人国产精品一区| 亚洲一二三四久久| 亚洲免费观看高清完整| 中文字幕第一页久久| 久久这里只有精品6| 欧美一二三区精品| 日韩一卡二卡三卡| 欧美一区2区视频在线观看| 欧美丰满美乳xxx高潮www| 色婷婷精品久久二区二区蜜臂av| 97成人超碰视| 91网站在线观看视频| aa级大片欧美| 色综合久久久久久久久| 91视频观看免费| 色综合视频一区二区三区高清| a在线播放不卡| 在线观看免费亚洲| 欧美中文字幕亚洲一区二区va在线| 色婷婷精品久久二区二区蜜臀av| 色综合久久精品| 在线观看视频一区二区| 欧美三级蜜桃2在线观看| 欧美男人的天堂一二区| 欧美电视剧在线看免费| 久久―日本道色综合久久| 国产欧美视频一区二区| 国产精品久久久久婷婷| 亚洲精品网站在线观看| 午夜精品成人在线视频| 麻豆91在线播放| 国产成人激情av| 色狠狠一区二区| 91精品国产高清一区二区三区| 欧美成人伊人久久综合网| 久久综合av免费| 亚洲欧美一区二区久久| 亚洲成人一二三| 国产毛片精品国产一区二区三区| 国产成人免费视频网站高清观看视频| av一区二区久久| 欧美日韩三级一区二区| 日韩一级完整毛片| 国产精品麻豆视频| 视频一区二区三区入口| 国产精品一区一区| 欧美调教femdomvk| 久久无码av三级| 一区二区三区视频在线观看| 日本不卡一二三| 不卡的电影网站| 91精品国产综合久久久久久漫画| 国产女人aaa级久久久级| 一区二区三区成人在线视频| 韩国女主播一区| 色婷婷av久久久久久久| 精品噜噜噜噜久久久久久久久试看| 国产精品欧美经典| 青青草国产成人av片免费| 99re视频这里只有精品| 欧美成人性战久久| 亚洲黄色免费网站| 国产99久久久国产精品免费看| 欧美日韩精品专区| 国产精品丝袜91| 久久爱www久久做| 欧美视频一区在线| ...中文天堂在线一区| 另类综合日韩欧美亚洲| 欧美午夜精品一区二区蜜桃| 欧美激情一区二区在线| 免播放器亚洲一区| 欧美亚一区二区| 一区精品在线播放| 国产一区在线不卡| 91精品国产综合久久精品app| 亚洲欧洲在线观看av| 国产精品一区二区你懂的| 日韩午夜激情免费电影| 性做久久久久久久免费看| 91首页免费视频| 国产精品色哟哟| 国产成人精品影院| 精品国产成人系列| 另类小说欧美激情| 日韩一区二区在线观看视频 | 久久精品国产一区二区| 欧美色涩在线第一页| 中文字幕综合网| 成人性视频免费网站| 日本一区二区高清| 国产精品系列在线观看| 久久影视一区二区| 国产美女在线观看一区| 精品国内片67194| 精品一区二区三区久久| 精品国产91亚洲一区二区三区婷婷| 日韩av网站免费在线|