引导加载程序流控制 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语句...我知道他们很恶心,但他们在这里工作。

引导加载程序流控制 C#

好的

,据我所知,这是更好的选择:首先,删除goto语句,它们很可怕,永远不应该使用。至于无法混合字符/十六进制值的问题,每个字符作为 int 引入时都会被分配它的十六进制值(在程序中转换为 int32)。 当引导加载程序发送0x11时,它很可能会将其作为字符发送,这将作为不可打印的 ASCII 字符进入您的软件,但如果您使用调试器并查看它的实际内容,它仍然具有0x11。 所以我的建议是做一个读字节,然后在软件中转换为int32,并为你想要做的事情做一个switch语句/状态机。