评论
|
这是印刷品吗您的平台/ cpu速度是多少?这是否与ISR事件开始时的终点挡板触发有关?这需要多长时间,也许~4秒钟?这种情况多久发生一次? 感谢您的举报! |
|
我可以证实。打印时,当一个图层即将完成时会发生这种情况。打印停止几秒钟,同时显示许多”错误:0 ISR超越自身。”错误。然后继续下一层。大约10 – 15层后,固件崩溃,不再响应。(图纸居中,远离终点挡板) 用Arduino 0023编译的马林1.0.0 Beta 1 |
|
一旦ISR发送了这个例程,它很可能在下一次失败,因为串行发送块。如果我们只发送一次信息,它可能会恢复得更快。这不是一个解决办法,但如果能知道是什么原因造成的,那就太好了。 任何人,你能再打印一次相同的文件吗,错误在同一个位置吗?血红露露的频率是多少? 你的微控制器频率是多少,16兆赫? |
|
我在一个坡道1.3与arduinomega128@16mhziirc.我不会在同一张照片上再试一次(尤达,12小时变成13小时的照片),但我会看看我的精细细节测试照片是否会发生这种情况,如果它在同一个地方一直失败,我会报告回来。 我还将硬件缓冲区从16块增加到32块,这似乎使它更健壮,但并没有消除问题(我可能是在自欺欺人,因为我没有做A/B测试)。 |
|
我又试了一次。它将可靠地但在随机点失效。一个常见的行为是打印停止时,pronterface变得非常不稳定/崩溃。重新启动pronterface后,无需重新启动打印机即可重新连接。(我重新启动打印机之前,每一次尝试,以确保)
电子元件是标准孟德尔部件Gen6 |
|
Pronterface会阻止等待结果,所以这并不奇怪。我已经崩溃了它举行的arduino下来重置或拔掉usb。由于固件崩溃,这是一种预期。 有趣的是,我们看到的数字即错误:$整数ISR超越自己。都是不同的。我去看资料了。 |
|
对代码的进一步检查让我觉得我们很幸运,加热器没有失控。 此外,我还添加了一个本地补丁,以便只发送一次串行错误,而不是每次溢出。如果有帮助的话我会再承诺的。 最后,我又一次撞车了,每次跑步都发生在完全不同的地方。 |
|
进行以下变更后重新运行: // in configuration.h
#define BUFSIZE 5
#define BLOCK_BUFFER_SIZE 32
// in stepper.cpp
volatile int errorsent=0;
//in ISR(TIMER1_COMPA_vect)
if(busy){
if(errorsent){
SERIAL_ERROR_START
SERIAL_ERROR(*(unsigned short *)OCR1A);
SERIAL_ERRORLNPGM(" ISR overtaking itself.");
errorsent=1;
}
return;
}
///etc the rest of ISR
errorsent=0;
这可防止重复发送ISR错误。它没有做任何事情来解决根本原因,虽然我想知道如果一个更大的最小段大小将防止超限合并多个短期移动?我目前有5个,但与16 X微步,这是<1/10毫米对我的机器。也许我可以做10?随便说说… |
|
@rantenki:谢谢,就这样。 副作用:在之前的所有测试中,打印未按预期居中。现在它正确地居中了! |
|
不幸的是,这个修复没有解决根本原因,不管它可能是什么,尽管我怀疑短段导致ISR花费的时间比步骤间的时间长。我们也许可以通过静态分析来解决这个问题,但这听起来并不有趣。;)它不会帮助使用8 Mhz和/或低RAM的用户(即:Atmega168)。 |
|
但与失败的打印相比,这是一个很大的进步。有了这个修复程序,我觉得它比“官方”的0.9.xx版本更稳定。(提高分辨率/质量也会很棒…) |
|
我一直在想这可能是什么原因。在打印相同的文件时,我发现关于ISR的操作,只有以下两点不是100%确定的:
如果是定时器,我们可以手动执行中断优先级设置:存储在易失性uint8_t中的值为0 1 2的枚举/定义。运行时 moveISR或tempISR分别写入1或2。完成后,两者都写入0。 |
|
搅拌机64。你的终点挡板似乎也有问题。(错误触发) 带有0和32的ISR警告是我正在调查的固件错误。OCR1A不应为0或32。我从来不写100这个值<。(至少不是直接) |
|
兰滕茨基, 你能重现这个错误吗?我的问题之一是我不能复制它。 |
|
Erik:我见过一些问题,表现为打印暂停,但使用的是自动sd卡打印。我可以试着用一个串行连接的主机软件来监控正在发生的事情。我怀疑这可能是同样的原因,所以至少我可以测试。恼人的问题:它只发生在我3次在3小时的累计打印时间。 |
|
兰滕库, 你能用最新版本测试吗?现在,它应该只显示一次消息,而不是在ISR中显示。 |
|
ErikZalm:是的,我可以在任何时候复制,尽管我今天不在实验室,所以明天之前我不能再试一次。我明天会给予新版本。 对不起,我的工作日程安排有点紧张,所以很坚韧挤出时间来测试东西。 |
|
兰滕基, 你能给予一下如何复制它吗?那可帮了大忙了。 |
|
是的,非常长的运行与许多非常精细的细节和短线段与默认配置。如果我把尤达缩小到1/4的大小,它会在几个小时的打印时间后发生。一旦我今天晚些时候回来,我就可以附加触发它的gcode(几个小时后)。 |
|
我从步进机ISR中删除了嵌套。它显示了这条信息。 允许嵌套以防止串行错误。现在,通过检查步进机ISR中的串行线即可完成此操作。 |
|
布库比切克/埃里克·扎尔姆:最新版本的星期六似乎没有同样的问题,我没有得到任何失败,在一些相当长的打印以前失败。也就是说,这并不是完全确定的,所以直到我们得到大量重复的非失败(我不需要那么多yoda),才能保证bug得到修复。从ISR中取出串行写入似乎确实减少了故障的级联性质,但我认为在我们可以称之为关闭之前,我们需要大量的测试。 至于volatile枚举的设置,也许我们可以找到一个好的arduino信号量库(我知道freeRTOS有一些),因为在check/set条件中总是存在竞争的风险,这将导致读取/设置不正确的状态。 伙计,这些东西真的提醒了我为什么我不怀念嵌入式开发;) |
|
兰滕基, 谢谢你的测试。星期六的版本改进了它,但我在高速打印时仍然遇到了问题。 |
|
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |



前端接口日志窗口将填充以下内容:
– –剪—
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 ISR正在超越自身。
错误:0 I
– –剪—
然后打印机出现故障,没有进一步的输出,或偶尔重新启动,并显示:
错误:行号不是最后行号+1,最后一行:0
重新发送:1
此外,它没有崩溃,但早些时候我有以下内容:
—剪—
错误:32 ISR正在超越自身。
错误:32 ISR正在超越自身。
错误:32 ISR正在超越自身。
—剪—
在这两种情况下,日志都有数百行这样的行,然后通常继续没有问题。
似乎更常见于紧角和短段。相关?