Thread 中讨论的其他器件:SysConfig
大家好、
我已通过 系统配置工具使用 UART2驱动程序将本机 UART 接口分配给两个器件(115200和9600、两者均为8N1)。 除了"串行"任务之外、没有其他正在运行的任务。 我观察到在接收、处理和随后通过示波器上的 UART2发送应答之间存在很大的延迟(+1秒)。 这远远不是最佳的、而且即将出现功能失调的情况-我想将这种延迟至少减少800ms。

通过主机显示禁用"Display_printf"进行调试可能会改善运行时间、但考虑到仅使用一个串行外设的延迟、我无法想象这两个外设会更好。 我需要优化处理串行外设的方法。
我正在考虑的解决方案:
- (当前) 具有四个事件(COM1_RX、COM1_TX、COM2_RX、COM2_TX)的"串行"任务、具有回调和外部可访问的"serial_write"函数。
- 事件 COMx_RX 调用 UART2_READ 以读取静态本地缓冲区。
- 事件 COMx_TX 调用 UART2_Write 来写入静态本地缓冲区。
- "serial_write"将远程缓冲区复制 到静态本地缓冲区、然后根据指定的端口布置事件 COMx_TX。
- callbackFxn_read 将缓冲区指针和长度传递给外部函数、用于解析和发布事件 COMx_RX、以重新启用串行 RX。
- (下一个解决方案)一个具有同等优先级的"COM1"和"COM2"任务、每个任务都演示了以下行为。
- 任务循环(串行读取和分析)
- 进入任务循环时调用 UART2_READ。
- 信号量块直到回调 Fxn_read 释放信号量。
- UART 消息在本地解析。
- 可从外部访问的"serial_write"函数
- "serial_write"会将远程缓冲区复制到静态本地缓冲区、UART2_write 会立即复制。
- 任务循环(串行读取和分析)
我考虑的事项:
- 没有系统可以排队或列出消息-消息的处理速度与接收或生成速度一样快。
- 时钟用于(1)生成一些消息、(2)生成丢失消息的超时中断、时间至关重要。
- 三个任务(简单外设、COM1和 COM2)将在它们之间通信信息、因此需要平衡线程安全性和延迟。
在推进总体项目开发之前、我正在寻找任何和所有建议来提高绩效。
Ken


