找回密码
 立即注册
查看: 524|回复: 1

STC单片机上实现中间语言虚拟机

[复制链接]

该用户从未签到

25

主题

24

回帖

292

积分

荣誉版主

积分
292
发表于 2023-7-30 18:22:47 | 显示全部楼层 |阅读模式
本帖最后由 redelz 于 2023-7-30 21:54 编辑

1,如果我们将中间语言聚焦于自动控制系统或者可以认为是设备控制系统。那么中间语言就可以开始设计了。中间语言的核心就必须有一个虚拟机让中间语言实现运行。
2,为什么我们需要中间语言呢,中间语言可以分解成各自独立的指令系统,这样就可以把复杂的软件算法实现小单元解耦,也就是把复杂的算法分割成简单的小单元。
3,我们前面强调了自动控制最好的认知模型是输入输出传递模型。那么我们的中间语言的指令系统也必须贯彻这一模型。我们的常用的数学公式不管如何复杂实际上都是输入输出模型。为什么强调这一点,因为我们的中间语言要具有算法表达的完备性。
4,我们设计中间语言的总目标是实现图形化编程,这样有了针对图形化编程的中间语言就极大地简化了编程工具的编译算法。
5,大家可能会提出疑问,像STC单片机这样的芯片有必要再搞一层中间语言,这样会不会占用更多的芯片资源呢。通过我们二十年研发PLC的经验,我们发现要实现复杂的算法在基础阶段进行算法封装是编写复杂软件最好的办法。因为我们可以再通过每一条中间语言指令实现仔细的算法优化,这是任何其他算法都无法替代的优点。
6,这就是可以在STC单片机上运行的虚拟机代码
loop:
        lcall   S8hscInput          ;扫描输入变量
        lcall   UpdateInput        ;处理输入变量
        lcall   UpdateTime         ;扫描延时函数
        lcall   StartRead
logical1:
        lcall   InstBranch          ;读取虚拟机中间语言指令,并执行指令功能
        jnc     logical1              ;是最后一条指令吗,不是接着读
;        lcall   Ext0Access         ;处理1#功能扩展单元(如果有)
;        lcall   Ext1Access         ;处理2#功能扩展单元(如果有)
;        lcall   scan_clock         ;扫描实时时钟(如果有)
        lcall   UpdateOut          ;实时更新输出变量
        lcall        UpdateDisplay   ;实时更新显示输出
        lcall        TickCom                ;网络协议
        sjmp        loop
就是这么简单就是这么有效。
7,由于中间语言的指令系统实际上也是数据指令系统,但是每一条指令包含完整的变量类型和存储方式。这样通过中间语言虚拟机就可以使中间语言在不同的CPU上实现统一运行。
8,通过中间语言指令就可以实现基础算法封装。STC单片机上可以写出非常复杂软件算法,只要有正确的编程认知模型。
回复 送花

使用道具 举报

该用户从未签到

0

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-3-17 08:06:04 来自手机 | 显示全部楼层
你说的很对!!! 在解析三菱plc源码的时候 深有同感!
回复 支持 反对 送花

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2024-5-20 01:57 , Processed in 0.052664 second(s), 33 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表