This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git

commit 744ecf2b01fa5e1c4ec774b28fb8b8e32f60ba87
Author: crafcat <110923103+crafc...@users.noreply.github.com>
AuthorDate: Sat Oct 1 22:42:23 2022 +0800

    system/ramspeed: Add system interrupt switch.
---
 system/ramspeed/ramspeed_main.c | 67 ++++++++++++++++++++++++++++++-----------
 1 file changed, 49 insertions(+), 18 deletions(-)

diff --git a/system/ramspeed/ramspeed_main.c b/system/ramspeed/ramspeed_main.c
index f6040dd43..c2485f7e7 100644
--- a/system/ramspeed/ramspeed_main.c
+++ b/system/ramspeed/ramspeed_main.c
@@ -23,6 +23,7 @@
  ****************************************************************************/
 
 #include <nuttx/config.h>
+#include <nuttx/irq.h>
 #include <stdio.h>
 #include <stdint.h>
 #include <stdlib.h>
@@ -74,6 +75,7 @@ struct ramspeed_s
   size_t size;
   uint8_t value;
   uint32_t repeat_num;
+  bool irq_disable;
 };
 
 /****************************************************************************
@@ -91,7 +93,7 @@ struct ramspeed_s
 static void show_usage(FAR const char *progname, int exitcode)
 {
   printf("\nUsage: %s -r <hex-address> -w <hex-address> -s <decimal-size>"
-         " -v <hex-value>[0x00] -n <decimal-repeat number>[100]\n",
+         " -v <hex-value>[0x00] -n <decimal-repeat number>[100] -i\n",
          progname);
   printf("\nWhere:\n");
   printf("  -r <hex-address> read address.\n");
@@ -101,6 +103,8 @@ static void show_usage(FAR const char *progname, int 
exitcode)
          " [default value: 0x00].\n");
   printf("  -n <decimal-repeat num> number of repetitions"
          " [default value: 100].\n");
+  printf("  -i turn off interrupts while testing"
+         " [default value: false].\n");
   exit(exitcode);
 }
 
@@ -122,7 +126,7 @@ static void parse_commandline(int argc, FAR char **argv,
       show_usage(argv[0], EXIT_FAILURE);
     }
 
-  while ((ch = getopt(argc, argv, "r:w:s:v:n:")) != ERROR)
+  while ((ch = getopt(argc, argv, "r:w:s:v:n:i")) != ERROR)
     {
       switch (ch)
         {
@@ -145,6 +149,9 @@ static void parse_commandline(int argc, FAR char **argv,
                 printf(RAMSPEED_PREFIX "<repeat number> must > 0\n");
                 exit(EXIT_FAILURE);
               }
+
+          case 'i':
+            info->irq_disable = true;
             break;
           case '?':
             printf(RAMSPEED_PREFIX "Unknown option: %c\n", (char)optopt);
@@ -346,12 +353,20 @@ static void print_rate(FAR const char *name, size_t bytes,
  ****************************************************************************/
 
 static void memcpy_speed_test(FAR void *dest, FAR const void *src,
-                              size_t size, uint32_t repeat_cnt)
+                              size_t size, uint32_t repeat_cnt,
+                              bool irq_disable)
 {
   uint32_t start_time;
-  uint32_t cost_time;
+  uint32_t cost_time_system;
+  uint32_t cost_time_internal;
   uint32_t cnt;
   const size_t total_size = size * repeat_cnt;
+  irqstate_t flags;
+
+  if (irq_disable)
+    {
+      flags = enter_critical_section();
+    }
 
   start_time = get_timestamp();
 
@@ -360,9 +375,7 @@ static void memcpy_speed_test(FAR void *dest, FAR const 
void *src,
       memcpy(dest, src, size);
     }
 
-  cost_time = get_time_elaps(start_time);
-
-  print_rate("system memcpy():\t", total_size, cost_time);
+  cost_time_system = get_time_elaps(start_time);
 
   start_time = get_timestamp();
 
@@ -371,9 +384,15 @@ static void memcpy_speed_test(FAR void *dest, FAR const 
void *src,
       internal_memcpy(dest, src, size);
     }
 
-  cost_time = get_time_elaps(start_time);
+  cost_time_internal = get_time_elaps(start_time);
+
+  if (irq_disable)
+    {
+      leave_critical_section(flags);
+    }
 
-  print_rate("internal memcpy():\t", total_size, cost_time);
+  print_rate("system memcpy():\t", total_size, cost_time_system);
+  print_rate("internal memcpy():\t", total_size, cost_time_internal);
 }
 
 /****************************************************************************
@@ -381,12 +400,20 @@ static void memcpy_speed_test(FAR void *dest, FAR const 
void *src,
  ****************************************************************************/
 
 static void memset_speed_test(FAR void *dest, uint8_t value,
-                              size_t size, uint32_t repeat_num)
+                              size_t size, uint32_t repeat_num,
+                              bool irq_disable)
 {
   uint32_t start_time;
-  uint32_t cost_time;
+  uint32_t cost_time_system;
+  uint32_t cost_time_internal;
   uint32_t cnt;
   const size_t total_size = size * repeat_num;
+  irqstate_t flags;
+
+  if (irq_disable)
+    {
+      flags = enter_critical_section();
+    }
 
   start_time = get_timestamp();
 
@@ -395,9 +422,7 @@ static void memset_speed_test(FAR void *dest, uint8_t value,
       memset(dest, value, size);
     }
 
-  cost_time = get_time_elaps(start_time);
-
-  print_rate("system memset():\t", total_size, cost_time);
+  cost_time_system = get_time_elaps(start_time);
 
   start_time = get_timestamp();
 
@@ -406,9 +431,15 @@ static void memset_speed_test(FAR void *dest, uint8_t 
value,
       internal_memset(dest, value, size);
     }
 
-  cost_time = get_time_elaps(start_time);
+  cost_time_internal = get_time_elaps(start_time);
+
+  if (irq_disable)
+    {
+      leave_critical_section(flags);
+    }
 
-  print_rate("internal memset():\t", total_size, cost_time);
+  print_rate("system memset():\t", total_size, cost_time_system);
+  print_rate("internal memset():\t", total_size, cost_time_internal);
 }
 
 /****************************************************************************
@@ -426,10 +457,10 @@ int main(int argc, FAR char *argv[])
   parse_commandline(argc, argv, &ramspeed);
 
   memcpy_speed_test(ramspeed.dest, ramspeed.src,
-                    ramspeed.size, ramspeed.repeat_num);
+                    ramspeed.size, ramspeed.repeat_num, ramspeed.irq_disable);
 
   memset_speed_test(ramspeed.dest, ramspeed.value,
-                    ramspeed.size, ramspeed.repeat_num);
+                    ramspeed.size, ramspeed.repeat_num, ramspeed.irq_disable);
 
   return EXIT_SUCCESS;
 }

Reply via email to