我在Parallax BASIC Stamp板上有一个应用程序,它可以读取文本命令并根据命令执行测试用例。根据DEBUGIN文本的突发速率,一个通过SPI总线发送数据并从SPI总线读取的测试用例失败。
印章板通过串行端口以19200波特连接到PC(四核2+ GHZ)。
当我使用BASIC Stamp Terminal或Hyper Terminal向Stamp Board发送命令时,测试通过。当我通过C#应用程序发送相同的命令时,测试失败。主要区别在于文本发送到印章板的突发率。
人类发送的文本比计算机(应用程序)慢。使用超级终端时,一个字符以19200波特发送。应用程序以19200波特率发送8个字符,字符之间没有暂停。
我正在寻找解释DEBUGIN语句(通过串口输入)如何影响SHIFTIN或SHIFTOUT命令,或者是否有人知道如何解决此问题的解释。
不幸的是,DEBUGIN命令的波特率无法更改。另一种方法是使用串口命令以较慢的速度使用自定义版本(包括将文本转换为数字)(使用额外的宝贵空间,这对我的项目来说很少)。
如果发布到StackEchange是错误的论坛,请迁移并发布迁移的原因。
答案 0 :(得分:2)
听起来微控制器端没有设置好为UART和SPI外设提供服务,因此UART上后续字符的到达过快导致SPI无法提供服务,或者可能导致错过UART上的某些字符。
强大的解决方案是了解问题并将其修复到微控制器代码的体系结构中。例如,您可能需要使用中断并让中断服务程序在较长的软件管理的FIFO和外围硬件中经常为1或2深的FIFO之间移动字符。
一个可行的但风险更大的解决方案是让你的C#应用程序在它发送的字符之间插入延迟,以利用人类速度输入的明显工作。这个主题的变体是让嵌入式设备回显字符,让C#程序在发送下一个字符之前等待每个字符的回显(你还需要一个转义字符来清除嵌入式命令缓冲区并重新开始C#程序决定声明嵌入式设备超时并重新开始)
另一个想法是缩短必须发送的数据。嵌入式系统的人类可读命令语言非常棒,因为您已经注意到可以使用终端应用程序来使用它们。但是,如果嵌入式系统受到极大限制,则使用压缩二进制或十六进制格式可以更容易解析。一个极端的单字符命令,其执行之间有暂停,这是最简单的情况(如果你主要使用字母数字,你又可以使用终端程序了)