通过报文对嵌入式进行编程举例

这是对我之前《如何假装用C语言为嵌入式写一个新语言》进行一个举例,以便更好地理解这种编程方式。

报头(S)报尾(E)

报头和报尾ASCII
BUGUS42 55 47 55 53
BUGUE42 55 47 55 45
CODES43 4f 44 45 53
CODEE43 4f 44 45 45
VORCS56 4f 52 43 53
VORCE56 4f 52 43 45
CONSTS43 4f 4e 53 54 53
CONSTE43 4f 4e 53 54 45
RVARS52 56 41 52 53
RVARE52 56 41 52 45
SAVES53 41 56 45 53
SAVEE53 41 56 45 45
WVARS57 56 41 52 53
WVARE57 56 41 52 45

控制指令

指令内容指令标号(用户不可见)参数1参数2
输入输出选择(基础IO模块)0x02引脚选择(暂时0x01-0x0a)输入0输出1
输出高低选择(基础IO模块)0x03引脚选择(暂时0x01-0x0a)低电平0高电平1
毫秒级延时(时序模块)0x04延时时间(暂时0x01-0xff)

程序逻辑指令

指令内容指令标号信息1信息2信息3信息4信息5信息6
循环启动器(程序基础控制模块)0x01CODE返回位VORC返回位CONST返回位RVAR返回位SAVE返回位WVAR返回位

举例

加入用户输入了这样一个程序:

Created with Raphaël 2.2.0 开始 设置5号引脚为输入 设置6号引脚为输出 设置6号输出为高电平 while(1) 延时20ms 设置6号输出为低电平 延时20ms 设置6号输出为高电平 yes

而我们的MCU工作流程如下:

指令表
MCU
常量
变量
read指针
不保存
保存
write指针
自动指针读
指令表CODE
自动指针读
判断选择变量0/常量表1VORC
自动指针读
常量表CONST
自动指针读
变量表的read指针表RVAR
自动指针读
判断是1否0保存输出表SAVE
自动指针读
变量表的write指针表WVAR
进入case
参数获取
读变量数组
输出
写变量数组

这里我们只截取其中一个函数的工作流程和并对循环方式进行说明:

系统 CODE VORC CONST RVAR SAVE WVAR 0x02 下标=1 输入输出选择 0x01 下标=1 选择常数 0x05 下标=1 5号引脚 0x01 下标=2 选择常数 0x00 下标=2 输入 par [参数1] [参数2] par [调用函数] [传入形参] 0x02 下标=2 输入输出选择 0x01 下标=3 选择常数 0x05 下标=3 6号引脚 0x01 下标=4 选择常数 0x01 下标=4 输出 par [参数1] [参数2] par [调用函数] [传入形参] 0x03 下标=3 输出高低选择 0x01 下标=5 选择常数 0x05 下标=5 6号引脚 0x01 下标=6 选择常数 0x01 下标=6 输出高电平 par [参数1] [参数2] par [调用函数] [传入形参] 上位机中记录此时的下标:CODE=3,VORC=6,CONST=6,RVAR=0,SAVE=0,WVAR=0 0x04 下标=4 毫秒级延时 0x01 下标=7 选择常数 0x14 下标=7 20ms延时 par [参数1] par [调用函数] [传入形参] 0x03 下标=5 输出高低选择 0x01 下标=8 选择常数 0x05 下标=8 6号引脚 0x01 下标=9 选择常数 0x00 下标=9 输出低电平 par [参数1] [参数2] par [调用函数] [传入形参] 0x04 下标=6 毫秒级延时 0x01 下标=10 选择常数 0x14 下标=10 20ms延时 par [参数1] par [调用函数] [传入形参] 0x03 下标=7 输出高低选择 0x01 下标=11 选择常数 0x05 下标=11 6号引脚 0x01 下标=12 选择常数 0x01 下标=12 输出高电平 par [参数1] [参数2] par [调用函数] [传入形参] 0x01 循环回溯 下标=3 下标=6 下标=6 下标=0 下标=0 下标=0 par [CODE] [VORC] [CONST] [RVAR] [SAVE] [WVAR] par [调用函数] [传入形参] 将下标指针返回到循环启动器开始时的状态 loop [循环启动器] 系统 CODE VORC CONST RVAR SAVE WVAR

这里需要注意的是在这个例子中我们其实并没有输出值的,所以没有对输出值进行操作,5号的demo版暂时先不做又返回值的功能。

通过以上的序列图,我们就可以写出我们的报文了:

BUGUS 42 55 47 55 53
BUGUE 42 55 47 55 45
CODES 43 4f 44 45 53
CODEE 43 4f 44 45 45
VORCS 56 4f 52 43 53
VORCE 56 4f 52 43 45
CONSTS 43 4f 4e 53 54 53
CONSTE 43 4f 4e 53 54 45
RVARS 52 56 41 52 53
RVARE 52 56 41 52 45
SAVES 53 41 56 45 53
SAVEE 53 41 56 45 45
WVARS 57 56 41 52 53
WVARE 57 56 41 52 45
CODE 02 02 03 04 03 04 03 01
VORC 01 01 01 01 01 01 01 01 01 01 01 01
CONST 05 00 05 01 05 01 14 05 00 14 05 01 03 06 06 00 00 00
RVAR
SAVE
WVAR

​ 将该报文通过串口发送到单片机,单片机即可进行工作运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值