📄 cmd.c
字号:
/******************************************************************************
Copyright (c) 2006 by RockOS.
All rights reserved.
This software is supported by the Rock Software Workroom only.
Any bugs please contact the author with e-mail or QQ:
E-mail : baobaoba520@yahoo.com.cn
QQ : 59681888
*******************************************************************************
File name : cmd.c
Description : All system commands for RockOS' shell.
:
:
Auther : sunxinqiu
History :
2006-3-15 first release.
******************************************************************************/
#include "os.h"
#if MAX_SHELL_CMD > 0
/******************************************************************************
Function : int help(int argc, char * argv[])
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return : always 0.
Description : list all register commands in RockOS's shell.
:
******************************************************************************/
int help(int argc, char * argv[])
{
U32 handle;
U32 length;
OS_printf("\n command Description\n");
OS_printf("================ =============================================================");
for (handle = 0; handle < MAX_SHELL_CMD; handle++)
{
if (g_shCmd[handle].state == OS_CMD_REG)
{
OS_printf("\n%-16s ", g_shCmd[handle].name);
for (length = 0; length < strlen(&g_shCmd[handle].descript[0]); length++)
{
if (g_shCmd[handle].descript[length] == '\\')
{
OS_putchar('\\');
OS_putchar('\\');
}
else
{
OS_putchar(g_shCmd[handle].descript[length]);
}
if ((length != 0)&&((length%80)==0))
{
OS_printf("\n ");
}
}
}
}
OS_printf("\n===============================================================================\n");
return 0;
}
/******************************************************************************
Function : int version(int argc, char * argv[])
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return : always 0
Description : show the RockOS's version and techenic supporting information.
:
******************************************************************************/
int version(int argc, char * argv[])
{
OS_printf("*******************************************************************************\n");
OS_printf("* RockOS 教学板, 版本 1.0, 发布日期: 2006-03-15\n");
OS_printf("* 编译时间: %s %s\n", __DATE__, __TIME__);
OS_printf("* 作者保留所有权利.\n");
OS_printf("* 本软件由孙新秋个人开发, 并持有知识产权, 联系方式:\n");
OS_printf("* E-mail : baobaoba520@yahoo.com.cn\n");
OS_printf("* QQ : 59681888\n");
OS_printf("* 支持信息:\n");
OS_printf("* 教学版本不享受商业性的技术支持服务, 但可以通过以下方式向作者或其他使用者提\n");
OS_printf("* 问从而获得答案:\n");
OS_printf("* * 在BBS上提问, 网站地址为http://www.itsn.cn/bbs/index.asp?boardid=47\n");
OS_printf("* * 向作者发送E-mail: baobaoba520@yahoo.com.cn\n");
OS_printf("* * 通过QQ(59681888)向作者留言\n");
OS_printf("* 错误报告:\n");
OS_printf("* 您可以通过以下几种方式向作者反馈RockOS在使用中出现的问题:\n");
OS_printf("* * 向作者发送E-mail: baobaoba520@yahoo.com.cn\n");
OS_printf("* * 通过QQ(59681888)向作者留言\n");
OS_printf("* * 在http://www.itsn.cn/bbs/index.asp?boardid=47网站公开你发现的错误, 和错\n");
OS_printf("* * 误产生的条件信息\n");
OS_printf("* 无论以何种方式反馈, 都希望您能提供详细的产生条件, 以方便作者定位错误所在, \n");
OS_printf("* 非常感谢您对RockOS的支持与厚爱!!!\n");
OS_printf("*******************************************************************************\n");
OS_printf("* 重要提示:\n");
OS_printf("* * 您所购买的是教学版本, 目的仅限于个人学习, 此软件不可以作为商业用途\n");
OS_printf("* * 您不能以任何方式向其他任何个人或单位提供RockOS的任何代码\n");
OS_printf("* * 作者不保证及时地公布所有由教学版的其他用户或作者自己测试时所发现的错误,\n");
OS_printf("* 也不保证可以及时修复所有已知问题, 因此教学版也不应作为商业用途.\n");
OS_printf("* * 如果您选中RockOS作为您公司某项产品的OS, 我将深感荣幸, 但同时也提醒与我联\n");
OS_printf("* 以获得商业版本. 与教学版本相比,商业版本提供更丰富的功能和完善的售后服务\n");
OS_printf("* 和技术支持, 从而帮您尽可能多地缩短产品的开发周期. 详情欢迎垂询!!!\n");
OS_printf("*******************************************************************************\n");
return 0;
}
/******************************************************************************
Function : int memShow(int argc, char * argv[])
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return : 0 success, or -1 for no-exist memory block.
Description :
:
******************************************************************************/
int memShow(int argc, char * argv[])
{
int freeBlkNum;
int i;
freeBlkNum = g_validMemBlkNum - g_usedMemBlkNum;
OS_printf("RockOS heap memory total information:\n");
OS_printf("Heap start address: 0x%08x\n", (U32)g_memStartAddr);
OS_printf("Heap end address : 0x%08x\n\n", (U32)g_memEndAddr);
OS_printf("Heap memory managed by memory block:\n");
OS_printf("Total Used Free\n");
OS_printf("========== ========== ==========\n");
OS_printf("%-10d %-10d %-10d\n",
g_validMemBlkNum * MEM_BLOCK_SIZE,
g_usedMemBlkNum * MEM_BLOCK_SIZE,
freeBlkNum * MEM_BLOCK_SIZE);
OS_printf("==============================================\n\n");
OS_printf("RockOS memory block information:\n");
OS_printf("Memory block size : [%d]Bytes per block\n\n", MEM_BLOCK_SIZE);
OS_printf("Total Valid Used Free\n");
OS_printf("========== ========== ========== ==========\n");
OS_printf("%-10d %-10d %-10d %-10d\n",
MEM_BLOCK_NUM,
g_validMemBlkNum,
g_usedMemBlkNum,
freeBlkNum);
OS_printf("==============================================\n\n");
/*
OS_printf("Busy Blocks:\n");
for (i = 0; i < MEM_BLOCK_NUM; i++)
{
if (g_memCb[i].state != MEM_BLK_FREE)
{
OS_printf("Block [%d], start address: [0x%08x]\n", i, g_memCb[i].start_addr);
}
}
*/
return 0;
}
/******************************************************************************
Function : int memDump(int argc, char * argv[])
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return : always 0
Description : dump the memory contents.
:
******************************************************************************/
int memDump(int argc, char * argv[])
{
static U8 * pDefault = (U8 *)(-1);
U32 size;
U32 addr;
U32 alignedAddr;
U32 seq;
U8 * pch;
char line[132];
char value[4];
char string[20];
if (argc <= 1)
{
if (pDefault == (U8 *)(-1))
{
OS_printf("Command:\n");
OS_printf(" To dump memory buffer.\n");
OS_printf("Usage:\n");
OS_printf(" ->d startAddr, size\n");
return 0;
}
size = 256;
}
else if (argc == 2)
{
pDefault = (U8 *)str2int(argv[1]);
size = 256;
}
else
{
pDefault = (U8 *)str2int(argv[1]);
size = str2int(argv[2]);
}
if (size > 4096)
{
size = 4096;
}
addr = (unsigned int)pDefault;
alignedAddr = addr & 0xfffffff0;
while (alignedAddr < addr + size)
{
seq = 0;
memset (&value[0], 0, 4);
memset (&string[0], 0, 20);
memset (&line[0], 0, 132);
sprintf(&line[0], "%08x: ", alignedAddr);
/* the leading 8 characters. */
while (seq < 8)
{
if ((alignedAddr+seq < addr)||(alignedAddr+seq >= addr+size))
{
sprintf (&value[0], " ");
}
else
{
pch = (unsigned char *)(alignedAddr+seq);
sprintf (&value[0], "%02x ", *pch);
}
strcat(&line[0], &value[0]);
memset (&value[0], 0, 4); // can be deleted.
seq++;
}
/* a "-" if necessary. */
if ((alignedAddr+seq < addr)||(alignedAddr+seq >= addr+size))
{
sprintf (&value[0], " ");
}
else
{
sprintf (&value[0], "- ");
}
strcat(&line[0], &value[0]);
memset (&value[0], 0, 4); // can be deleted.
/* the next 8 characters. */
while (seq < 16)
{
if ((alignedAddr+seq < addr)||(alignedAddr+seq >= addr+size))
{
sprintf (&value[0], " ");
}
else
{
pch = (U8 *)(alignedAddr+seq);
sprintf (&value[0], "%02x ", *pch);
}
strcat(&line[0], &value[0]);
memset (&value[0], 0, 4); // can be deleted.
seq++;
}
for (seq = 0; seq < 16; seq++)
{
pch = (U8 *)(alignedAddr+seq);
if ((alignedAddr+seq < addr)||(alignedAddr+seq >= addr+size))
{
string[seq] = ' ';
}
else if ((*pch > 31)&&(*pch < 127))
{
string[seq] = *pch;
}
else
{
string[seq] = '.';
}
}
OS_printf("%s\t%s\n", &line[0], &string[0]);
alignedAddr += 16;
}
pDefault += size;
return 0;
}
/******************************************************************************
Function :
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return :
Description :
:
******************************************************************************/
int fsmShow(int argc, char * argv[])
{
HFSM hfsm;
if (argc == 1)
{
hfsm = NULL_FSM;
}
else
{
hfsm = str2int(argv[1]);
}
if (hfsm == NULL_FSM)
{
fsmShowAll();
}
else if (hfsm < MAX_FSM_NUM)
{
fsmShowSingle(hfsm);
}
else
{
OS_printf("Fsm [%d] out of range, max value is [%d]!!!\n", hfsm, MAX_FSM_NUM-1);
}
return 0;
}
/******************************************************************************
Function : int queueShow(int argc, char * argv[])
Params : argc - the argument count (including command name).
: argv - the arguments (argv[0] is the command name)
:
:
Return : always 0
Description : display a special queue's detail information or all queues'
: adapt information.
******************************************************************************/
int queueShow(int argc, char * argv[])
{
HQUEUE queue;
if (argc == 1)
{
queue = NULL_QUEUE;
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -