开源改变世界!!

uno r2 #173上的串行已损坏

推推 grbl 2年前 (2022-10-31) 343次浏览 0个评论
关闭
mcclurem 打开了这个问题 on 29 Jan 2013 · 15 条评论
关闭

uno r2 上的串口坏了#173

mcclurem 打开了这个问题 on 29 Jan 2013 · 15 条评论

注释

uno r2 #173上的串行已损坏

我有一个运行 0.6 的 unor r2 没问题。升级到0.7或0.8,串口流废话。确定它的范围,它以 37Hz 周期性地发出一个 630us 的低脉冲。我不知道 wtf 在这里。

uno r2 #173上的串行已损坏
成员

尚尼特 评论 on 29 Jan 2013

奇怪的。在 v0.6、v0.7 和 v0.8 之间,对串行协议进行了许多调整,但我有一个 Uno(不确定 rev 版本)并且一切正常。所以我认为这可能是某个地方的设置问题。您是否通过断开 USB 线以外的所有设备来消除任何外部影响?尝试过 Wiki 中列出的闪烁方法吗?有关您正在做什么以及如何帮助我们诊断您的问题的更多信息。

uno r2 #173上的串行已损坏
作者

麦克卢伦 评论 on 29 Jan 2013

我正在使用 avrisp MK11。它在闪烁后读回闪光灯并说一切都是花花公子。我尝试手动擦除 eeprom 然后重新刷新但没有成功。有趣的是,无论我使用预编译的二进制文件还是自己构建,它都会在 0.6/0.7 版本拆分时中断。尝试使用连接的和未连接的屏蔽开关。看起来它可能试图从那个别针中取出一些东西?或者是37Hz的方式来减慢?

要确定您的版本,请查看:
http ://arduino.cc/en/Main/ArduinoBoardUno

我只是不知道该怎么做

uno r2 #173上的串行已损坏
成员

尚尼特 评论 on 29 Jan 2013

当您使用 AVRmkii 刷新 Arduino 时,您使用什么命令标志?你试过’-D’标志吗?或者将 Arduino 引导加载程序(通过 IDE 完成)刷到 Arduino 上,然后使用 Arduino USB 编程器代替?这可能会解决它。

我不在家看Uno,我会去看看。我很确定这是 Rev 1 或 Rev 2,但它们之间几乎没有区别。

不确定 37Hz 脉冲是什么,但绝对不是阶跃脉冲。

uno r2 #173上的串行已损坏
作者

麦克卢伦 评论 on 29 Jan 2013

尝试了引导加载程序,但没有成功。我正在尝试进一步调试并注意到负脉冲(630us)的宽度取决于波特率。开始怀疑是否有办法让串行驱动程序变得无聊?

uno r2 #173上的串行已损坏
作者

麦克卢伦 评论 on 29 Jan 2013

进一步的调试表明串行变低可能是一个副作用,导致电路板在 37Hz 时复位。我在 main 的第一行添加了一些小玩意,发现它正在重置。

通过代码进行一些进一步的二进制搜索显示崩溃发生在通过“protocol_execute_startup”调用的“settings_read_startup_line”调用的“memcpy_from_eeprom_with_checksum”执行期间

uno r2 #173上的串行已损坏

有趣的。无法确定您的 Arduino 发生了什么。“settings_read_startup_line”仅适用于 v0.8c+。似乎您的 Arduino 的 EEPROM 或 EEPROM 代码导致崩溃。一般来说,自 v0.6 以来,EEPROM 设置的操作没有太大变化。或者它可能是从特定事件序列中突然出现的一些晦涩的错误。很难说。我会环顾四周,看看是否能发现任何东西,但这样的东西很难确定。

回到家里,我确实有一个 rev1 Uno,所以我无法进行苹果与苹果的比较。但是,我感觉至少有几十个或更多的用户有一个rev2 Uno,而且还没有报告过这样的案例。这可能是一个孤立的问题。如果您发现任何新线索,请告诉我。我也会这样做。

uno r2 #173上的串行已损坏
贡献者

tmpvar 评论 2013 年 1 月 29 日

两种我都用过,基本没问题。我见过几个问题,主要是关于设备没有枚举。通常我会使用 ISP 重新刷新 arduino 引导加载程序,并通过 arduino 协议对十六进制进行 avrdude。

uno r2 #173上的串行已损坏

在带有 Win7 的 Arduino Nano 3.0 上也是如此。
当使用 avr-gcc 4.6.2(来自 AVR-Studio 6.0)编译时,我会定期重新启动。
使用 avr-gcc 4.3.3 (WinAVR20100110) 编译的相同代码很好!

uno r2 #173上的串行已损坏

这是不幸的。听起来像是某个地方再次出现的问题。但至少我们有另一个线索。@sebbra您是否在 v0.7 和 v0.8 中看到相同的行为,但在 v0.6 中没有看到@mcclurem有?这样做将不胜感激。这将缩小我需要在代码中查找的范围。

uno r2 #173上的串行已损坏

我还看到了 AVRStudio4 和 AtmelStudio6 编译代码之间的行为变化(编译器和 stdlib 的差异)。有时编译器不会警告其中之一 – 然后就是整个’const’的东西。我发现内存乱写的地方是 memset。我先检查它们。

uno r2 #173上的串行已损坏

我已经使用 edge 的代码进行了尝试,但明天我将尝试 v0.6 和 v0.8。

uno r2 #173上的串行已损坏

我试过 grbl:
v0.9a v0.8c v0.7d v0.6b 和 v0.51。

我使用过 avr-gcc:
4.3.2(WinAVR20081205)、4.3.3(WinAVR20100110)、4.5.1(AVR-Studio 5.0)、4.6.2(AVR-Studio 6.0) 和 4.7.2(MHV AVR Tools)。

Grbl 0.51 和 0.6b 有 avr-gcc > 4.3.3 的编译错误,因为 delay.h…..

使用 AVR-Studio 6.0 中的 avr-gcc 4.6.2,我可以重新启动所有版本。

所有其他组合都可以。

uno r2 #173上的串行已损坏

太感谢了@sebbra. 似乎 avr-gcc 4.6.2 肯定有一些东西。我将看看 memsets@aldenhart建议。如果有人对此有任何其他想法,请告诉我。没有什么真正被完全排除。

顺便问一下,我们页面上的预编译固件是怎么做的?特别是 v0.6b 到 v0.8c?不确定 v0.6b 是用什么编译的(可能是旧的 Arduino IDE avr-gcc 版本)。v0.7d+ 都使用 Arduino IDE v1.0+ 和 avr-gcc 4.3.2 编译(我认为)。

uno r2 #173上的串行已损坏

有趣的信息。我一直在用 4.7.0 编译。另外,我想我测试了您页面中的二进制文件并遇到了同样的问题。我今天可以再检查一次。我会尝试看看使用 arduino IDE gcc 是否可以修复它。我很好奇为什么我们会在特定版本的 GCC 中看到这个问题。是否有一个补丁集正在修复/破坏某些东西?
@sebbra– 你能在 4.7.2 和 4.6.2 上编译 8.c 并比较 memcpy_from_eeprom_with_checksum 中的 asm 吗?

uno r2 #173上的串行已损坏

@mcclurem– 对不起,我最近几周忙于工作..

它们并没有太大的不同,它们使用不同的寄存器,但它们非常相似。


; GNU C (AVR_8_bit_GNU_Toolchain_3.4.0_663) 版本 4.6.2 (avr)
;由 GNU C 版本 4.6.1、GMP 版本 5.0.2、MPFR 版本 3.0.0、MPC 版本 0.9 编译
;GGC 启发式: –param ggc-min-expand=100 –param ggc-min-heapsize=131072
;通过的选项: -fpreprocessed eeprom.i -mmcu=atmega328p
;-auxbase-strip eeprom.o -Os -Wall -ffunction-sections -fverbose-asm
; 启用选项: -fauto-inc-dec -fbranch-count-reg -fcaller-saves
;-fcombine-stack-adjustments -fcommon -fcompare-elim -fcprop-registers
;-fcrossjumping -fcse-follow-jumps -fdefer-pop -fdevirtualize
; -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-types
;-fexpensive-optimizations -fforward-propagate -ffunction-cse
; -ffunction-sections -fgcse -fgcse-lm -fguess-branch-probability -fident
;-fif-conversion -fif-conversion2 -findirect-inlining -finline
; -finline-functions -finline-functions-call-once
; -finline-small-functions -fipa-cp -fipa-profile -fipa-pure-const
; -fipa-reference -fipa-sra -fira-share-save-slots
; -fira-share-spill-slots -fivopts -fkeep-static-consts
; -fleading-下划线 -fmath-errno -fmerge-constants
; -fmerge-debug-strings -fmove-loop-invariants -fomit-frame-pointer
;-foptimize-register-move -foptimize-sibling-calls -fpartial-inlining
; -fpeephole -fpeephole2 -fprefetch-loop-arrays -freg-struct-return
; -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop
; -fsched-critical-path-heuristic -fsched-dep-count-heuristic
; -fsched-group-heuristic -fsched-interblock -fsched-last-insn-heuristic
; -fsched-rank-heuristic -fsched-spec -fsched-spec-insn-heuristic
; -fsched-stalled-insns-dep -fshow-column -fsigned-zeros
;-fsplit-ivs-in-unroller -fsplit-wide-types -fstrict-aliasing
; -fstrict-overflow -fstrict-volatile-bitfields -fthread-jumps
; -ftoplevel-reorder -ftrapping-math -ftree-bit-ccp
; -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
;-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
;-ftree-forwprop -ftree-fre -ftree-loop-if-convert -ftree-loop-im
; -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops=
; -ftree-phiprop -ftree-pre -ftree-pta -ftree-reassoc -ftree-scev-cprop
; -ftree-sink -ftree-slp-vectorize -ftree-sra -ftree-switch-conversion
; -ftree-ter -ftree-vect-loop-version -ftree-vrp -funit-at-a-time
; -fverbose-asm -fzero-initialized-in-bss

.section .text.memcpy_from_eeprom_with_checksum,”ax”,@progbits
.global memcpy_from_eeprom_with_checksum
.type memcpy_from_eeprom_with_checksum,@function
memcpy_from_eeprom_with_checksum:
推 r8 ;
按 r9 ;
推 r10 ;
推 r11 ;
推 r12 ;
推 r13 ;
推 r14 ;
推 r15 ;
推 r16 ;
推 r17 ;
推 r28 ; /
* prologue: function //
帧大小 = 0 //
堆栈大小 = 11 .L__stack_usage
= 11
movw r10,r24 ; 目的地, 目的地
movw r12,r22 ; 源,源
movw r14,r20 ;尺寸, 尺寸
movw r16,r20 ; 尺寸,尺寸
movw r24,r22 ; 来源,来源
ldi r28,lo8(0) ;校验和,
rjmp .L17 ;
.L19:
movw r8,r24 ; 源,源
sec
adc r8,zero_reg ;源
adc r9, zero_reg ; 源
调用 eeprom_get_char ;
tst r28 ; 校验和
brne .L21 ; ,
移动 r18,r28 ; iftmp.1,校验和
clr r19 ;iftmp.1
sbrc r18,7;iftmp.1
com r19 ; iftmp.1
clr r18 ; iftmp.1
lsl r19 ; iftmp.1 角色
r18 ; iftmp.1
clr r19 ; iftmp.1
rjmp .L18 ;
.L21:
ldi r18,lo8(1) ; iftmp.1,
ldi r19,hi​​8(1) ; iftmp.1,
.L18:
移动 r28,r24 ; 校验和,数据
添加 r28,r18 ; 校验和,iftmp.1
movw r30,r10 ;, 目的地
st Z+,r24 ; MEM[base: destination_1, offset: 0B], data
movw r10,r30 ; 目的地,
subi r16,lo8(-(-1)) ; 大小,
sbci r17,hi8(-(-1)) ; 尺寸,
movw r24,r8 ; 来源,来源
.L17:
cp r16,zero_reg ;大小
cpc r17, zero_reg ; 尺寸
brne .L19 ; ,
movw r24,r14 ; , 尺寸
加 r24,r12 ; , 源
adc r25,r13 ; , 源
调用 eeprom_get_char ;
ldi r18,lo8(1) ; tmp67,
ldi r19,hi​​8(1) ; tmp67,
cp r28,r24 ; 校验和,
breq .L20;,
ldi r18,lo8(0) ; tmp67,
ldi r19,hi​​8(0) ; tmp67,
.L20:
movw r24,r18 ; ,
/
尾声开始 */
pop r28 ;
弹出 r17 ;
弹出 r16 ;
弹出 r15 ;
弹出 r14 ;
弹出 r13 ;
弹出 r12 ;
弹出 r11 ;
弹出 r10 ;
弹出 r9 ;
弹出 r8 ;
ret
.size memcpy_from_eeprom_with_checksum, .-memcpy_from_eeprom_with_checksum


; GNU C (GCC) 版本 4.7.2 (avr)
; 由 GNU C 版本 4.7.0、GMP 版本 5.0.2、MPFR 版本 3.1.0、MPC 版本 0.8.2 编译
;GGC 启发式: –param ggc-min-expand=100 –param ggc-min-heapsize=131072
;通过的选项: -fpreprocessed eeprom.i -mmcu=atmega328p
;-auxbase-strip eeprom.o -Os -Wall -ffunction-sections -fverbose-asm
; 启用选项: -fauto-inc-dec -fbranch-count-reg -fcaller-saves
;-fcombine-stack-adjustments -fcommon -fcompare-elim -fcprop-registers
;-fcrossjumping -fcse-follow-jumps -fdebug-types-section -fdefer-pop
; -fdevirtualize -fdwarf2-cfi-asm -fearly-inlining
; -feliminate-unused-debug-types -fexpensive-optimizations
; -fforward-propagate -ffunction-cse -ffunction-sections -fgcse -fgcse-lm
; -fgnu-runtime -fguess-branch-probability -fident -fif-conversion
; -fif-conversion2 -findirect-inlining -finline -finline-atomics
; -finline-functions -finline-functions-call-once
; -finline-small-functions -fipa-cp -fipa-profile -fipa-pure-const
; -fipa-reference -fipa-sra -fira-share-save-slots
; -fira-share-spill-slots -fivopts -fkeep-static-consts
; -fleading-下划线 -fmath-errno -fmerge-constants
; -fmerge-debug-strings -fmove-loop-invariants -fomit-frame-pointer
;-foptimize-register-move -foptimize-sibling-calls -fpartial-inlining
; -fpeephole -fpeephole2 -fprefetch-loop-arrays -freg-struct-return
; -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop
; -fsched-critical-path-heuristic -fsched-dep-count-heuristic
; -fsched-group-heuristic -fsched-interblock -fsched-last-insn-heuristic
; -fsched-rank-heuristic -fsched-spec -fsched-spec-insn-heuristic
; -fsched-stalled-insns-dep -fshow-column -fshrink-wrap -fsigned-zeros
;-fsplit-ivs-in-unroller -fsplit-wide-types -fstrict-aliasing
; -fstrict-overflow -fstrict-volatile-bitfields -fthread-jumps
; -ftoplevel-reorder -ftrapping-math -ftree-bit-ccp
; -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop
;-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse
; -ftree-forwprop -ftree-fre -ftree-loop-if-convert -ftree-loop-im
; -ftree-loop-ivcanon -ftree-loop-optimize -ftree-parallelize-loops=
; -ftree-phiprop -ftree-pre -ftree-pta -ftree-reassoc -ftree-scev-cprop
; -ftree-sink -ftree-slp-vectorize -ftree-sra -ftree-switch-conversion
; -ftree-tail-merge -ftree-ter -ftree-vect-loop-version -ftree-vrp
;-funit-at-a-time -fverbose-asm -fzero-initialized-in-bss

.section .text.memcpy_from_eeprom_with_checksum,”ax”,@progbits
.global memcpy_from_eeprom_with_checksum
.type memcpy_from_eeprom_with_checksum,@function
memcpy_from_eeprom_with_checksum:
push r9 ;
推 r10 ;
推 r11 ;
推 r12 ;
推 r13 ;
推 r14 ;
推 r15 ;
推 r16 ;
推 r17 ;
推 r28 ;
推 r29 ; /
* prologue: function //
帧大小 = 0 //
堆栈大小 = 11 .L__stack_usage
= 11
movw r16,r22 ; 源,源
movw r14,r20 ;尺寸,尺寸
movw r12,r24 ; D.1497,目的地
添加 r12,r20 ;D.1497,尺寸
adc r13,r21 ;D.1497,尺寸
movw r28,r24 ;目的地, 目的地
mov r9,零注册 ;校验和
movw r10,r22 ; tmp78, 源
子 r10,r24 ; tmp78, 目的地
sbc r11,r25 ; tmp78, 目的地
rjmp .L20 ;
.L22:
调用 eeprom_get_char ;
cpse r9, zero_reg ; 校验和,
rjmp .L24;
移动 r20,r9 ; 校验和,校验和
clr r21 ;校验和
sbrc r20,7 ; 校验和
com r21 ; 校验和
mov r18,r21 ; ,
罗尔 r18 ;
clr r18 ;
滚 r18 ;
rjmp .L21 ;
.L24:
ldi r18,lo8(1) ; iftmp.1,
ldi r19,0 ; iftmp.1
.L21:
移动 r9,r24 ; 校验和,数据
添加 r9,r18 ; 校验和,iftmp.1
st Y+,r24 ;MEM[base:destination_1, offset: 0B], data
.L20:
movw r24,r28 ; D.1501,目的地
添加 r24,r10 ;D.1501, tmp78
adc r25,r11 ; D.1501, tmp78
cp r28,r12 ; 目的地,D.1497
cpc r29,r13;目的地,D.1497
brne .L22;,
movw r24,r14 ; , 尺寸
加 r24,r16 ; , 源
adc r25,r17 ; , 源
调用 eeprom_get_char ;
ldi r18,lo8(1) ; tmp73,
ldi r19,0 ;
cp r9,r24 ; 校验和,
breq .L23;,
ldi r18,0 ; tmp73
ldi r19,0 ;
.L23:
movw r24,r18 ; ,
/
尾声开始 */
弹出 r29 ;
弹出 r28 ;
弹出 r17 ;
弹出 r16 ;
弹出 r15 ;
弹出 r14 ;
弹出 r13 ;
弹出 r12 ;
弹出 r11 ;
弹出 r10 ;
弹出 r9 ;
ret
.size memcpy_from_eeprom_with_checksum, .-memcpy_from_eeprom_with_checksum


喜欢 (0)

您必须 登录 才能发表评论!