summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/flash/flash.c117
-rw-r--r--src/flash/mflash.c74
-rw-r--r--src/flash/nand.c32
-rw-r--r--src/helper/time_support.c34
-rw-r--r--src/helper/time_support.h28
-rw-r--r--src/target/target.c83
6 files changed, 153 insertions, 215 deletions
diff --git a/src/flash/flash.c b/src/flash/flash.c
index 329ade63..22c6069e 100644
--- a/src/flash/flash.c
+++ b/src/flash/flash.c
@@ -503,8 +503,6 @@ static int handle_flash_erase_address_command(struct command_context_s *cmd_ctx,
int retval;
int address;
int length;
- duration_t duration;
- char *duration_text;
target_t *target = get_current_target(cmd_ctx);
@@ -528,16 +526,16 @@ static int handle_flash_erase_address_command(struct command_context_s *cmd_ctx,
/* We can't know if we did a resume + halt, in which case we no longer know the erased state */
flash_set_dirty();
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
- if ((retval = flash_erase_address_range(target, address, length)) == ERROR_OK)
+ retval = flash_erase_address_range(target, address, length);
+
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
- {
- return retval;
- }
- command_print(cmd_ctx, "erased address 0x%8.8x length %i in %s", address, length, duration_text);
- free(duration_text);
+ command_print(cmd_ctx, "erased address 0x%8.8x (length %i)"
+ " in %fs (%0.3f kb/s)", address, length,
+ duration_elapsed(&bench), duration_kbps(&bench, length));
}
return retval;
@@ -613,19 +611,16 @@ static int handle_flash_erase_command(struct command_context_s *cmd_ctx,
first, last, p->num_sectors)) != ERROR_OK)
return retval;
- duration_t duration;
- char *duration_text;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
- if ((retval = flash_driver_erase(p, first, last)) == ERROR_OK) {
- if ((retval = duration_stop_measure(&duration,
- &duration_text)) != ERROR_OK)
- return retval;
- command_print(cmd_ctx, "erased sectors %i through %i "
- "on flash bank %i in %s",
- (int) first, (int) last, (int) bank_nr,
- duration_text);
- free(duration_text);
+ retval = flash_driver_erase(p, first, last);
+
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
+ {
+ command_print(cmd_ctx, "erased sectors %" PRIu32 " "
+ "through %" PRIu32" on flash bank %" PRIu32 " "
+ "in %fs", first, last, bank_nr, duration_elapsed(&bench));
}
return ERROR_OK;
@@ -683,10 +678,7 @@ static int handle_flash_write_image_command(struct command_context_s *cmd_ctx, c
image_t image;
uint32_t written;
- duration_t duration;
- char *duration_text;
-
- int retval, retvaltemp;
+ int retval;
if (argc < 1)
{
@@ -728,7 +720,8 @@ static int handle_flash_write_image_command(struct command_context_s *cmd_ctx, c
return ERROR_FAIL;
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
if (argc >= 2)
{
@@ -756,23 +749,13 @@ static int handle_flash_write_image_command(struct command_context_s *cmd_ctx, c
return retval;
}
- if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- image_close(&image);
- return retvaltemp;
+ command_print(cmd_ctx, "wrote %" PRIu32 " byte from file %s "
+ "in %fs (%0.3f kb/s)", written, args[0],
+ duration_elapsed(&bench), duration_kbps(&bench, written));
}
- float speed;
-
- speed = written / 1024.0;
- speed /= ((float)duration.duration.tv_sec
- + ((float)duration.duration.tv_usec / 1000000.0));
- command_print(cmd_ctx,
- "wrote %" PRIu32 " byte from file %s in %s (%f kb/s)",
- written, args[0], duration_text, speed);
-
- free(duration_text);
-
image_close(&image);
return retval;
@@ -780,7 +763,7 @@ static int handle_flash_write_image_command(struct command_context_s *cmd_ctx, c
static int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- int err = ERROR_OK, retval;
+ int err = ERROR_OK;
uint32_t address;
uint32_t pattern;
uint32_t count;
@@ -789,8 +772,6 @@ static int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cm
uint32_t wrote = 0;
uint32_t cur_size = 0;
uint32_t chunk_count;
- char *duration_text;
- duration_t duration;
target_t *target = get_current_target(cmd_ctx);
uint32_t i;
uint32_t wordsize;
@@ -843,7 +824,8 @@ static int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cm
exit(-1);
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
for (wrote = 0; wrote < (count*wordsize); wrote += cur_size)
{
@@ -872,24 +854,14 @@ static int handle_flash_fill_command(struct command_context_s *cmd_ctx, char *cm
return ERROR_FAIL;
}
}
-
}
- if ((retval = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
+ if (duration_measure(&bench) == ERROR_OK)
{
- return retval;
+ command_print(cmd_ctx, "wrote %" PRIu32 " bytes to 0x%8.8" PRIx32
+ " in %fs (%0.3f kb/s)", wrote, address,
+ duration_elapsed(&bench), duration_kbps(&bench, wrote));
}
-
- float speed;
-
- speed = wrote / 1024.0;
- speed /= ((float)duration.duration.tv_sec
- + ((float)duration.duration.tv_usec / 1000000.0));
- command_print(cmd_ctx,
- "wrote %" PRIu32 " bytes to 0x%8.8" PRIx32 " in %s (%f kb/s)",
- wrote, address, duration_text, speed);
-
- free(duration_text);
return ERROR_OK;
}
@@ -898,17 +870,13 @@ static int handle_flash_write_bank_command(struct command_context_s *cmd_ctx, ch
uint32_t offset;
uint8_t *buffer;
uint32_t buf_cnt;
-
fileio_t fileio;
- duration_t duration;
- char *duration_text;
-
-
if (argc != 3)
return ERROR_COMMAND_SYNTAX_ERROR;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
flash_bank_t *p;
int retval = flash_command_get_bank_by_num(cmd_ctx, args[0], &p);
@@ -935,24 +903,13 @@ static int handle_flash_write_bank_command(struct command_context_s *cmd_ctx, ch
free(buffer);
buffer = NULL;
- int retvaltemp;
- if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
- {
- fileio_close(&fileio);
- return retvaltemp;
- }
- if (retval == ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- float elapsed = (float)duration.duration.tv_sec;
- elapsed += (float)duration.duration.tv_usec / 1000000.0;
- float speed = (float)fileio.size / elapsed;
- command_print(cmd_ctx,
- "wrote %lld byte from file %s to flash bank %u "
- "at offset 0x%8.8" PRIx32 " in %s (%f kb/s)",
+ command_print(cmd_ctx, "wrote %lld byte from file %s to flash bank %u"
+ " at offset 0x%8.8" PRIx32 " in %fs (%0.3f kb/s)",
fileio.size, args[1], p->bank_number, offset,
- duration_text, speed / 1024);
+ duration_elapsed(&bench), duration_kbps(&bench, fileio.size));
}
- free(duration_text);
fileio_close(&fileio);
diff --git a/src/flash/mflash.c b/src/flash/mflash.c
index bf759c97..5a392a4d 100644
--- a/src/flash/mflash.c
+++ b/src/flash/mflash.c
@@ -215,11 +215,11 @@ static int mg_dsk_wait(mg_io_type_wait wait, uint32_t time)
uint8_t status, error;
target_t *target = mflash_bank->target;
uint32_t mg_task_reg = mflash_bank->base + MG_REG_OFFSET;
- duration_t duration;
int ret;
long long t = 0;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
while (time) {
@@ -275,10 +275,11 @@ static int mg_dsk_wait(mg_io_type_wait wait, uint32_t time)
}
}
- duration_stop_measure(&duration, NULL);
-
- t = duration.duration.tv_usec/1000;
- t += duration.duration.tv_sec*1000;
+ ret = duration_measure(&bench);
+ if (ERROR_OK == ret)
+ t = duration_elapsed(&bench) * 1000.0;
+ else
+ LOG_ERROR("mflash: duration measurement failed: %d", ret);
if (t > time)
break;
@@ -427,14 +428,14 @@ static int mg_mflash_do_read_sects(void *buff, uint32_t sect_num, uint32_t sect_
int ret;
target_t *target = mflash_bank->target;
uint8_t *buff_ptr = buff;
- duration_t duration;
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, mg_io_cmd_read)) != ERROR_OK)
return ret;
address = mflash_bank->base + MG_BUFFER_OFFSET;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
for (i = 0; i < sect_cnt; i++) {
ret = mg_dsk_wait(mg_io_wait_drq, MG_OEM_DISK_WAIT_TIME_NORMAL);
@@ -453,11 +454,10 @@ static int mg_mflash_do_read_sects(void *buff, uint32_t sect_num, uint32_t sect_
LOG_DEBUG("mflash: %" PRIu32 " (0x%8.8" PRIx32 ") sector read", sect_num + i, (sect_num + i) * MG_MFLASH_SECTOR_SIZE);
- duration_stop_measure(&duration, NULL);
-
- if ((duration.duration.tv_sec * 1000 + duration.duration.tv_usec / 1000) > 3000) {
+ ret = duration_measure(&bench);
+ if ((ERROR_OK == ret) && (duration_elapsed(&bench) > 3)) {
LOG_INFO("mflash: read %" PRIu32 "'th sectors", sect_num + i);
- duration_start_measure(&duration);
+ duration_start(&bench);
}
}
@@ -500,14 +500,14 @@ static int mg_mflash_do_write_sects(void *buff, uint32_t sect_num, uint32_t sect
int ret;
target_t *target = mflash_bank->target;
uint8_t *buff_ptr = buff;
- duration_t duration;
if ((ret = mg_dsk_io_cmd(sect_num, sect_cnt, cmd)) != ERROR_OK)
return ret;
address = mflash_bank->base + MG_BUFFER_OFFSET;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
for (i = 0; i < sect_cnt; i++) {
ret = mg_dsk_wait(mg_io_wait_drq, MG_OEM_DISK_WAIT_TIME_NORMAL);
@@ -526,11 +526,10 @@ static int mg_mflash_do_write_sects(void *buff, uint32_t sect_num, uint32_t sect
LOG_DEBUG("mflash: %" PRIu32 " (0x%8.8" PRIx32 ") sector write", sect_num + i, (sect_num + i) * MG_MFLASH_SECTOR_SIZE);
- duration_stop_measure(&duration, NULL);
-
- if ((duration.duration.tv_sec * 1000 + duration.duration.tv_usec / 1000) > 3000) {
+ ret = duration_measure(&bench);
+ if ((ERROR_OK == ret) && (duration_elapsed(&bench) > 3)) {
LOG_INFO("mflash: wrote %" PRIu32 "'th sectors", sect_num + i);
- duration_start_measure(&duration);
+ duration_start(&bench);
}
}
@@ -708,8 +707,6 @@ static int mg_write_cmd(struct command_context_s *cmd_ctx, char *cmd, char **arg
uint32_t address, buf_cnt, cnt, res, i;
uint8_t *buffer;
fileio_t fileio;
- duration_t duration;
- char *duration_text;
int ret;
if (argc != 3) {
@@ -731,7 +728,8 @@ static int mg_write_cmd(struct command_context_s *cmd_ctx, char *cmd, char **arg
cnt = fileio.size / MG_FILEIO_CHUNK;
res = fileio.size % MG_FILEIO_CHUNK;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
for (i = 0; i < cnt; i++) {
if ((ret = fileio_read(&fileio, MG_FILEIO_CHUNK, buffer, &buf_cnt)) !=
@@ -749,21 +747,19 @@ static int mg_write_cmd(struct command_context_s *cmd_ctx, char *cmd, char **arg
goto mg_write_cmd_err;
}
- duration_stop_measure(&duration, &duration_text);
-
- command_print(cmd_ctx, "wrote %lli byte from file %s in %s (%f kB/s)",
- fileio.size, args[1], duration_text,
- (float)fileio.size / 1024.0 / ((float)duration.duration.tv_sec + ((float)duration.duration.tv_usec / 1000000.0)));
+ if (duration_measure(&bench) == ERROR_OK)
+ {
+ command_print(cmd_ctx, "wrote %lli byte from file %s "
+ "in %fs (%0.3f kB/s)", fileio.size, args[1],
+ duration_elapsed(&bench), duration_kbps(&bench, fileio.size));
+ }
- free(duration_text);
free(buffer);
fileio_close(&fileio);
return ERROR_OK;
mg_write_cmd_err:
- duration_stop_measure(&duration, &duration_text);
- free(duration_text);
free(buffer);
fileio_close(&fileio);
@@ -775,8 +771,6 @@ static int mg_dump_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args
uint32_t address, size_written, size, cnt, res, i;
uint8_t *buffer;
fileio_t fileio;
- duration_t duration;
- char *duration_text;
int ret;
if (argc != 4) {
@@ -799,7 +793,8 @@ static int mg_dump_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args
cnt = size / MG_FILEIO_CHUNK;
res = size % MG_FILEIO_CHUNK;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
for (i = 0; i < cnt; i++) {
if ((ret = mg_mflash_read(address, buffer, MG_FILEIO_CHUNK)) != ERROR_OK)
@@ -817,21 +812,20 @@ static int mg_dump_cmd(struct command_context_s *cmd_ctx, char *cmd, char **args
goto mg_dump_cmd_err;
}
- duration_stop_measure(&duration, &duration_text);
-
- command_print(cmd_ctx, "dump image (address 0x%8.8" PRIx32 " size %" PRIu32 ") to file %s in %s (%f kB/s)",
- address, size, args[1], duration_text,
- (float)size / 1024.0 / ((float)duration.duration.tv_sec + ((float)duration.duration.tv_usec / 1000000.0)));
+ if (duration_measure(&bench) == ERROR_OK)
+ {
+ command_print(cmd_ctx, "dump image (address 0x%8.8" PRIx32 " "
+ "size %" PRIu32 ") to file %s in %fs (%0.3f kB/s)",
+ address, size, args[1],
+ duration_elapsed(&bench), duration_kbps(&bench, size));
+ }
- free(duration_text);
free(buffer);
fileio_close(&fileio);
return ERROR_OK;
mg_dump_cmd_err:
- duration_stop_measure(&duration, &duration_text);
- free(duration_text);
free(buffer);
fileio_close(&fileio);
diff --git a/src/flash/nand.c b/src/flash/nand.c
index 81a04f7a..8f67624d 100644
--- a/src/flash/nand.c
+++ b/src/flash/nand.c
@@ -1330,8 +1330,6 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
fileio_t fileio;
- duration_t duration;
- char *duration_text;
if (argc < 3)
{
@@ -1372,7 +1370,8 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
}
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
if (fileio_open(&fileio, args[1], FILEIO_READ, FILEIO_BINARY) != ERROR_OK)
{
@@ -1478,11 +1477,13 @@ static int handle_nand_write_command(struct command_context_s *cmd_ctx, char *cm
free(page);
oob = NULL;
page = NULL;
- duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "wrote file %s to NAND flash %s up to offset 0x%8.8" PRIx32 " in %s",
- args[1], args[0], offset, duration_text);
- free(duration_text);
- duration_text = NULL;
+ if (duration_measure(&bench) == ERROR_OK)
+ {
+ command_print(cmd_ctx, "wrote file %s to NAND flash %s "
+ "up to offset 0x%8.8" PRIx32 " in %fs (%0.3f kb/s)",
+ args[1], args[0], offset, duration_elapsed(&bench),
+ duration_kbps(&bench, fileio.size));
+ }
return ERROR_OK;
}
@@ -1506,8 +1507,6 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
}
fileio_t fileio;
- duration_t duration;
- char *duration_text;
uint8_t *page = NULL;
uint32_t page_size = 0;
@@ -1560,7 +1559,8 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
return ERROR_OK;
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
while (size > 0)
{
@@ -1596,10 +1596,12 @@ static int handle_nand_dump_command(struct command_context_s *cmd_ctx, char *cmd
oob = NULL;
fileio_close(&fileio);
- duration_stop_measure(&duration, &duration_text);
- command_print(cmd_ctx, "dumped %lld byte in %s", fileio.size, duration_text);
- free(duration_text);
- duration_text = NULL;
+ if (duration_measure(&bench) == ERROR_OK)
+ {
+ command_print(cmd_ctx, "dumped %lld byte in %fs (%0.3f kb/s)",
+ fileio.size, duration_elapsed(&bench),
+ duration_kbps(&bench, fileio.size));
+ }
return ERROR_OK;
}
diff --git a/src/helper/time_support.c b/src/helper/time_support.c
index 865f2456..9b86e52f 100644
--- a/src/helper/time_support.c
+++ b/src/helper/time_support.c
@@ -28,7 +28,6 @@
#endif
#include "time_support.h"
-#include "log.h"
/* calculate difference between two struct timeval values */
@@ -83,29 +82,30 @@ int timeval_add_time(struct timeval *result, int sec, int usec)
return 0;
}
-void duration_start_measure(duration_t *duration)
+int duration_start(struct duration *duration)
{
- gettimeofday(&duration->start, NULL);
+ return gettimeofday(&duration->start, NULL);
}
-int duration_stop_measure(duration_t *duration, char **text)
+int duration_measure(struct duration *duration)
{
struct timeval end;
+ int retval = gettimeofday(&end, NULL);
+ if (0 == retval)
+ timeval_subtract(&duration->elapsed, &end, &duration->start);
+ return retval;
+}
- gettimeofday(&end, NULL);
-
- timeval_subtract(&duration->duration, &end, &duration->start);
-
- if (text)
- {
- float t;
- t = duration->duration.tv_sec;
- t += (float)duration->duration.tv_usec/1000000.0;
- *text = malloc(100);
- snprintf(*text, 100, "%fs", t);
- }
+float duration_elapsed(struct duration *duration)
+{
+ float t = duration->elapsed.tv_sec;
+ t += (float)duration->elapsed.tv_usec / 1000000.0;
+ return t;
+}
- return ERROR_OK;
+float duration_kbps(struct duration *duration, size_t count)
+{
+ return count / (1024.0 * duration_elapsed(duration));
}
long long timeval_ms()
diff --git a/src/helper/time_support.h b/src/helper/time_support.h
index a8036766..9e8e61f1 100644
--- a/src/helper/time_support.h
+++ b/src/helper/time_support.h
@@ -37,19 +37,27 @@
# endif
#endif
-extern int timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y);
-extern int timeval_add(struct timeval *result, struct timeval *x, struct timeval *y);
-extern int timeval_add_time(struct timeval *result, int sec, int usec);
-/* gettimeofday() timeval in 64 bit ms */
-extern long long timeval_ms(void);
+int timeval_subtract(struct timeval *result, struct timeval *x, struct timeval *y);
+int timeval_add(struct timeval *result, struct timeval *x, struct timeval *y);
+int timeval_add_time(struct timeval *result, int sec, int usec);
-typedef struct duration_s
+/// @returns gettimeofday() timeval as 64-bit in ms
+long long timeval_ms(void);
+
+struct duration
{
struct timeval start;
- struct timeval duration;
-} duration_t;
+ struct timeval elapsed;
+};
+
+/// Update the duration->start field to start the @a duration measurement.
+int duration_start(struct duration *duration);
+/// Update the duration->elapsed field to finish the @a duration measurment.
+int duration_measure(struct duration *duration);
-extern void duration_start_measure(duration_t *duration);
-extern int duration_stop_measure(duration_t *duration, char **text);
+/// @returns Elapsed time in seconds.
+float duration_elapsed(struct duration *duration);
+/// @returns KB/sec for the elapsed @a duration and @a count bytes.
+float duration_kbps(struct duration *duration, size_t count);
#endif /* TIME_SUPPORT_H */
diff --git a/src/target/target.c b/src/target/target.c
index 5eec09c8..3e4c00d0 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2507,20 +2507,17 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
uint32_t min_address = 0;
uint32_t max_address = 0xffffffff;
int i;
- int retvaltemp;
-
image_t image;
- duration_t duration;
- char *duration_text;
-
int retval = parse_load_image_command_args(cmd_ctx, args, argc,
&image, &min_address, &max_address);
if (ERROR_OK != retval)
return retval;
target_t *target = get_current_target(cmd_ctx);
- duration_start_measure(&duration);
+
+ struct duration bench;
+ duration_start(&bench);
if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
{
@@ -2580,20 +2577,13 @@ static int handle_load_image_command(struct command_context_s *cmd_ctx, char *cm
free(buffer);
}
- if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- image_close(&image);
- return retvaltemp;
+ command_print(cmd_ctx, "downloaded %" PRIu32 " bytes "
+ "in %fs (%0.3f kb/s)", image_size,
+ duration_elapsed(&bench), duration_kbps(&bench, image_size));
}
- if (retval == ERROR_OK)
- {
- command_print(cmd_ctx, "downloaded %u byte in %s",
- (unsigned int)image_size,
- duration_text);
- }
- free(duration_text);
-
image_close(&image);
return retval;
@@ -2607,8 +2597,6 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm
uint8_t buffer[560];
int retvaltemp;
- duration_t duration;
- char *duration_text;
target_t *target = get_current_target(cmd_ctx);
@@ -2628,7 +2616,8 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm
return ERROR_OK;
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
int retval = ERROR_OK;
while (size > 0)
@@ -2654,14 +2643,11 @@ static int handle_dump_image_command(struct command_context_s *cmd_ctx, char *cm
if ((retvaltemp = fileio_close(&fileio)) != ERROR_OK)
return retvaltemp;
- if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
- return retvaltemp;
-
- if (retval == ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- command_print(cmd_ctx, "dumped %lld byte in %s",
- fileio.size, duration_text);
- free(duration_text);
+ command_print(cmd_ctx,
+ "dumped %lld bytes in %fs (%0.3f kb/s)", fileio.size,
+ duration_elapsed(&bench), duration_kbps(&bench, fileio.size));
}
return retval;
@@ -2673,15 +2659,12 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct
uint32_t buf_cnt;
uint32_t image_size;
int i;
- int retval, retvaltemp;
+ int retval;
uint32_t checksum = 0;
uint32_t mem_checksum = 0;
image_t image;
- duration_t duration;
- char *duration_text;
-
target_t *target = get_current_target(cmd_ctx);
if (argc < 1)
@@ -2695,7 +2678,8 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct
return ERROR_FAIL;
}
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
if (argc >= 2)
{
@@ -2802,20 +2786,12 @@ static int handle_verify_image_command_internal(struct command_context_s *cmd_ct
image_size += buf_cnt;
}
done:
-
- if ((retvaltemp = duration_stop_measure(&duration, &duration_text)) != ERROR_OK)
- {
- image_close(&image);
- return retvaltemp;
- }
-
- if (retval == ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- command_print(cmd_ctx, "verified %u bytes in %s",
- (unsigned int)image_size,
- duration_text);
+ command_print(cmd_ctx, "verified %" PRIu32 " bytes "
+ "in %fs (%0.3f kb/s)", image_size,
+ duration_elapsed(&bench), duration_kbps(&bench, image_size));
}
- free(duration_text);
image_close(&image);
@@ -4672,15 +4648,13 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha
image_t image;
- duration_t duration;
- char *duration_text;
-
int retval = parse_load_image_command_args(cmd_ctx, args, argc,
&image, &min_address, &max_address);
if (ERROR_OK != retval)
return retval;
- duration_start_measure(&duration);
+ struct duration bench;
+ duration_start(&bench);
if (image_open(&image, args[0], (argc >= 3) ? args[2] : NULL) != ERROR_OK)
{
@@ -4753,13 +4727,16 @@ static int handle_fast_load_image_command(struct command_context_s *cmd_ctx, cha
free(buffer);
}
- duration_stop_measure(&duration, &duration_text);
- if (retval == ERROR_OK)
+ if ((ERROR_OK == retval) && (duration_measure(&bench) == ERROR_OK))
{
- command_print(cmd_ctx, "Loaded %u bytes in %s", (unsigned int)image_size, duration_text);
- command_print(cmd_ctx, "NB!!! image has not been loaded to target, issue a subsequent 'fast_load' to do so.");
+ command_print(cmd_ctx, "Loaded %" PRIu32 " bytes "
+ "in %fs (%0.3f kb/s)", image_size,
+ duration_elapsed(&bench), duration_kbps(&bench, image_size));
+
+ command_print(cmd_ctx,
+ "WARNING: image has not been loaded to target!"
+ "You can issue a 'fast_load' to finish loading.");
}
- free(duration_text);
image_close(&image);