sched/wdog: Remove flags field from wdog_s to save memory

since WDOG_ISACTIVE can check func field instead

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
Change-Id: I21d7f9cfe6195c8ccb6cc5925ff66f3c89822f9d
This commit is contained in:
Xiang Xiao 2021-06-21 18:23:09 +08:00 committed by Alan Carvalho de Assis
parent 179f5999d9
commit d7d3177668
3 changed files with 7 additions and 16 deletions

View File

@ -34,15 +34,7 @@
* Pre-processor Definitions
****************************************************************************/
/* Watchdog Definitions *****************************************************/
/* Flag bits for the flags field of struct wdog_s */
#define WDOGF_ACTIVE (1 << 0) /* Bit 0: 1=Watchdog is actively timing */
#define WDOG_SETACTIVE(w) do { (w)->flags |= WDOGF_ACTIVE; } while (0)
#define WDOG_CLRACTIVE(w) do { (w)->flags &= ~WDOGF_ACTIVE; } while (0)
#define WDOG_ISACTIVE(w) (((w)->flags & WDOGF_ACTIVE) != 0)
#define WDOG_ISACTIVE(w) ((w)->func != NULL)
/****************************************************************************
* Public Type Declarations
@ -78,7 +70,6 @@ struct wdog_s
FAR void *picbase; /* PIC base address */
#endif
int lag; /* Timer associated with the delay */
uint8_t flags; /* See WDOGF_* definitions above */
wdparm_t arg; /* Callback argument */
};

View File

@ -126,8 +126,7 @@ int wd_cancel(FAR struct wdog_s *wdog)
/* Mark the watchdog inactive */
wdog->next = NULL;
WDOG_CLRACTIVE(wdog);
wdog->func = NULL;
/* Return success */

View File

@ -72,6 +72,7 @@
static inline void wd_expiration(void)
{
FAR struct wdog_s *wdog;
wdentry_t func;
/* Check if the watchdog at the head of the list is ready to run */
@ -99,12 +100,13 @@ static inline void wd_expiration(void)
/* Indicate that the watchdog is no longer active. */
WDOG_CLRACTIVE(wdog);
func = wdog->func;
wdog->func = NULL;
/* Execute the watchdog function */
up_setpicbase(wdog->picbase);
wdog->func(wdog->arg);
func(wdog->arg);
}
}
}
@ -160,7 +162,7 @@ int wd_start(FAR struct wdog_s *wdog, int32_t delay,
/* Verify the wdog and setup parameters */
if (wdog == NULL || delay < 0)
if (wdog == NULL || wdentry == NULL || delay < 0)
{
return -EINVAL;
}
@ -297,7 +299,6 @@ int wd_start(FAR struct wdog_s *wdog, int32_t delay,
/* Put the lag into the watchdog structure and mark it as active. */
wdog->lag = delay;
WDOG_SETACTIVE(wdog);
#ifdef CONFIG_SCHED_TICKLESS
/* Resume the interval timer that will generate the next interval event.