我的程序需要帮助,我想同时从几个微控制器读取代码并将其转换为纯文本。只有一个串行接口可以收集所有代码。代码的翻译工作正常,但是我有一个问题,即代码读取不正确。他会在没有间隙和有间隙的地方(500微秒)反复停顿一下。他并不总是正确地识别它们。
这是代码的一部分:
public byte[] block = new byte[4096];
public int posBlock = 0;
public void Read(object sender, SerialDataReceivedEventArgs e)
{
console_.WriteLine("--------------------------------------------------");
console_.WriteLine("Void: Read(object sender, SerialDataReceivedEventArgs e)");
int offset = 0, count = serialPort.BytesToRead, i = 0;
byte[] rd = new byte[count];
serialPort.Read(rd, offset, count);
for (int buffer = 0; buffer < count; buffer++) { block[posBlock + buffer] = rd[buffer]; i = buffer; }
i++;
posBlock += i;
string rcpausgabe = null;
for (int i2 = 0; i2 < posBlock; i2++) { rcpausgabe += " " + (int)(block[i2]); }
//WriteProtocol(global_.variables.protocol_other, rcpausgabe, true);
console_.WriteLine("ReadCode: " + rcpausgabe);
if (IsDecode == false) { Zersetzten(); } else { console_.WriteLine("Add but not Zersetzen()"); }
IsDecode = false;
console_.WriteLine("--------------------------------------------------");
}
bool IsDecode = true;
public int ib = 0;
public string bs = null;
private void Zersetzten()
{
IsDecode = true;
console_.WriteLine("--------------------------------------------------");
console_.WriteLine("Void: Zersetzten()");
byte[] b = new byte[4096];
while (!(ib >= posBlock))
{
for (int i7 = 0; i7 < b[1] + 3; i7++)
{
string rcpausgabe1 = null;
b[i7] = block[ib];
ib++;;
if (i7+1 == (b[1] + 3))
{
Thread.Sleep(500);
console_.WriteLine("Decoding b");
for (int i2 = 0; i2 < b[1]+3; i2++) { rcpausgabe1 += " " + (int)(b[i2]); }
console_.WriteLine("Decoding Code: " + rcpausgabe1);
bs = rcpausgabe1;
Decoding(b);
}
}
}
IsDecode = false;
block = new byte[4096];
posBlock = 0;
ib = posBlock;
console_.WriteLine("--------------------------------------------------");
}
我已经编写了自己的控制台(console_)来帮助我完成此任务,这使我可以实时跟踪所有进程。
我也感谢每个人预先提供的答案。
(我用Pons转换器翻译了此文本,因为我的英语不太好)
答案 0 :(得分:0)
我无法发表评论,因此我必须使用帖子来帮助您阐明您的问题。 如果您可以提供更多详细信息,我会进行修改。
使您的问题更清楚。
您期望得到什么结果以及观察到什么样的现象。
制作minimal, reproducible example
显然,Read(object sender, SerialDataReceivedEventArgs e)
不在您的帖子内部。
虽然您的问题是阅读已“暂停”,但是哪个代码段正在调用Read
可能是必不可少的。
什么是“暂停”和什么是“差距”。
他在没有空隙和有空隙(500微秒)的地方反复停顿。
我只能猜测您的程序在存在间隙时会“暂停”,但不知道什么是“间隙”和“暂停”。
for (int i7 = 0; i7 < b[1] + 3; i7++)
和for (int i2 = 0; i2 < b[1]+3; i2++)
想要实现什么?
您正在使用b [1]进行索引编制,并且在接收数据时更改了b [1]。
编辑:添加如何创建最小的,可复制的示例。 Edit2:在for循环中指出一段奇怪的代码。
答案 1 :(得分:0)