Browse Source

Remove serial0-output-line, fix stack overflow in serial debug output (fix #741)

Fabian 1 year ago
parent
commit
0c17fea221
2 changed files with 20 additions and 21 deletions
  1. 10 13
      examples/lua.html
  2. 10 8
      src/uart.js

+ 10 - 13
examples/lua.html

@@ -26,9 +26,11 @@ window.onload = function()
         },
         autostart: true,
         disable_keyboard: true,
+        disable_mouse: true,
     });
 
     var data = "";
+    var do_output = false;
 
     emulator.add_listener("serial0-output-char", function(char)
     {
@@ -37,24 +39,17 @@ window.onload = function()
             data += char;
         }
 
+        if(do_output)
+        {
+            document.getElementById("result").textContent += char;
+        }
+
         if(data.endsWith("~% "))
         {
             console.log("Now ready");
             document.getElementById("status").textContent = "Ready.\n";
             document.getElementById("run").disabled = false;
-        }
-    });
-
-    emulator.add_listener("serial0-output-line", function(line)
-    {
-        // filter noise
-        if(!line.startsWith("/root% lua -e") &&
-           !line.startsWith("> ") &&
-           line.indexOf("Welcome to Buildroot") === -1 &&
-           line.indexOf("login:") === -1 &&
-           line.trim() !== "")
-        {
-            document.getElementById("result").textContent += line;
+            do_output = false;
         }
     });
 
@@ -75,6 +70,8 @@ window.onload = function()
         document.getElementById("result").textContent = "";
         document.getElementById("status").textContent = "Running ...\n";
         this.disabled = true;
+
+        do_output = true;
     };
 };
 

+ 10 - 8
src/uart.js

@@ -67,7 +67,7 @@ function UART(cpu, port, bus)
 
     this.input = new ByteQueue(4096);
 
-    this.current_line = [];
+    this.current_line = "";
 
     switch(port)
     {
@@ -350,13 +350,15 @@ UART.prototype.write_data = function(out_byte)
 
     this.bus.send("serial" + this.com + "-output-char", char);
 
-    this.current_line.push(out_byte);
-
-    if(char === "\n")
+    if(DEBUG)
     {
-        const line = String.fromCharCode.apply("", this.current_line).trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g, "");
-        dbg_log("SERIAL: " + line);
-        this.bus.send("serial" + this.com + "-output-line", String.fromCharCode.apply("", this.current_line));
-        this.current_line = [];
+        this.current_line += char;
+
+        if(char === "\n")
+        {
+            const line = this.current_line.trimRight().replace(/[\x00-\x08\x0b-\x1f\x7f\x80-\xff]/g, "");
+            dbg_log("SERIAL: " + line);
+            this.current_line = "";
+        }
     }
 };