# sh-vm **Repository Path**: Lyon1998/sh-vm ## Basic Information - **Project Name**: sh-vm - **Description**: shell和虚拟设备层,PikaScript的前身 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2022-01-03 - **Last Updated**: 2023-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [注意] 这个仓库是 [PikaScript](https://gitee.com/Lyon1998/pikascript) 的前身,不具有实用价值,仅做留存。 # 摘要 一个可以跨平台的轻量级shell层和一个可以跨平台的轻量级虚拟机 支持的平台: stm32 linux # 简介 ## mimiSH mimiSH层是一个类bash的命令行交互层。目前可以实现函数调用和参数传递。 ### shellCore shellCore是shell层的内核,用于解析字符串和调用函数。 ### ShellApp shellApp是形如 char* shlle_app(char argc, char **argv, char *strOut)的shell层应用,可以由shell层的命令行调用以及传递参数,strOut为通用字符串输出。shellApp不能够直接调用硬件层,包括虚拟硬件层。 ### ShellDriver shellDriver形式同shellApp,shellApp可以调用硬件层,建议仅调用虚拟硬件层,以确保硬件兼容性。 ## VM层 VM层是一个可以运行在MCU和linux环境的虚拟机,具有虚拟核心和虚拟硬件层,虚拟核心具有硬中断和虚拟中断功能。虚拟硬件层提供跨平台的虚拟硬件。 ### VM_core VM_core包含VM_memory、VM_api、VM_IT、VM_vIT、VM_driver五个组件。 ### VM_memory VM_memory是虚拟层的专用内存,用于映射虚拟硬件。 ### VM_api VM_api是VM_memory的接口,仅允许通过VM_api与VM_memory进行内存交互,VM_api不允许访问宿主硬件。 ### VM_driver VM_driver是VM_api与宿主硬件层的接口,允许访问宿主硬件。 ### VM_IT VM_IT是VM核心的硬中断,由宿主的外设中断调用,如串口中断。该层中只能进行无阻塞的内存交换。 ### VM_vIT VM_vIT是VM核心的虚拟中断,可以由宿主的定时器中断调用。该层中只能进行无阻塞的内存交互。 ### VM_main VM_main是VM的主任务层,由宿主任务层调用,如main()或者freeRTOS中的task(),可以处理有阻塞的任务。 ## 进度 VM层和shell层都可以顺利跑通,代码已经基本符合架构原则 ## 目前可用虚拟硬件: 串口1 串口2 # 目录结构 ## myShell myShell 内部包含两个组件,一个是ShellCore,用于实现Shell的核心功能。 还有一个是my_str_tools,用于集成在ShellApp和ShellDriver内部,实现App和Driver与Shell的接口 ## ShellDriver 使用了my_str_tools与Shell进行交互的Driver放在这个文件夹,Driver意为涉及到硬件的部分 ## ShellApp 使用了my_str_tools与Shell进行交互的App放在这个文件夹,App意为不涉及硬件,仅包含业务逻辑,涉及到硬件的部分全部通过Shell进行调用。 ### open [target] (废弃) 例: open com2 会打开与com2的通信接口,进入透传模式,输入":q"退出,返回原终端 ### send [target] [data] (废弃) 例: send com1 testsend qqq usart1会发送 "testsend qqq" send iic1 ttti 23 iic1会发送 "ttti 23" ### listen [target] (废弃) 例: listen com1 会将com1接收到的数据转发至shell缓存区