ramspeed: fix -r -w parameter ignored, report align issue

We may want to test ramspeed by specific address, it was previous ignored,
and for the not aligned address from user, just report a error.

Signed-off-by: buxiasen <buxiasen@xiaomi.com>
This commit is contained in:
buxiasen 2024-08-30 17:12:45 +08:00 committed by Xiang Xiao
parent 63542f83c2
commit 2429b2ef6a

View file

@ -150,15 +150,26 @@ static void parse_commandline(int argc, FAR char **argv,
break;
case 'r':
OPTARG_TO_VALUE(info->src, const void *, 16);
if (((uintptr_t)info->src & ALIGN_MASK) != 0)
{
printf(RAMSPEED_PREFIX "<read-adress> must align\n");
exit(EXIT_FAILURE);
}
break;
case 'w':
OPTARG_TO_VALUE(info->dest, void *, 16);
if (((uintptr_t)info->src & ALIGN_MASK) != 0)
{
printf(RAMSPEED_PREFIX "<write-adress> must align\n");
exit(EXIT_FAILURE);
}
break;
case 's':
OPTARG_TO_VALUE(info->size, size_t, 10);
if (info->size < 32)
{
printf(RAMSPEED_PREFIX "<size> must >= 32");
printf(RAMSPEED_PREFIX "<size> must >= 32\n");
exit(EXIT_FAILURE);
}
@ -187,13 +198,23 @@ static void parse_commandline(int argc, FAR char **argv,
}
}
if ((info->dest == NULL && !info->allocate_rw_address) || info->size == 0)
if (!info->allocate_rw_address && info->dest == NULL)
{
printf(RAMSPEED_PREFIX "Missing required arguments\n");
/* We allow only set write address to test memset only.
* But if need test read by specific address, need write address also.
*/
printf(RAMSPEED_PREFIX "Required Address Failed\n");
goto out;
}
else
else if (info->allocate_rw_address)
{
if (info->size == 0)
{
printf(RAMSPEED_PREFIX "Required Size Failed\n");
goto out;
}
/* We need to automatically apply for memory */
printf(RAMSPEED_PREFIX "Allocate RW buffers on heap\n");