diff --git a/system/ramspeed/ramspeed_main.c b/system/ramspeed/ramspeed_main.c index 445b2a220..57a4228d5 100644 --- a/system/ramspeed/ramspeed_main.c +++ b/system/ramspeed/ramspeed_main.c @@ -92,10 +92,11 @@ struct ramspeed_s static void show_usage(FAR const char *progname, int exitcode) { - printf("\nUsage: %s -r -w -s " + printf("\nUsage: %s -a -r -w -s " " -v [0x00] -n [100] -i\n", progname); printf("\nWhere:\n"); + printf(" -a allocate RW buffers on heap. Overwrites -r and -w option.\n"); printf(" -r read address.\n"); printf(" -w write address.\n"); printf(" -s number of memory locations (in bytes).\n"); @@ -116,20 +117,24 @@ static void parse_commandline(int argc, FAR char **argv, FAR struct ramspeed_s *info) { int ch; + bool allocate_rw_address = false; memset(info, 0, sizeof(struct ramspeed_s)); info->repeat_num = 100; - if (argc < 7) + if (argc < 4) { printf(RAMSPEED_PREFIX "Missing required arguments\n"); show_usage(argv[0], EXIT_FAILURE); } - while ((ch = getopt(argc, argv, "r:w:s:v:n:i")) != ERROR) + while ((ch = getopt(argc, argv, "r:w:s:v:n:i:a")) != ERROR) { switch (ch) { + case 'a': + allocate_rw_address = true; + break; case 'r': OPTARG_TO_VALUE(info->src, const void *, 16); break; @@ -167,6 +172,12 @@ static void parse_commandline(int argc, FAR char **argv, } } + if (allocate_rw_address) + { + info->dest = malloc(info->size); + info->src = malloc(info->size); + } + if (info->dest == NULL || info->src == NULL || info->size == 0) { printf(RAMSPEED_PREFIX "Missing required arguments\n");