⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_view.c

📁 keil 下的ucOS移植程序。移植平台AT91SAM7S64.
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
*********************************************************************************************************
*                                           uC/OS-View
*
*                            (c) Copyright 2002, Micrium, Inc., WESTON, FL
*                                       All Rights Reserved
*
*
* Filename   : OS_VIEW.C
* Programmer : Jean J. Labrosse
*********************************************************************************************************
*/

#define  OS_VIEW_GLOBALS
#include "includes.h"
#include "OS_VIEWC.H"
#include "OS_VIEW.H"

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

#ifndef  OS_VIEW_SUPPORT_MEM
#define  OS_VIEW_SUPPORT_MEM               0                /* Current version doesn't support memory Rd/Wr    */
#endif
                                                            /* Inbound  packets (from PC)                      */
#define  OS_VIEW_PROTOCOL_RX_SD0        0xED                /* Start delimiters                                */
#define  OS_VIEW_PROTOCOL_RX_SD1        0x8C
#define  OS_VIEW_PROTOCOL_RX_ED         0x8D                /* End   delimiter                                 */

                                                            /* Outbound packets (to PC)                        */
#define  OS_VIEW_PROTOCOL_TX_SD0        0x8C                /* Start delimiters                                */
#define  OS_VIEW_PROTOCOL_TX_SD1        0xED
#define  OS_VIEW_PROTOCOL_TX_ED         0x8D                /* End   delimiter                                 */


#define  OS_VIEW_RX_STATE_SD0              0                /* waiting for start first  start delimiter (SD0)  */
#define  OS_VIEW_RX_STATE_SD1              1                /* waiting for start second start delimiter (SD1)  */
#define  OS_VIEW_RX_STATE_LEN              2                /* waiting for len byte                            */
#define  OS_VIEW_RX_STATE_DATA             3                /* waiting for data                                */
#define  OS_VIEW_RX_STATE_CHKSUM           4                /* waiting for checksum                            */
#define  OS_VIEW_RX_STATE_ED               5                /* waiting for end delimiter                       */

#define  OS_VIEW_TX_STATE_SD0 			   0                /* Transmit state machine states                   */
#define  OS_VIEW_TX_STATE_SD1 			   1
#define  OS_VIEW_TX_STATE_DATA_LEN 		   2
#define  OS_VIEW_TX_STATE_DATA 			   3
#define  OS_VIEW_TX_STATE_CHKSUM 		   4
#define  OS_VIEW_TX_STATE_ED 			   5
#define  OS_VIEW_TX_STATE_STR_LEN 		   6
#define  OS_VIEW_TX_STATE_STR_TYPE 		   7
#define  OS_VIEW_TX_STATE_STR_DATA		   8

#define  OS_VIEW_CMD_STEP_TICK_ON          0                /* Commands for tick stepping                      */
#define  OS_VIEW_CMD_STEP_TICK_OFF         1
#define  OS_VIEW_CMD_STEP_TICK_NEXT        2

/*$PAGE*/
/*
*********************************************************************************************************
*                                    LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  INT8U   OSView_CmdParsePkt(void);
static  void    OSView_CmdSendToApp(void);
static  void    OSView_CmdGetSysInfo(void);
static  void    OSView_CmdGetTaskList(void);
static  void    OSView_CmdGetTaskInfo(void);
static  void    OSView_CmdGetTaskInfo_InvalidTask(void);
static  INT8U   OSView_CmdGetTaskInfo_TCBStat(OS_TCB *ptcb);
static  void    OSView_CmdMemRdINT8U(void);
static  void    OSView_CmdMemRdINT16U(void);
static  void    OSView_CmdMemRdINT32U(void);
static  void    OSView_CmdMemWrINT8U(void);
static  void    OSView_CmdMemWrINT16U(void);
static  void    OSView_CmdMemWrINT32U(void);
static  void    OSView_CmdTickStep(void);
static  void    OSView_CmdTrace(void);

static  void    OSView_RxStoINT8U(INT8U data);
static  void    OSView_RxBufClr(void);
static  INT8U   OSView_RxGetINT8U(void);
static  INT16U  OSView_RxGetINT16U(void);
static  INT32U  OSView_RxGetINT32U(void);

static  void    OSView_TxStart(void);
static  void    OSView_TxStoINT8U(INT8U data);
static  void    OSView_TxStoINT16U(INT16U data);
static  void    OSView_TxStoINT32U(INT32U data);
static  void    OSView_TxStoPtr(void *ptr);
static  void    OSView_TxStoStr(char *s, int max_len);

/*$PAGE*/
/*
*********************************************************************************************************
*                                       INITIALIZE uC/OS-View
*********************************************************************************************************
*/

void  OSView_Init (void)
{
#if OS_VERSION < 280
    INT8U   err;

#if OS_TASK_NAME_SIZE > 0
    OSTaskNameSet(OS_TASK_STAT_PRIO, "uC/OS-II Stat", &err);
    OSTaskNameSet(OS_TASK_IDLE_PRIO, "uC/OS-II Idle", &err);
#endif
#endif

    OSTickStepState = OS_TICK_STEP_DIS;                     /* Disable the tick stepping mode                  */

    OSView_RxState = OS_VIEW_RX_STATE_SD0;                  /* Setup Rx and Tx state machines                  */
    OSView_TxState = OS_VIEW_TX_STATE_SD0;

    OSView_TerminalRxSetCallback((void (*)(INT8U))0);       /* Force terminal callback function to 'nothing'   */

    OSView_InitTarget();                                    /* Initialize target specific code                 */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                     uC/OS-View TASK CREATE HOOK
*
* Description: This function MUST be called by uC/OS-II's Task Create Hook function: OSTaskCreateHook().
*********************************************************************************************************
*/

void  OSView_TaskCreateHook (OS_TCB *ptcb)
{
    ptcb->OSTCBCyclesStart = OSView_TimeGetCycles();        /* Get the current start time for this task.       */
    ptcb->OSTCBCyclesTot   = 0;                             /* Update the task's total execution time          */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                     uC/OS-View TASK SWITCH HOOK
*
* Description: This function MUST be called by uC/OS-II's Task Switch Hook function: OSTaskSwHook().
*********************************************************************************************************
*/

void  OSView_TaskSwHook (void)
{
    INT32U  cycles;


    cycles                         = OSView_TimeGetCycles();    /* This task is done                           */
    OSTCBCur->OSTCBCyclesTot      += cycles - OSTCBCur->OSTCBCyclesStart;
    OSTCBHighRdy->OSTCBCyclesStart = cycles;                    /* Save absolute #cycles at task activation    */
}

/*
*********************************************************************************************************
*                                       uC/OS-View COMMAND HANDLER
*                                            (Parse Packet)
*********************************************************************************************************
*/

static  INT8U  OSView_CmdParsePkt (void)
{
    INT8U cmd0;


    cmd0 = OSView_RxGetINT8U();                             /* First byte contains command                     */
    if (cmd0 == 'C') {
        OSView_CmdSendToApp();
        OSView_TxBufCnt = 0;
        return (0);
    }
    if (OSView_TxBufCnt > 0) {                              /* Do cmds only if Tx of the last one is done      */
        return (0);
    }
    switch (cmd0) {
        case 's':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdGetSysInfo();
             break;

        case 't':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdGetTaskInfo();
             break;

        case 'l':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdGetTaskList();
             break;

        case 'S':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdTickStep();
             break;

        case 'T':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdTrace();
             break;

        case 'b':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemRdINT8U();
             break;

        case 'w':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemRdINT16U();
             break;

        case 0:
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemRdINT32U();
             break;

        case '1':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemWrINT8U();
             break;

        case '2':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemWrINT16U();
             break;

        case '4':
             OSView_TxStoINT8U(cmd0);
             OSView_CmdMemWrINT32U();
             break;

        default:
             break;
    }
    return (OSView_TxBufCnt);
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                       uC/OS-View COMMAND HANDLER
*                                         (Send to Application)
*
* Description: This routine transfers a character to the application.
*********************************************************************************************************
*/

static  void  OSView_CmdSendToApp (void)
{
    INT8U  rx_data;


    rx_data = OSView_RxGetINT8U();                               /* Read data typed at terminal                */
    if ((void *)OSView_TerminalRxCallbackFnct != (void *)0) {    /* See if callback is defined                 */
        (*OSView_TerminalRxCallbackFnct)(rx_data);               /* Pass character received to application     */
    }
}


/*
*********************************************************************************************************
*                                       uC/OS-View COMMAND HANDLER
*                                        (Get System Information)
*********************************************************************************************************
*/

static  void  OSView_CmdGetSysInfo (void)
{
    char    s[31];
	INT32U  stk_base;
	INT32U  stk_size;
	INT32U  time;


    time = OSTimeGet();									    /* Send current value of tick counter              */
    OSView_TxStoINT32U(time);
    OSView_TxStoPtr(OSTCBCur);                              /* Current task's OS_TCB                           */
    OSView_TxStoINT16U(OS_VERSION);                         /* Send uC/OS-II's version number                  */
    OSView_TxStoINT8U(1);                                   /* Indicate profiling information will be sent     */

	OSView_GetCPUName(&s[0]);                               /* Processor Name                                  */
    OSView_TxStoStr(s, 30);

	stk_base = OSView_GetIntStkBase();					    /* Interrupt stack base from port specific file    */
    OSView_TxStoINT32U(stk_base);

	stk_size = OSView_GetIntStkSize();					    /* Interrupt stack size from port specific file    */
    OSView_TxStoINT32U(stk_size);
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                       uC/OS-View COMMAND HANDLER
*                                            (Get Task List)
*********************************************************************************************************
*/

static  void  OSView_CmdGetTaskList (void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -