【发布时间】:2023-04-06 00:40:01
【问题描述】:
我目前正在使用 FRDM-KL25Z 开发板和使用 Keil MDK-lite (5.14a) 进行编程的项目。我们应该做的是使用三个相应的 LED 和一个按钮创建一个简单的交通灯,以加快灯的变化(不像真正的交通灯那样立即进行,而是在每次延迟后检查)。我遇到的问题是我的程序在模拟器中运行良好,但是在开发板上运行时它几乎立即自行重置。我已将其缩小到我正在使用的循环延迟 30 秒。 任何可以了解为什么会发生这种情况或如何在调试器中找到更多信息的提示都会很棒。
这是我正在使用的循环的一个剪辑。
reset LDR R1, =0x00000002 ;Change light to red
BL changelight ;
LDR R3, =0x00000011 ;Put value into counter (1 loop just to show code works)
d30_1 BL buttonpress ;Check for button press
SUBS R3, #17 ;Subtract # of ticks in loop (17) from counter
CMP R3, #0
BGT d30_1
CMP R6, #1 ;Check for button press
BEQ reset ;Reset to red if pressed
LDR R1, =0x00000010 ;Change light to green
BL changelight ;
LDR R3, =0x05B8d800 ;Put value into counter (5 seconds, the board resets when counter is this high)
d30_2 BL buttonpress ;Check for button press
SUBS R3, #17 ;Subtract # of ticks in loop (17) from counter
CMP R3, #0
BGT d30_2
...
这是分支按钮
buttonpress
LDR R0, =0x400FF090 ;Put address of PORTC_PDIR into R0
LDR R1, [R0] ;Put value of PORTC_PDIR into R1
LDR R0, =0x00000080 ;Put value of monitored input pin
TST R1, R0 ;Check for button press
BNE nopress ;Break from process if button not pressed
MOVS R6, #1 ;Put 1 in R6 if button has been pressed
nopress BX LR
【问题讨论】:
-
我尝试将我的计数器除以 17 并在每次迭代中减去 1,但硬件似乎仍会重置。我的计数器从 D76AB5 开始,重置后在 C64908。
-
您有没有重置失败的看门狗计时器?
标签: assembly crash arm keil cortex-m