Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2018-07-26 16:24:39 +0300
committerDavid Crocker <dcrocker@eschertech.com>2018-07-26 16:24:39 +0300
commit1ff82b7f7c6f0b879008e248cf71da97daa2d5a3 (patch)
treec5662c903e0e010ce1197f8d82d41051180fd9dc
parente24175aaf31140178e51d757a46fce235b81da3a (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.txt13
-rw-r--r--src/GCodes/GCodeBuffer.cpp9
-rw-r--r--src/GCodes/GCodeBuffer.h1
-rw-r--r--src/GCodes/GCodes.cpp11
-rw-r--r--src/RepRap.cpp4
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
);
}