当前位置: 首页 > 产品中心 > 串口屏

主动解析基本知识

发表时间: 2024-03-18 作者: 串口屏
产品详情

  类似上面的这些字符串指令,可以直接写在屏幕中,或者通过串口发送给串口屏的字符串指令,称为淘晶驰字符串指令。

  屏幕上电默认是淘晶驰字符串指令模式,所有串口指令需按照淘晶驰字符串指令格式来对屏幕做相关操作,即单片机发送类似于n0.val=100的字符串指令格式来控制屏幕。

  假如你需要自定义协议,不按照淘晶驰字符串指令格式来发串口数据给屏幕,而使用你自定义的格式,那么就需要把屏幕配置为主动解析模式。要使用此功能,请务必确保你有以下2点基础:

  1.明白什么叫HEX,什么叫String,什么叫ASCII,分别啥关系,怎么转换。

  2.明白单字节数值,双字节数值,四字节数值,分别有啥不一样的区别,它们在内存中是怎样的储存方式,明白什么叫小端模式,什么叫大端模式,大小端数据之间如何转换。

  如果以上2点你都比较明白,那么请继续往下看,否则强烈建议不要再继续往下看了,因为大多数的项目是用不上这个功能的,使用默认的被动解析模式就可以了,没必要配置为下面的主动解析模式。

  那就是闹钟定时提醒人去查看电子邮箱中接收到了什么邮件,并且根据电子邮箱中不同的数据做出不同的操作。(通过定时器去访问串口缓冲区数据组u[index])

  为了确保邮件是发给你的,你必须确认这些邮件是以”亲爱的XX”开头,并以”此致敬礼”结尾的(有帧头和帧尾)

  电子邮箱的大小是有限的,应该要依据情况将已读的数据删除或者清空邮箱。(对应udelete和code_c)

  每个页面都需要新建一个定时器控件,在定时器中定时判断usize的大小,当usize不小于一帧数据的长度时,进入查找帧头标志或帧尾标志流程

  每个页面仅建议在一个定时器中读取串口缓冲区的数据,在多个定时器中读取串口缓冲区的数据容易照成逻辑混乱。

  每次读完数据后,使用udelete指令删除缓冲区中已经读取的字节数,否则缓冲区溢出后就无法接收新数据。

  屏幕上电recmod=0,即被动解析模式,在此模式下,外部设备按照标准指令集的指令格式发送串口指令给屏幕执行;例如:n0.val=100

  如果你将recmod 设置为1,那么屏幕进入主动解析模式,然后所有的串口指令都不会被执行(注意:是串口接收到的数据不会被执行,上位软件编辑界面时写入事件中的固件指令是不会受影响的,依然正常执行),所有的串口数据均存放在串口缓冲区中,等待您去主动读取和处理。

  具体配置代码如下,请注意,page指令后面的代码不会被执行,请将代码写在page指令前面

  用上位机软件模拟器联机屏幕,屏幕将会强制退出主动解析模式,此时需要将屏重新上电才能够顺利和模拟器联机调试屏幕。

  请不要在定时器中频繁进入recmod=1,否则将会导致工程下载失败,此时只可以通过SD卡更新工程,请参考通过SD卡下载工程到串口屏

  定时器里每次进入解析之前,必须先判断usize的值大于1个数据帧的长度,才能进入正常的解析!!!

  任何时间读取串口缓冲区数据组u[index]时一定要先判断uszie的大小!

  此指令可以从串口缓冲区的指定位置连续拷贝指定数量的数据到目标变量(目标变量可以是字符串变量,可以是数值变量)。

  例1:从缓冲区中0位置开始获取一个4字节的数值(小端模式,低位在前),赋值给数字控件n0, 写法如下:

  每个数值变量都是有符号的32位类型,但是如果你使用ucopy从缓冲区获取小于4字节的数值,一定要注意剩余部分的字节数据处理,以免出现数据异常,操作方法请参考下面这个例子:

  例2: 从缓冲区中0位置开始获取一个2字节的有符号数值(小端模式,低位在前),赋值给数字控件n0.val的低16位, 写法如下:

  例3: 从缓冲区中0位置开始获取一个1字节的有符号数值(小端模式,低位在前),赋值给数字控件n0.val的低8位, 写法如下:

  先将sys0赋值为0,目的是确保sys0的4个字节全置0,然后再从缓冲区拷贝2个字节进来,否则会因为你只拷了2字节而导致sys0原来剩下的2字节数据还在,然后导致sys0最终的数值并不是你想要的数值。

  例4: 从缓冲区中0位置开始获取一个10字节的字符串,赋值给文本控件t0, 写法如下:

  方法1:发送一串退出密码来实现退出主动解析模式,退出密码为一串24字节的字符串+3字节的结束符。