VB net如何增加微秒级延时。0.5ms就够了。
vb.net吧
全部回复
仅看楼主
level 1
蓝梦妖蝶 楼主
系统是电脑通过串口控制stm32,stm32通过I2C再于其他设备通讯。
硬件发送一次I2C数据时间大概为0.2ms。如果不加延时,经常丢数据。
如果用Threading.Thread.Sleep(1)增加延时的话。一般延时是1.3ms,这样的话时间太长了。
用了其他延时方法,还不如sleep呢。至少sleep稳定,不会一会几毫秒,一会几十毫秒的。
VB这边如何增加一个比较稳定,延时约0.5ms的延时呢?
2018年07月09日 08点07分 1
level 1
蓝梦妖蝶 楼主
STM32这边的程序:
if (CDC_rx_len)
{
cmd = UserRxBufferFS[i];
switch (cmd)
{
case 0xF0: cr = UserRxBufferFS[i
+3
];
lf = UserRxBufferFS[i+4];
break;
}
if (cr==0x0D && lf==0x0A)
{
switch (cmd)
{
case 0xF0:reg_addr = UserRxBufferFS[i+1];
reg_data = UserRxBufferFS[i+2];
i=i+5;
I2C_Write(0xF0, reg_addr, reg_data);
break;
}
}
if(i>=CDC_rx_len)
{
CDC_rx_len = 0;
i=0;
}
2018年07月09日 08点07分 2
level 1
我知道的延时方案都是ms级的,没有小数;
下面是一种想法,不知道可不可行,200000次赋值的时间大概是0.48ms(不同的机器可能不一样,这个值是按下面方案验证推测出来的)。
经验证,同一台机器,次数翻10倍,100倍,1000倍,对应的时间为5ms、48ms、478ms;因此有理由相信,不翻倍的时候,对应的时间为0.48ms(次数已经足够多,应当可以忽略其它因素造成的影响)。但是,不同机器的差异待验证。
Imports System
Class MainA
Shared Sub P1()
Dim tmp = 1
Dim t1 = Date.Now
For i = 1 To 200000 ' * 1000
tmp = 1
Next
Dim t2 = Date.Now
Console.WriteLine($"{t2 - t1}")
End Sub
Public Shared Sub Main()
While True
P1()
End While
End Sub
End Class
2018年07月09日 09点07分 3
每个数值都是都是稳定的,波动较小
2018年07月09日 09点07分
时间我只会测量ms以上的值,以下的值不会测量
2018年07月09日 09点07分
@Ms_yam 谢谢我试试
2018年07月09日 10点07分
level 1
蓝梦妖蝶 楼主
我觉得应该可以用NewLine之类的强制发一个结束符。这样就不用写入等待了。
读的时候也可以加个等待。直到读到数的时候才保存。这样就不用读取等待了。
问题是,SerialPort哪个是这个功能的代码呢?貌似没有找到呢
2018年07月10日 02点07分 6
汇编的中断貌似有这个功能[阴险]
2018年07月10日 04点07分
level 11
应该研究一哈为啥会丢数据,先假设不是延时的问题
2018年07月10日 14点07分 7
1