目录结构和系统流程¶
备注
欢迎!当您查看此章节的时候,您已经步入了开发的范畴了!阅读后面的章节有利于您更好的理解桃丽系统的工作原理。
警告
由于系统自 v2.1.0 之后,目录结果有所调整,将原有的 home.py 修改并移动到了 TaoLiSystem/page/home/default/__init__.py 。并将 homeFun.py 同时进行相对应的更改。 main.py 也有更改,将引入 loader.py 将系统编程面向对象。
桃丽系统运行时会调用多个自带的代码文件,确保系统正常运行与工作,下面将阐述其目录结构。
目录结构¶
项目架构¶
仓库根目录
│
├─TaoLiSystem
│
└─resource # 开发资源
│ @run_build.bat # 一键写入脚本
│ @run_setting.bat # 一键设置脚本
│ build.py # 写入脚本源代码
│ setting.py # 设置脚本源代码
│ setting_instructions.py # 设置脚本源代码中的设置项简介
│ mpy-cross-vN.exe # 编译程序
│ pyboard.py # 脚本要使用的 pyboard 支持库
│ pyboard_utils.py # 拓展的 pyboard 支持库
│ requirements_check.py # 脚本进行依赖检查的模块
│
├─IMAGES # 仓库的图片存放文件夹
├─plugins # 可选用的插件,需要请拷到 TaoLiSystem 的 plugins 文件夹下
├─TaoLiSystem-doc # 开发文档源文件
└─binpython # binpython 开源项目编译的文件,用于无 Python 运行脚本
系统架构¶
掌控板根目录
│ boot.py # 启动文件,内有 BootLoader 模式。
│ main.py # 入口文件,将会调用 loader.py 进行加载。
│
└─TaoLiSystem # 桃丽系统的代码文件夹
│ COPYRIGHT # 版权文件,用于系统关于
│
├─core # 系统核心文件夹
│ config.py # 系统配置文件读取工具、全局变量存放位置
│ sysgui.py # 系统 GUI 绘制,所有常见 GUI 界面都在这里
│ utils.py # 系统零碎的代码集合
│ loader.py # 用于分配显示的页面与处理系统逻辑
│
├─data # 数据存放文件夹
│ config.ini # 系统配置文件
│
├─modules # 系统外接的模块文件夹存放位置
├─page # 系统的主要页面
│ └─home # 主页面
│ ├─default
│ │ __init__.py # 默认主页,原来的 home.py
│ │ function.py # 原来的 homeFun.py
│ │
│ └─easy
│ __init__.py # 简单示例页面
│
│ plugin.py # 插件页面
│ setting.py # 设置页面
│ settingFun.py # 详细设置项
│
├─plugins # 文件文件夹
│ └─HelloWorld # 示例插件文件夹
│ ico.bin # 插件图标、图片存放文件
│ __init__.json # 插件信息文件
│ __init__.py # 插件启动代码
│
└─static # 资源文件存放位置
系统流程¶
系统流程主要如下:
掌控板启动时,调用 boot.py 文件,随后调用主代码文件 main.py 。
main.py 将会调用 TaoLiSystem/core/loader.py 进行加载系统,对于 loader.py 的逻辑请查看 main.py 的代码。
加载系统时,会先使用 gc.collect() 命令释放多余内存,随后进入启动项判断(是否连接WIFI、是否同步时间等)。
最后进入系统的主循环,默认加载页面 TaoLiSystem/page/home.py 文件显示主页面。
通过 按键中断 来获取用户是否按下 A 键或 B 键,随后切换页面显示。
备注
值得注意的是,默认加载的页面并未写死,是可以修改的。后面将逐步介绍。
main.py 的代码如下:
备注
main_loop() 函数为系统界面绘制正式开始。
# 系统入口
# =======================调试命令=======================
from mpython import *
if button_a.value() == 0: # 按下 A 键就退出。防止卡电脑调试。
raise BaseException("Stop by user.")
# =======================传递参数=======================
from TaoLiSystem.core import utils
def importModule(name): # 导入模块函数,只有在 main.py 中才能让 exec 不出问题
_ = []
exec("import " + name + " as pikachu;_.append(pikachu)", {"_": _})
return _[0]
utils.importModule = importModule
# =======================系统初始化=======================
from TaoLiSystem.core import loader
loader.before_init() # 初始化之前执行
loader.init()
loader.after_init() # 初始化之后执行
loader.clean() # 删去初始化的所有内容
loader.main_loop() # 进入系统主循环