aboutsummaryrefslogtreecommitdiff
path: root/src/flash
diff options
context:
space:
mode:
authorPaul Fertser <fercerpav@gmail.com>2015-01-23 11:38:31 +0300
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>2015-02-11 22:19:37 +0000
commit30f802493d1237eeef21282d4224ed89d8a4d480 (patch)
treed7a98671bbd2581393a3766b67cc32966212f489 /src/flash
parenta35712a85c420e24a9c7e9a5eea4fc6d3aff6342 (diff)
flash/startup: extend "program" command to accept "exit"
This optional argument tells OpenOCD to exit after finishing (either succesfully, or with an error) the programming sequence. Without it OpenOCD stays running. Change-Id: I6ecaf33ff985eea9a9cd02ff644a74403ae3e1e5 Signed-off-by: Paul Fertser <fercerpav@gmail.com> Reviewed-on: http://openocd.zylin.com/2492 Tested-by: jenkins Reviewed-by: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/flash')
-rw-r--r--src/flash/startup.tcl36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl
index b8d280b8..7a96a3e3 100644
--- a/src/flash/startup.tcl
+++ b/src/flash/startup.tcl
@@ -3,16 +3,28 @@
#
# program utility proc
# usage: program filename
-# optional args: verify, reset and address
+# optional args: verify, reset, exit and address
#
+proc program_error {description exit} {
+ if {$exit == 1} {
+ echo $description
+ shutdown
+ }
+
+ error $description
+}
+
proc program {filename args} {
+ set exit 0
foreach arg $args {
if {[string equal $arg "verify"]} {
set verify 1
} elseif {[string equal $arg "reset"]} {
set reset 1
+ } elseif {[string equal $arg "exit"]} {
+ set exit 1
} else {
set address $arg
}
@@ -20,16 +32,12 @@ proc program {filename args} {
# make sure init is called
if {[catch {init}] != 0} {
- echo "** OpenOCD init Failed **"
- shutdown
- return
+ program_error "** OpenOCD init failed **" 1
}
# reset target and call any init scripts
if {[catch {reset init}] != 0} {
- echo "** Unable to reset target **"
- shutdown
- return
+ program_error "** Unable to reset target **" $exit
}
# start programming phase
@@ -48,7 +56,7 @@ proc program {filename args} {
if {[catch {eval verify_image $flash_args}] == 0} {
echo "** Verified OK **"
} else {
- echo "** Verify Failed **"
+ program_error "** Verify Failed **" $exit
}
}
@@ -60,15 +68,17 @@ proc program {filename args} {
reset run
}
} else {
- echo "** Programming Failed **"
+ program_error "** Programming Failed **" $exit
}
- # shutdown OpenOCD
- shutdown
+ if {$exit == 1} {
+ shutdown
+ }
+ return
}
-add_help_text program "write an image to flash, address is only required for binary images. verify, reset are optional"
-add_usage_text program "<filename> \[address\] \[verify\] \[reset\]"
+add_help_text program "write an image to flash, address is only required for binary images. verify, reset, exit are optional"
+add_usage_text program "<filename> \[address\] \[verify\] \[reset\] \[exit\]"
# stm32f0x uses the same flash driver as the stm32f1x
# this alias enables the use of either name.