rtos: use ARRAY_SIZE() and simplify rtos_type.create()
authorAntonio Borneo <borneo.antonio@gmail.com>
Sun, 16 May 2021 13:43:28 +0000 (15:43 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 29 May 2021 20:33:44 +0000 (21:33 +0100)
Use the existing macro ARRAY_SIZE().
Rewrite the functions rtos_type.create() to simplify the logic.

Change-Id: I8833354767045d1642801d26944c9087a77add00
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/6261
Tested-by: jenkins
src/rtos/FreeRTOS.c
src/rtos/ThreadX.c
src/rtos/chibios.c
src/rtos/eCos.c

index f04b0a268a554f44f4dbc10d00a9ff96fbf78ebf..30c6e34cb480e915b47d93a7bf7c3b6b2f893014 100644 (file)
@@ -102,8 +102,6 @@ static const struct FreeRTOS_params FreeRTOS_params_list[] = {
        },
 };
 
-#define FREERTOS_NUM_PARAMS ((int)(sizeof(FreeRTOS_params_list)/sizeof(struct FreeRTOS_params)))
-
 static bool FreeRTOS_detect_rtos(struct target *target);
 static int FreeRTOS_create(struct target *target);
 static int FreeRTOS_update_threads(struct rtos *rtos);
@@ -547,16 +545,12 @@ static bool FreeRTOS_detect_rtos(struct target *target)
 
 static int FreeRTOS_create(struct target *target)
 {
-       int i = 0;
-       while ((i < FREERTOS_NUM_PARAMS) &&
-                       (0 != strcmp(FreeRTOS_params_list[i].target_name, target->type->name))) {
-               i++;
-       }
-       if (i >= FREERTOS_NUM_PARAMS) {
-               LOG_ERROR("Could not find target in FreeRTOS compatibility list");
-               return -1;
-       }
+       for (unsigned int i = 0; i < ARRAY_SIZE(FreeRTOS_params_list); i++)
+               if (strcmp(FreeRTOS_params_list[i].target_name, target->type->name) == 0) {
+                       target->rtos->rtos_specific_params = (void *)&FreeRTOS_params_list[i];
+                       return 0;
+               }
 
-       target->rtos->rtos_specific_params = (void *) &FreeRTOS_params_list[i];
-       return 0;
+       LOG_ERROR("Could not find target in FreeRTOS compatibility list");
+       return -1;
 }
index 0b3fef07eb4f54a52b013291c550e608f645462e..53a74f8076ec9bc63ca7a2d756e303870ab04652 100644 (file)
@@ -65,7 +65,7 @@ static const struct ThreadX_thread_state ThreadX_thread_states[] = {
        { 13, "Waiting - Mutex" },
 };
 
-#define THREADX_NUM_STATES (sizeof(ThreadX_thread_states)/sizeof(struct ThreadX_thread_state))
+#define THREADX_NUM_STATES ARRAY_SIZE(ThreadX_thread_states)
 
 #define ARM926EJS_REGISTERS_SIZE_SOLICITED (11 * 4)
 static const struct stack_register_offset rtos_threadx_arm926ejs_stack_offsets_solicited[] = {
@@ -179,8 +179,6 @@ static const struct ThreadX_params ThreadX_params_list[] = {
        },
 };
 
-#define THREADX_NUM_PARAMS ((int)(sizeof(ThreadX_params_list)/sizeof(struct ThreadX_params)))
-
 enum ThreadX_symbol_values {
        ThreadX_VAL_tx_thread_current_ptr = 0,
        ThreadX_VAL_tx_thread_created_ptr = 1,
@@ -599,18 +597,14 @@ static int ThreadX_get_thread_detail(struct rtos *rtos,
 
 static int ThreadX_create(struct target *target)
 {
-       int i = 0;
-       while ((i < THREADX_NUM_PARAMS) &&
-                       (0 != strcmp(ThreadX_params_list[i].target_name, target->type->name))) {
-               i++;
-       }
-       if (i >= THREADX_NUM_PARAMS) {
-               LOG_ERROR("Could not find target in ThreadX compatibility list");
-               return -1;
-       }
+       for (unsigned int i = 0; i < ARRAY_SIZE(ThreadX_params_list); i++)
+               if (strcmp(ThreadX_params_list[i].target_name, target->type->name) == 0) {
+                       target->rtos->rtos_specific_params = (void *)&ThreadX_params_list[i];
+                       target->rtos->current_thread = 0;
+                       target->rtos->thread_details = NULL;
+                       return 0;
+               }
 
-       target->rtos->rtos_specific_params = (void *) &ThreadX_params_list[i];
-       target->rtos->current_thread = 0;
-       target->rtos->thread_details = NULL;
-       return 0;
+       LOG_ERROR("Could not find target in ThreadX compatibility list");
+       return -1;
 }
index 29abede80183ef9f404aec03d0cf378fb6f1b74d..2a23017cdbbabdf9d73d4d11b7cd4ce1609a9d68 100644 (file)
@@ -74,7 +74,7 @@ static const char * const chibios_thread_states[] = { "READY", "CURRENT",
 "WTEXIT", "WTOREVT", "WTANDEVT", "SNDMSGQ", "SNDMSG", "WTMSG", "FINAL"
 };
 
-#define CHIBIOS_NUM_STATES (sizeof(chibios_thread_states)/sizeof(char *))
+#define CHIBIOS_NUM_STATES ARRAY_SIZE(chibios_thread_states)
 
 /* Maximum ChibiOS thread name. There is no real limit set by ChibiOS but 64
  * chars ought to be enough.
@@ -100,7 +100,6 @@ static struct chibios_params chibios_params_list[] = {
        NULL,                                                                   /* stacking_info */
        }
 };
-#define CHIBIOS_NUM_PARAMS ((int)(sizeof(chibios_params_list)/sizeof(struct chibios_params)))
 
 static bool chibios_detect_rtos(struct target *target);
 static int chibios_create(struct target *target);
@@ -529,17 +528,13 @@ static bool chibios_detect_rtos(struct target *target)
 
 static int chibios_create(struct target *target)
 {
-       int i = 0;
-       while ((i < CHIBIOS_NUM_PARAMS) &&
-                       (0 != strcmp(chibios_params_list[i].target_name, target->type->name))) {
-               i++;
-       }
-       if (i >= CHIBIOS_NUM_PARAMS) {
-               LOG_WARNING("Could not find target \"%s\" in ChibiOS compatibility "
-                               "list", target->type->name);
-               return -1;
-       }
+       for (unsigned int i = 0; i < ARRAY_SIZE(chibios_params_list); i++)
+               if (strcmp(chibios_params_list[i].target_name, target->type->name) == 0) {
+                       target->rtos->rtos_specific_params = (void *)&chibios_params_list[i];
+                       return 0;
+               }
 
-       target->rtos->rtos_specific_params = (void *) &chibios_params_list[i];
-       return 0;
+       LOG_WARNING("Could not find target \"%s\" in ChibiOS compatibility "
+                               "list", target->type->name);
+       return -1;
 }
index 9501a5522900b92078e90a4e5cdaa88e462c2d70..1b1e73e60f87e339dd0772729e7e5481bc6757b6 100644 (file)
@@ -47,7 +47,7 @@ static const struct eCos_thread_state eCos_thread_states[] = {
        { 16, "Exited" }
 };
 
-#define ECOS_NUM_STATES (sizeof(eCos_thread_states)/sizeof(struct eCos_thread_state))
+#define ECOS_NUM_STATES ARRAY_SIZE(eCos_thread_states)
 
 struct eCos_params {
        const char *target_name;
@@ -73,8 +73,6 @@ static const struct eCos_params eCos_params_list[] = {
        }
 };
 
-#define ECOS_NUM_PARAMS ((int)(sizeof(eCos_params_list)/sizeof(struct eCos_params)))
-
 enum eCos_symbol_values {
        eCos_VAL_thread_list = 0,
        eCos_VAL_current_thread_ptr = 1
@@ -375,18 +373,14 @@ static bool eCos_detect_rtos(struct target *target)
 
 static int eCos_create(struct target *target)
 {
-       int i = 0;
-       while ((i < ECOS_NUM_PARAMS) &&
-               (0 != strcmp(eCos_params_list[i].target_name, target->type->name))) {
-               i++;
-       }
-       if (i >= ECOS_NUM_PARAMS) {
-               LOG_ERROR("Could not find target in eCos compatibility list");
-               return -1;
-       }
+       for (unsigned int i = 0; i < ARRAY_SIZE(eCos_params_list); i++)
+               if (strcmp(eCos_params_list[i].target_name, target->type->name) == 0) {
+                       target->rtos->rtos_specific_params = (void *)&eCos_params_list[i];
+                       target->rtos->current_thread = 0;
+                       target->rtos->thread_details = NULL;
+                       return 0;
+               }
 
-       target->rtos->rtos_specific_params = (void *) &eCos_params_list[i];
-       target->rtos->current_thread = 0;
-       target->rtos->thread_details = NULL;
-       return 0;
+       LOG_ERROR("Could not find target in eCos compatibility list");
+       return -1;
 }