📄 os_view.c
字号:
/*
*********************************************************************************************************
* 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"
/*
*********************************************************************************************************
* 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)
{
INT8U err;
#if OS_TASK_NAME_SIZE > 0
OSTaskNameSet(OS_STAT_PRIO, "uC/OS-II Stat", &err);
OSTaskNameSet(OS_IDLE_PRIO, "uC/OS-II Idle", &err);
#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)
{
INT8U prio;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -