diff options
author | David Crocker <dcrocker@eschertech.com> | 2018-07-26 16:24:39 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2018-07-26 16:24:39 +0300 |
commit | 1ff82b7f7c6f0b879008e248cf71da97daa2d5a3 (patch) | |
tree | c5662c903e0e010ce1197f8d82d41051180fd9dc | |
parent | e24175aaf31140178e51d757a46fce235b81da3a (diff) |
Release 2.01/1.222.01
Save user stack instead of system stack data when stuck in a spin loop
Handle M28 in a macro without a matching M29
-rw-r--r-- | src/BugList.txt | 13 | ||||
-rw-r--r-- | src/GCodes/GCodeBuffer.cpp | 9 | ||||
-rw-r--r-- | src/GCodes/GCodeBuffer.h | 1 | ||||
-rw-r--r-- | src/GCodes/GCodes.cpp | 11 | ||||
-rw-r--r-- | src/RepRap.cpp | 4 |
5 files changed, 19 insertions, 19 deletions
diff --git a/src/BugList.txt b/src/BugList.txt index 7fcf45fd..8d62eb94 100644 --- a/src/BugList.txt +++ b/src/BugList.txt @@ -236,21 +236,22 @@ Bug fixes/investigations for 2.02beta3: - [done] Initial assumed Z position could be strange because babystepping wasn't cleared early enough at startup - [done] allow Z probe mod pin to be accessed as a GP output pin (but some Z probe modes will still change it) - [done] allow up to 5 drivers/axis on Duet 2 WiFi/Ethernet instead of 4 -- [done, test] M28/M29 in macro still doesn't work if the M29 is right at the end of the file. Also test the case of no M29. +- [done, test] M28/M29 in macro still doesn't work if the M29 is right at the end of the file +- Also doesn't work if no M29 in macro file - [done, ok] Fix tacho RPM readings - [done] Fix homing additional axes on a delta printer - [already fixed in 2.01beta2 according to deckingman] Pressure advance with high K and low microstepping, see https://forum.duet3d.com/topic/1935/more-strange-pressure-advance-behaviour/95 - [done, ok] If retractprobe.g contains any movement commands, G32 works but produces no output at the end of bed probing - [done, ok] Don't treat dumb drivers as extruders by default on Duet WiFi/Ethernet -- implement DRC -- Do we need to defer stall detection when a motor is starting from rest? -- [done, test] Stack trace doesn't provide useful data when "stuck in spin loop" - need to locate and print user stack in this case? https://forum.duet3d.com/topic/6070/new-firmware-2-01-beta-2-available/23 -- Should we limit bed probing like other moves? https://forum.duet3d.com/topic/6070/new-firmware-2-01-beta-2-available/19 +- [defer] implement DRC +- [checked, looks ok] Do we need to defer stall detection when a motor is starting from rest? +- [done, ok] Stack trace doesn't provide useful data when "stuck in spin loop" - need to locate and print user stack in this case? https://forum.duet3d.com/topic/6070/new-firmware-2-01-beta-2-available/23 +- [defer] Should we limit bed probing like other moves? https://forum.duet3d.com/topic/6070/new-firmware-2-01-beta-2-available/19 - [awaiting reply] Step errors when using Nimble and pressure advance, https://forum.duet3d.com/topic/3139/high-level-of-steperrors-what-can-cause-them/5 - [awaiting reply] GCode file that pauses between parts, https://forum.duet3d.com/topic/5702/printer-keeps-pausing-during-print/15 - [looks like it was a temperature sensing error] Is there a kink during auto tuning? https://forum.duet3d.com/topic/5582/hot-end-auto-tuning-failed-due. Could explain oddly low dead times from auto tuning. - Stuck in spin loop, https://forum.duet3d.com/topic/5674/damned-crash-stuck-in-spin-loop -- Report that if you use FileZilla to upload several short files, some of them are written blank, https://forum.duet3d.com/topic/5992/files-uploaded-over-ftp-occasionally-blank +- [defer] Report that if you use FileZilla to upload several short files, some of them are written blank, https://forum.duet3d.com/topic/5992/files-uploaded-over-ftp-occasionally-blank - Investigate failed .BMP conversion, https://forum.duet3d.com/topic/5623/boot-logo-corruption-in-1-21/2 diff --git a/src/GCodes/GCodeBuffer.cpp b/src/GCodes/GCodeBuffer.cpp index 817c66a8..fae7551f 100644 --- a/src/GCodes/GCodeBuffer.cpp +++ b/src/GCodes/GCodeBuffer.cpp @@ -1145,14 +1145,17 @@ void GCodeBuffer::FileEnded() } else { - Put('\n'); // append a newline in case the file didn't end with one + if (gcodeLineEnd != 0) // if there is something in the buffer + { + Put('\n'); // append a newline in case the file didn't end with one + } if (IsWritingFile()) { bool gotM29 = false; - if (IsReady()) // if we have a complete command + if (IsReady()) // if we have a complete command { gotM29 = (GetCommandLetter() == 'M' && GetCommandNumber() == 29); - if (!gotM29) // if it wasn't M29, write it to file + if (!gotM29) // if it wasn't M29, write it to file { fileBeingWritten->Write(Buffer()); fileBeingWritten->Write('\n'); diff --git a/src/GCodes/GCodeBuffer.h b/src/GCodes/GCodeBuffer.h index f35ec003..ffadba48 100644 --- a/src/GCodes/GCodeBuffer.h +++ b/src/GCodes/GCodeBuffer.h @@ -62,7 +62,6 @@ public: int GetToolNumberAdjust() const { return toolNumberAdjust; } void SetToolNumberAdjust(int arg) { toolNumberAdjust = arg; } void SetCommsProperties(uint32_t arg) { checksumRequired = (arg & 1); } - bool StartingNewCode() const { return gcodeLineEnd == 0; } MessageType GetResponseMessageType() const { return responseMessageType; } GCodeMachineState& MachineState() const { return *machineState; } GCodeMachineState& OriginalMachineState() const; diff --git a/src/GCodes/GCodes.cpp b/src/GCodes/GCodes.cpp index f72201c2..f7845083 100644 --- a/src/GCodes/GCodes.cpp +++ b/src/GCodes/GCodes.cpp @@ -1487,14 +1487,11 @@ void GCodes::DoFilePrint(GCodeBuffer& gb, const StringRef& reply) case GCodeInputReadResult::noData: // We have reached the end of the file. Check for the last line of gcode not ending in newline. - if (!gb.StartingNewCode()) // if there is something in the buffer + gb.FileEnded(); // append a newline if necessary and deal with any pending file write + if (gb.IsReady()) { - gb.FileEnded(); // append a newline and deal with any pending file write - if (gb.IsReady()) - { - gb.SetFinished(ActOnCode(gb, reply)); - return; - } + gb.SetFinished(ActOnCode(gb, reply)); + return; } gb.Init(); // mark buffer as empty diff --git a/src/RepRap.cpp b/src/RepRap.cpp index 3a74ac81..5774dbf9 100644 --- a/src/RepRap.cpp +++ b/src/RepRap.cpp @@ -726,12 +726,12 @@ void RepRap::Tick() register const uint32_t * stackPtr asm ("r2"); // we want the PSP not the MSP platform->SoftwareReset( (heatTaskStuck) ? (uint16_t)SoftwareResetReason::heaterWatchdog : (uint16_t)SoftwareResetReason::stuckInSpin, - stackPtr + stackPtr + 5 // discard uninteresting registers, keep LR PC PSR #else register const uint32_t * stackPtr asm ("sp"); platform->SoftwareReset( (uint16_t)SoftwareResetReason::stuckInSpin, - stackPtr + 5 // discard the stack used by our tick handler + stackPtr + 5 // discard uninteresting registers, keep LR PC PSR #endif ); } |