引导加载程序流控制 C#
本文关键字:流控制 程序 加载 | 更新日期: 2023-09-27 18:33:56
我正在努力通过RS485对MCU板进行编程。 我已经完成了访问引导加载程序的代码部分,没有问题。 我的问题出在这段代码中:
int xon_off = ComPort.ReadChar();
if (xon_off == send_data) {
int counter = 0;
string line;
System.IO.StreamReader file = new System.IO.StreamReader("C:/Users/user/Desktop/x.hex");
while ((line = file.ReadLine()) != " ") // reads until end of file
{
write_line: line = file.ReadLine();
if (xon_off == send_data) {
ComPort.Write(line);
//System.Threading.Thread.Sleep(500);
counter++;
xon_off = ComPort.ReadByte(); // should be x_off
error_check = ComPort.ReadByte(); // will give line complete or error
xon_off = ComPort.ReadByte(); // should be x_on
} else if (xon_off == stop_data) {
read_again: xon_off = ComPort.ReadByte();
if (xon_off == send_data) {
goto write_line;
} else {
goto read_again;
}
}
}
我的问题与流量控制(x_on/x_off/eof/等)有关。 当前代码的方式是,它可以发送页面错误,并且该工具继续发送,就像什么都没有一样,所以显然我的读取/比较语句是关闭的。 有人可以帮助我找出为什么当它发送页面错误时,我的代码认为它正在发送x_on?
注意:x_on是上面设置为 0x11 的变量,x_off 是上面设置为 0x13 的变量,只是为了澄清。
注意:一旦我弄清楚了这一点,我的下一步就是删除goto语句...我知道他们很恶心,但他们在这里工作。
好的
,据我所知,这是更好的选择:首先,删除goto语句,它们很可怕,永远不应该使用。至于无法混合字符/十六进制值的问题,每个字符作为 int 引入时都会被分配它的十六进制值(在程序中转换为 int32)。 当引导加载程序发送0x11时,它很可能会将其作为字符发送,这将作为不可打印的 ASCII 字符进入您的软件,但如果您使用调试器并查看它的实际内容,它仍然具有0x11。 所以我的建议是做一个读字节,然后在软件中转换为int32,并为你想要做的事情做一个switch语句/状态机。