//***********************************************************************/
// Author : Garry
// Original Date : May,27 2004
// Module Name : shell.cpp
// Module Funciton :
// This module countains shell procedures.
// Last modified Author :
// Last modified Date :
// Last modified Content :
// 1.
// 2.
// Lines number :
//***********************************************************************/
#ifndef __STDAFX_H__
#include "..\INCLUDE\STDAFX.H"
#endif
#ifndef __KAPI_H__
#include "..\INCLUDE\KAPI.H"
#endif
#ifndef __IOCTRL_S_H__
#include "..\INCLUDE\IOCTRL_S.H"
#endif
#ifndef __SYSD_S_H__
#include "..\INCLUDE\SYSD_S.H"
#endif
#ifndef __RT8139_H__
#include "..\INCLUDE\RT8139.H"
#endif
#ifndef __EXTCMD_H__
#include "..\EXTCMD.H"
#endif
//
//Global variables.
//
#define MAX_HOSTNAME_LEN 16
#define VERSION_INFO "Hello China [Version 1.500]"
BYTE HostName[MAX_HOSTNAME_LEN] = {0}; //Host name.
__TASK_CTRL_BLOCK tcbShell = {0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0xffffffff}; //The shell's task control block.
__KTHREAD_CONTROL_BLOCK* g_pShellCtrlBlock = NULL; //The shell's kernal thread control
//block pointer.
__KERNEL_THREAD_OBJECT* g_lpShellThread = NULL; //The system shell's kernel thread
//object.
static BYTE CmdBuffer[MAX_BUFFER_LEN] = {0}; //Command buffer.
static WORD BufferPtr = 0; //Buffer pointer,points to the first
//free byte of the CmdBuffer.
//
//Global functions.
//
//
//The following function form the command parameter object link from the command
//line string.
//
__CMD_PARA_OBJ* FormParameterObj(LPSTR pszCmd)
{
__CMD_PARA_OBJ* pObjBuffer = NULL; //Local variables.
__CMD_PARA_OBJ* pBasePtr = NULL;
__CMD_PARA_OBJ* pTmpObj = NULL;
DWORD dwCounter = 0x0000;
DWORD index = 0x0000;
if(NULL == pszCmd) //Parameter check.
return NULL;
pObjBuffer = (__CMD_PARA_OBJ*)KMemAlloc(4096,KMEM_SIZE_TYPE_4K);
if(NULL == pObjBuffer)
goto __TERMINAL;
pBasePtr = pObjBuffer;
MemZero(pBasePtr,4096);
while(*pszCmd)
{
if(' ' == *pszCmd)
{
pszCmd ++;
continue;
} //Filter the space.
if(('-' == *pszCmd) || ('/' == *pszCmd))
{
pszCmd ++;
pObjBuffer->byFunctionLabel = *pszCmd;
pszCmd ++; //Skip the function label byte.
continue;
}
else
{
/*while((' ' != *pszCmd) && *pszCmd) //To find the first parameter.
{
pszCmd ++;
}
if(!*pszCmd)
break;
while(' ' == *pszCmd) //Filter the space.
pszCmd ++;
if(!*pszCmd)
break;*/
index = 0x0000;
while(('-' != *pszCmd) && ('/' != *pszCmd) && *pszCmd)
{
while((' ' != *pszCmd) && (*pszCmd) && (dwCounter <= CMD_PARAMETER_LEN))
{
pObjBuffer->Parameter[index][dwCounter] = *pszCmd;
pszCmd ++;
dwCounter ++;
}
pObjBuffer->Parameter[index][dwCounter] = 0x00; //Set the terminal flag.
index ++; //Ready to copy the next parameter to parameter object.
dwCounter = 0;
if(!*pszCmd)
break;
while(' ' != *pszCmd)
pszCmd ++; //Skip the no space characters if the parameter's length
//is longer than the const CMD_PARAMETER_LEN.
while(' ' == *pszCmd)
pszCmd ++; //Skip the space character.
}
pTmpObj = pObjBuffer; //Update the current parameter object.
pObjBuffer = (__CMD_PARA_OBJ*)NextParaAddr(pTmpObj,index);
pTmpObj->byParameterNum = LOBYTE(LOWORD(index));
if(!*pszCmd)
break;
pTmpObj->pNext = pObjBuffer;
}
}
__TERMINAL:
return pBasePtr;
}
//
//The following routine releases the parameter object created by FormParameterObj routine.
//
VOID ReleaseParameterObj(__CMD_PARA_OBJ* lpParamObj)
{
if(NULL == lpParamObj) //Parameter check.
return;
KMemFree((LPVOID)lpParamObj,KMEM_SIZE_TYPE_4K,4096); //Release the memory.
return;
}
//
//Command handler predefinitions.
//
VOID VerHandler(LPSTR); //Handles the version command.
VOID MemHandler(LPSTR); //Handles the memory command.
VOID SysInfoHandler(LPSTR); //Handles the sysinfo command.
VOID HlpHandler(LPSTR);
VOID DateHandler(LPSTR);
VOID TimeHandler(LPSTR);
VOID CpuHandler(LPSTR);
VOID SptHandler(LPSTR);
VOID ClsHandler(LPSTR);
VOID RunTimeHandler(LPSTR);
VOID TestHandler(LPSTR);
VOID UnTestHandler(LPSTR);
VOID MemViewHandler(LPSTR);
VOID SendMsgHandler(LPSTR);
VOID KtViewHandler(LPSTR);
VOID SysNameHandler(LPSTR);
VOID IoCtrlApp(LPSTR);
VOID SysDiagApp(LPSTR);
#define CMD_OBJ_NUM 18
__CMD_OBJ CmdObj[CMD_OBJ_NUM] = {
{"version" , VerHandler},
{"memory" , MemHandler},
{"sysinfo" , SysInfoHandler},
{"sysname" , SysNameHandler},
{"help" , HlpHandler},
{"date" , DateHandler},
{"time" , TimeHandler},
{"cpuinfo" , CpuHandler},
{"support" , SptHandler},
{"runtime" , RunTimeHandler},
{"test" , TestHandler},
{"untest" , UnTestHandler},
{"memview" , MemViewHandler},
{"sendmsg" , SendMsgHandler},
{"ktview" , KtViewHandler},
{"ioctrl" , IoCtrlApp},
{"sysdiag" , SysDiagApp},
{"cls" , ClsHandler}
};
//
//Global Functions.
//
VOID HlpHandler(LPSTR) //Command 'help' 's handler.
{
LPSTR strHelpTitle = " The following command is availiable currently:";
LPSTR strHelpVer = " version : Print out the version information.";
LPSTR strHelpMem = " memory : Print out the memory layout.";
LPSTR strHelpSysInfo = " sysinfo : Print out the system context.";
LPSTR strSysName = " sysname : Change the system host name.";
LPSTR strHelpHelp = " help : Print out this screen.";
LPSTR strDate = " date : Display or reset system date.";
LPSTR strTime = " time : Display or reset system time.";
LPSTR strSupport = " support : Print out technical support information.";
LPSTR strRunTime = " runtime : Display the total run time since last reboot.";
LPSTR strMemView = " memview : View a block memory's content.";
LPSTR strSendMsg = " sendmsg : Send a message to a kernal thread.";
LPSTR strKtView = " ktview : View all the kernal threads' information.";
LPSTR strIoCtrlApp = " ioctrl : Start IO control application.";
LPSTR strSysDiagApp = " sysdiag : System or hardware diag application.";
LPSTR strCls = " cls : Clear the whole display buffer.";
PrintLine(strHelpTitle); //Print out the help information line by line.
PrintLine(strHelpVer);
PrintLine(strHelpMem);
PrintLine(strHelpSysInfo);
PrintLine(strSysName);
PrintLine(strHelpHelp);
PrintLine(strDate);
PrintLine(strTime);
PrintLine(strSupport);
PrintLine(strRunTime);
PrintLine(strMemView);
PrintLine(strSendMsg);
PrintLine(strKtView);
PrintLine(strIoCtrlApp);
PrintLine(strSysDiagApp);
PrintLine(strCls);
}
//
//sysname handler.
//This handler changes the system name,and save it to system config database.
//
static VOID SaveSysName(LPSTR)
{
}
VOID SysNameHandler(LPSTR pszSysName)
{
__CMD_PARA_OBJ* pCmdObj = NULL;
pCmdObj = FormParameterObj(pszSysName);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本书是《自己动手写嵌入式操作系统》的全面升级版,作者对自己亲自在PC上开发的嵌入式操作系统的“Hello China”进行全面的升级和改进,书中详细地叙述自己动手写嵌入式操作系统所需的各方面知识,如加载和初始化、Shell、线程的实现、内存管理机制、互斥和同步机制及中断和定时机制的实现,以及设备驱动程序管理框架和应用编程接口等。 本书中的每一个字都是作者辛勤劳动的结晶,本书所讲到的嵌入式操作系统“Hello China”更是作者亲自实践的成果,因此本书具有极高的实用性,对于嵌入式软件开发工程师、应用软件开发工程师均有很高的参考价值,对于大中院校的学生学习和理解操作系统及计算机原理也会有许多启发,对于系统软件爱好者更是一本不可多得的好书,因为它会使您得到一个完整而细致的实践过程。
资源推荐
资源详情
资源评论
收起资源包目录
嵌入式操作系统:设计与实现 源码 (228个子文件)
MINIKER.ASM 87KB
REALINIT.ASM 11KB
FMTLDRF.ASM 11KB
BOOTSECT.ASM 8KB
master.bin 77KB
miniker.bin 48KB
realinit.bin 4KB
bootsect.bin 512B
FMTLDRF.COM 9KB
SHELL.CPP 41KB
KTMGR.CPP 38KB
VMM.CPP 37KB
MEMMGR.CPP 32KB
SYSTEM.CPP 25KB
NETBUFF.CPP 25KB
IOMGR.CPP 24KB
IOCTRL_S.CPP 22KB
HEAP.CPP 21KB
SYNOBJ.CPP 21KB
SYSD_S.CPP 20KB
DEVMGR.CPP 19KB
BUFFMGR.CPP 16KB
KTHREAD.CPP 15KB
MAILBOX_.CPP 14KB
PCI_DRV.CPP 13KB
MAILBOX.CPP 13KB
OBJMGR.CPP 11KB
SYNOBJ_.CPP 10KB
PAGEIDX.CPP 10KB
HELLOCN.CPP 10KB
STATCPU.CPP 10KB
KTMGR2.CPP 10KB
KMEMMGR.CPP 10KB
OS_ENTRY.CPP 9KB
L_STDIO.CPP 9KB
COMQUEUE.CPP 7KB
TYPES.CPP 7KB
OBJQUEUE.CPP 7KB
STRING.CPP 7KB
KAPI.CPP 7KB
DIM.CPP 6KB
TIMER.CPP 5KB
ARCH_X86.CPP 4KB
IDEHDDRV.CPP 4KB
SYN_MECH.CPP 4KB
STAT_S.CPP 4KB
COMDRV.CPP 3KB
TASKCTRL.CPP 3KB
FIBONACCI.CPP 3KB
PERF.CPP 3KB
NET_COMM.CPP 2KB
HCNAPI.CPP 2KB
RT8139.CPP 2KB
LOW_API.CPP 1KB
DRVENTRY.CPP 1KB
KTMSG.CPP 1KB
MAIN.CPP 1018B
EXTCMD.CPP 866B
KEYHDLR.CPP 858B
IPV4_IMP.CPP 689B
UDP_IMP.CPP 688B
master.dep 25KB
master.dll 512KB
master.dll 77KB
master.dsp 11KB
master.dsw 535B
KTMGR.H 21KB
IOMGR.H 13KB
NETBUFF.H 11KB
HELLOCN.H 11KB
MEMMGR.H 10KB
SYSTEM.H 9KB
KMEMMGR.H 7KB
VMM.H 7KB
DEVMGR.H 6KB
COMMOBJ.H 6KB
PAGEIDX.H 6KB
KTHREAD.H 5KB
TASKCTRL.H 5KB
HEAP.H 5KB
BUFFMGR.H 5KB
PCI_DRV.H 5KB
LIST.H 4KB
SYNOBJ.H 4KB
NET_COMM.H 4KB
IDEHDDRV.H 4KB
MAILBOX_.H 4KB
SYN_MECH.H 3KB
KAPI.H 3KB
COMQUEUE.H 3KB
DIM.H 3KB
STATCPU.H 3KB
TYPES.H 3KB
SHELL.H 2KB
KRNLSTD.H 2KB
ARCH.H 2KB
OBJQUEUE.H 2KB
PERF.H 2KB
StdAfx.h 2KB
KTMSG.H 2KB
共 228 条
- 1
- 2
- 3
资源评论
- YTWEBStu2014-08-14可以用 很好用
- ah_2015-02-20有助于嵌入式开发 挺详细的资料
- Simon_click2014-01-13代码里带了master.bin的二进制,不错,可以直接运行。我就是靠它反推出了怎么修改PE文件的头6个字节。赞一个!
- judegu2012-10-11貌似只有代码,没有文档
- Mryau2013-01-11代码很全面,正在看
sdfiyuejin
- 粉丝: 10
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于微信小程序+mysql的答题系统的设计与实现+全部资料+详细文档(毕业设计).zip
- H5U的PLC固件,用于EthernetIP通讯时升级固件使用
- Jumpserver堡垒机快速入门视频.zip
- 基于springboot+mysql+redis实现个性化书籍推荐和相似帖子推荐的社区图书馆+论坛+失物招领平台
- 软考中级软件设计师 法律法规通关笔记
- 基于java+sqlserver实现的员工培训系统
- java毕业设计基于Springboot的贫困生资助系统源码+使用文档+全部资料(优秀项目).zip
- 基于随机森林和袋装法对PM2.5浓度进行回归预测
- 静态路由实验.docx
- Rust语言探索之旅:从入门到实践,构建安全高效的系统级应用-文章博客-markdown材料.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功