【发布时间】:2013-04-22 20:29:38
【问题描述】:
好的,这个问题可能有点宽泛,因为我真的不知道从哪里开始。我会尽量说清楚。
我有一个带有已知显示驱动程序的手机显示器,我有数据表。此显示器将通过 SPI 与微控制器(msp430g 类型)通信。
发送到显示器的某些命令不会产生响应,但有些会产生响应,响应可能是几个“字节”(9 位数据)。
我首先认为我应该有一个 fifo 缓冲区,微控制器向其提供命令,以便微控制器可以在命令被移出时执行其他操作。但是我觉得在有响应的情况下,命令会与可能的响应“断开”。我不知道如何处理。
我的第二个想法是将所有命令作为函数来执行相关命令所需的 (write->[read*x])。但这感觉就像我会让微机站在那里等待 SPI 接口。
在这种情况下,“正常”的做法是什么?我想有很多答案,但我确信已经编写了很多代码,它们使用某些接口与某些设备进行通信,但在接口“工作”时执行其他操作。
如果对我想要做的事情有任何含糊之处,请告诉我,我会尽力澄清。
【问题讨论】:
-
答案最终将取决于诸如您将根据显示器的潜在响应采取什么行动、延迟可能是什么以及您对处理器还有哪些其他任务等因素。
-
我没有将其发布为答案,但总的来说(至少在我的项目中)我考虑采用以下方法。在大多数硬件(如显示器、传感器等)中,数据表描述了您可以期待响应的时间范围。在一天结束时,硬件和 MCU 之间的通信不能保证 TCP 的交付。所以如果你遵循一个策略,在答案到达之前等待指定的时间量,然后读取它(或考虑没有答案/错误),以防它不是到了你应该没事。
-
您不必阻止主循环等待,只需使用计时器或任何类似的标记,您希望从某个设备得到答案,然后实现简单的状态机,如(IDLE,AWAITING ANSWER , ERROR 等),将由主循环或计时器维护
-
@evilruff 所以基本上只是发送命令(不超过写入两个寄存器),等待发送完成后的设定时间,然后采取行动。
-
这正是我的意思
标签: c interface embedded microcontroller msp430