diff --git a/Image/1.png b/Image/1.png new file mode 100644 index 00000000..ffb56c9c Binary files /dev/null and b/Image/1.png differ diff --git a/Image/10.png b/Image/10.png new file mode 100644 index 00000000..2b91495c Binary files /dev/null and b/Image/10.png differ diff --git a/Image/11.png b/Image/11.png new file mode 100644 index 00000000..82be2ad7 Binary files /dev/null and b/Image/11.png differ diff --git a/Image/12.png b/Image/12.png new file mode 100644 index 00000000..57d470c6 Binary files /dev/null and b/Image/12.png differ diff --git a/Image/13.png b/Image/13.png new file mode 100644 index 00000000..febce98e Binary files /dev/null and b/Image/13.png differ diff --git a/Image/14.png b/Image/14.png new file mode 100644 index 00000000..442a10d2 Binary files /dev/null and b/Image/14.png differ diff --git a/Image/15.png b/Image/15.png new file mode 100644 index 00000000..283eb852 Binary files /dev/null and b/Image/15.png differ diff --git a/Image/16.png b/Image/16.png new file mode 100644 index 00000000..24c09b57 Binary files /dev/null and b/Image/16.png differ diff --git a/Image/17.png b/Image/17.png new file mode 100644 index 00000000..3437bdaa Binary files /dev/null and b/Image/17.png differ diff --git a/Image/18.png b/Image/18.png new file mode 100644 index 00000000..d076015b Binary files /dev/null and b/Image/18.png differ diff --git a/Image/2.png b/Image/2.png new file mode 100644 index 00000000..921e1b47 Binary files /dev/null and b/Image/2.png differ diff --git a/Image/3.png b/Image/3.png new file mode 100644 index 00000000..bfbbec64 Binary files /dev/null and b/Image/3.png differ diff --git a/Image/4.png b/Image/4.png new file mode 100644 index 00000000..727b4ade Binary files /dev/null and b/Image/4.png differ diff --git a/Image/5.png b/Image/5.png new file mode 100644 index 00000000..65ebbb7f Binary files /dev/null and b/Image/5.png differ diff --git a/Image/6.png b/Image/6.png new file mode 100644 index 00000000..667c071f Binary files /dev/null and b/Image/6.png differ diff --git a/Image/7.png b/Image/7.png new file mode 100644 index 00000000..54a2fcef Binary files /dev/null and b/Image/7.png differ diff --git a/Image/8.png b/Image/8.png new file mode 100644 index 00000000..39d82772 Binary files /dev/null and b/Image/8.png differ diff --git a/README.md b/README.md index a69c8dea..7ead4abd 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![GPL Licence](https://badges.frapsoft.com/os/gpl/gpl.png?v=103)](https://opensource.org/licenses/GPL-3.0/) -本固件项目由一群计算器爱好者始创,使用了[FreeRTOS kernel](https://github.com/FreeRTOS/FreeRTOS)、[TinyUSB](https://github.com/hathach/tinyusb)、[FatFs](http://elm-chan.org/fsw/ff/00index_e.html)、[dhara](https://github.com/dlbeer/dhara)等库。我们非常欢迎同好试用和改善本项目的代码,也非常乐意听取您的宝贵意见。期待您的参与! +本固件项目由一群计算器爱好者始创,使用了[FreeRTOS kernel](https://github.com/FreeRTOS/FreeRTOS)、[TinyUSB](https://github.com/hathach/tinyusb)、[FatFs](http://elm-chan.org/fsw/ff/00index_e.html)、[dhara](https://github.com/dlbeer/dhara)、[giac](http://www-fourier.ujf-grenoble.fr/~parisse/giac.html)等库。我们非常欢迎同好试用和改善本项目的代码,也非常乐意听取您的宝贵意见。期待您的参与! ## 目前工作进展 - [x] Boot - [x] 调试串口 @@ -17,27 +17,27 @@ - [x] 键盘驱动(GPIO轮询) - [x] 定时器驱动 - [x] CPU频率设定 -- [x] RTC时钟 +- [ ] RTC时钟 - [x] USB大容量存储模式 -- [x] USB串口控制台 -- [x] USB模拟键盘鼠标 +- [ ] USB串口控制台 +- [ ] USB模拟键盘鼠标 - [x] USB功能动态配置 - [x] FLASH驱动 - [x] FATFS文件系统 -- [x] 多任务 +- [ ] 多任务 - [x] 虚拟内存 -- [x] 进程、ELF加载 -- [x] 最小化MicroPython实现 -- [ ] 进程切换、进程结束、ELF卸载 -- [ ] 用户界面GUI +- [ ] ~~进程、ELF加载~~ +- [ ] 最小化MicroPython实现 +- [ ] ~~进程切换、进程结束、ELF卸载~~ +- [x] 用户界面GUI - [ ] 电源管理 -- [ ] Linux 5.4 半虚拟化双内核实现 +- [ ] ~~Linux 5.4 半虚拟化双内核实现~~ - [ ] 完全脱离官方刷机工具的固件升级 目前工作进展:已经完成了操作系统大部分内核和一些必要的硬件驱动。但由于未弄清STMP3770固件刷入机制,因此需要在Win7\WinXP环境下用计算器官方的固件升级软件刷入本固件。同时还没有用户界面,现在的工作重心是实现虚拟内存管理和进程加载。关于用户界面GUI等还在讨论中,如有宝贵意见可于Issues提出。 -## 固件编译/安装 +## 固件编译 ### CMake @@ -62,11 +62,55 @@ cd ./build cmake .. (或cmake .. -G Ninja) make (或ninja) #编译固件 - make flash (或ninja flash) #将固件刷入RAM (刷入前请将计算器完全断电(抠电池), 之后在按住ON/C按键的同时插入USB线,即可进入刷写模式) ``` + +## 固件安装 + 注意:HP39GII的相关驱动程序请自行安装。 +代码编译完成后,执行以下命令将引导程序刷入计算器的RAM中 (刷入前请将计算器完全断电(抠电池), 之后在按住ON/C按键的同时插入USB线,即可进入刷写模式) +``` + make flash (或ninja flash) +``` +等待命令提示符窗口中进度条走完之后,引导程序会开始执行,此时计算器应显示如下界面: +![Loader1](Image/1.png) +由于本固件的底层驱动以及闪存的存储结构与原始固件不同,因此在这里会提示磁盘格式错误,因此需要对闪存进行低级格式化之后才可继续安装固件。(注意,接下来的操作将会抹除掉计算器上的所有数据,请先备份好相关文件) + +![loader2](Image/2.png) +使用方向键将进入`Format Flash`菜单,该菜单下有两个选项,`Erase`选项仅会将Flash全片擦除,之后不会写入任何数据,该选项主要用于恢复官方的系统镜像。 +为了安装新固件,需要进行分区并格式化,故此处选中`Format`选项之后,按下`Enter`键,将开始执行格式化操作,该过程需要1~2分钟。 + +![Loader3](Image/3.png) +闪存格式化完成之后,将菜单切换至`Mount USB MSC`界面,通过这个界面可以将计算器刚刚分区并格式化完成后的分区挂载到USB上,以便用电脑直接操作内部Flash并拷贝系统。 +在这里选中`SYS`并按下`Enter`键挂载计算器的系统分区。 + +![Loader4](Image/4.png) +![Loader5](Image/5.png) +挂载`SYS`分区之后,电脑上会多出一个10MB左右的U盘,接着将刚刚编译出的`OSLoader.sb`引导文件和`ExistOS.sys`系统文件拷贝至计算器中。拷贝完成后安全弹出U盘,或者在计算器上将挂载选项设置为`None` +![Loader6](Image/6.png) +(弹出磁盘或卸载磁盘之后的某些情况下计算器界面可能会卡住1分钟左右,不用担心,请坐和放宽,此时引导程序正在对磁盘执行Trim操作进行垃圾回收,以加快往后系统运行时的IO速度) +![Loader7](Image/7.png) +接下来将菜单移动至`Install System`选项,并按下`ENTER`键,引导程序会将自己本体给写入计算器的引导扇区中完成最后的安装。 +![Loader8](Image/8.png) +出现以上界面时表示系统已经安装完成,此时可以选中`Boot ExistOS`直接引导或`Reboot`重启进入系统。 +![Loader10](Image/10.png) +## 固件基本使用 +系统编译和安装完成后,开机将会见到如下系统界面(默认开启4MB虚拟内存)。 +![Sys1](Image/11.png) +目前的版本中设置了两个输入界面,按下`F1`进入系统自带的Shell,可以执行系统控制相关的命令(目前暂无)。按下`F2`将切换至CAS计算模式,进入CAS模式之前系统会对giac运行环境进行初始化,需要几秒钟的时间。 +![Sys2](Image/12.png) +初始化完成后便可以进行一些相关的计算。 +![Sys3](Image/13.png) +![Sys4](Image/14.png) +![Sys5](Image/15.png) +计算的结果会保存在上方的历史记录框内,可以通过上下光标键进行选择,选择需要的表达式按下COPY(`F4`)键可将该表达式复制到输入框中,并可对其进行修改作为下一次计算的输入。 +![Sys6](Image/16.png) +![Sys7](Image/17.png) +计算过程中可按下`ON`键中断正在计算的表达式。 +![Sys8](Image/18.png) +由于使用的giac代数运算系统体积相对来说较为庞大(约6MB),而该计算器仅有500KB左右的运行内存,因此在进行计算时需要频繁的IO操作,从而导致其在某些复杂问题求解时会出现计算十分缓慢的问题。 + ## 代码提交规范 **如果您想贡献代码,请遵守以下规范**