查看: 54|回复: 0

ASRPRO小白串口接收数组基础教程_直接读取字符串法

[复制链接]

15

主题

56

帖子

1564

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1564
发表于 昨天 21:52 | 显示全部楼层 |阅读模式
本帖最后由 libai500 于 2024-7-26 22:30 编辑

正文

第一章 构建相关图形(手把手)
第一节 构建串口初始化图形
QQ_1721992088623.png
    如上图,串口初始化范例很多,这里不重点讲解,我们说说串口超时设置的重要性。
    串口超时设置的作用:
QQ_1721992498119.png
    “串口超时设置”是针对“字符串接收”指令的,如上图。
    读取字符串指令,需要判断是否在超过“超时时间”后,串口不再收到新数据,这对方串口发送已经结束。通常10mS为发送信息间隔,也就是“超时设定值”。如果设10mS,则意味着,在陆续收到n字节后,如果超过10mS不再有新的字节被收到,则判定对方串口已经发送结束,此时“读取字符串”指令才会将收到的所有信息,提交回来。
    因此,如果“超时时间”设的太长,“读取字符串”指令会长时间不返回数据,产生阻塞效应,接收信息提交会延误。如果“超时时间”设的太短,则可能捕获不到对方发送结束时间间隔。
    值得注意的是,系统默认超时时间,并不确定。根据版本不同,有的是1000mS,有的是10mS,因此我们不要去赌默认值,我们应该老老实实的设定好超时时间。

第二节 建立串口接收主循环任务
QQ_1721995913365.png
    如上图,我们需要建立一个线程循环任务,命名为“UART0_RX",这里只支持英文。
    在线程任务内的主循环,大约每2mS循环执行一次,用于检测串口0是否接收到了新信息。
    注意,线程任务必须有一个延时,也叫休息期,否则会大量消耗处理器时间,导致优先级不够的任务没有机会运行,因此我们必须加一个延迟,最小单位为2mS。不要小瞧2mS时间,大部分程序组合执行时间可能几十微妙就结束了,2mS是相当长的空余时间。可以为很多任务让出决定性的处理时间。如果线程循环中,没有延迟,则会压垮ASRPRO系统中大部分低级任务,比如“播报”,“语音信息服务"等,导致系统工作不正常。

第三节 循环检测串口接收情况
QQ_1721997169585.png
    如上图,在循环任务中,不断检测串口0是否有信息被收到。

第四节 读取串口接收到的数据,直到不再有新数据

QQ_1721997575695.png
    如上图,当串口刚一有数据到来时,就开始读取。
    “读取字符串”指令会一直搬运陆续接收到的字节信息,直到超时规定时间中不再有新的信息。也因此,我们可以认为“读取字符串”指令是阻塞式的,没有读取完一个完整数据帧,是不会退出的。
QQ_1721998197087.png
    !!!在这里,我们要特别注意到,接收字符串信息用的变量“Rec",一定要临时声明。因为我们有理由认为,临时声明的变量,在转移装载字符串数据时,是完整拷贝的,它不遵循字符串0结尾规范。即,无论信息中是否有0,都会完整的转移过来,而不会丢弃。这对于数组接收是有利的。如上图。

第五节 将数组信息从Rec字符串中提取出来
QQ_1721999048082.png

QQ_1721999158160.png
    如上图,我们可以直接用数组图形访问Rec字符串。这个功能来自于ASRPRO字符串来自与C++String类对象的强大功能集合。它允许用访问数组的指令来访问字符串对象中的每一个信息项。
QQ_1721999673644.png
    值得注意的是,Rec中的字节信息,数据类型是字符型,即C语法当中的"Char"型,如果我们需要以无符号8位类型或其它类型访问,应加类型转换指令。如上图。
QQ_1722000918890.png
    最后,我们用“串口原始输出”指令,将Rec中的第0项内容,发回串口0,用来验证是不是正确收到了串口0的信息。

第六节 获取Rec中接收到了多少字节,并一一输出到串口0

QQ_1722001201370.png

QQ_1722001294500.png
    如上图,我们先建立一个变量“P00接收长度”,并使用“数组文本”指令组中,“字符串长度”指令来获取Rec中到底接收了多少字节。
QQ_1722001598111.png

QQ_1722001821697.png
    最后,我们建立一个以接收长度为范围的循环体,循环访问和输出Rec中的每一项内容到串口0,用来验证串口发来的数组信息是否被正确完整的接收到了。如上图,我们用串口监视器,发送一组数组0x00,11,22,33,......。接收无误。

本文中的程序文件 ASRPRO_串口接收数组(读取字符串法)范例.zip (2.83 KB, 下载次数: 1)
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-7-27 20:34 , Processed in 0.099783 second(s), 25 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

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