【发布时间】:2017-03-02 17:48:33
【问题描述】:
我是嵌入式开发的新手,前几次我刷了一些关于 PIC24xxxx 的代码。
void i2c_Write(char data) {
while (I2C2STATbits.TBF) {};
IFS3bits.MI2C2IF = 0;
I2C2TRN = data;
while (I2C2STATbits.TRSTAT) {};
Nop();
Nop();
}
您如何看待 while 条件?微芯片不会为此使用大量 CPU 吗?
我问了自己这个问题,惊讶地在网上看到很多类似的代码。
没有更好的方法吗?
Nop() 呢,为什么是两个?
【问题讨论】:
-
如果您无事可做并且必须等待事情完成,那么您必须等待,以及如何等待您投票...如果您还有其他事情要做然后你可以在做其他事情的时候经常轮询,或者你可以使用中断。
-
这两个 nop 可能是为了在事务之间消磨 i2c 总线上的时间,以防您背靠背地执行它们。他们可能有一个问题违反了公共汽车的时间安排,并且为了解决它而延误了一些时间,这又是相当典型的。你正在用软件实现一个硬件状态机,所以你必须做一些事情,比如等待这个,等待那个,延迟 N 个时间段,等等......