From 2885a20acb45f2e9f050e3f72aea036770ae5e87 Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Tue, 16 Sep 2014 22:51:28 +0200 Subject: [PATCH] OP-1477 - add watchdog support --- flight/modules/gpsp/gpsdsysmod.c | 10 +++++++++- .../boards/gpsplatinum/firmware/inc/pios_config.h | 6 +++--- .../targets/boards/gpsplatinum/firmware/pios_board.c | 9 ++++----- flight/targets/boards/gpsplatinum/pios_board.h | 4 ++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/flight/modules/gpsp/gpsdsysmod.c b/flight/modules/gpsp/gpsdsysmod.c index 4f407832f..4652af86c 100644 --- a/flight/modules/gpsp/gpsdsysmod.c +++ b/flight/modules/gpsp/gpsdsysmod.c @@ -89,7 +89,9 @@ int32_t GPSPSystemModStart(void) mallocFailed = false; // Create system task xTaskCreate(gpspSystemTask, (const char *)"G-Sys", STACK_SIZE_BYTES / 4, NULL, TASK_PRIORITY, &systemTaskHandle); - +#ifdef PIOS_INCLUDE_WDG + PIOS_WDG_RegisterFlag(PIOS_WDG_SYSTEM); +#endif return 0; } @@ -110,6 +112,9 @@ MODULE_INITCALL(GPSPSystemModInitialize, 0); */ static void gpspSystemTask(__attribute__((unused)) void *parameters) { +#ifdef PIOS_INCLUDE_WDG + PIOS_WDG_UpdateFlag(PIOS_WDG_SYSTEM); +#endif /* create all modules thread */ MODULE_TASKCREATE_ALL; @@ -130,6 +135,9 @@ static void gpspSystemTask(__attribute__((unused)) void *parameters) setupGPS(); uint8_t counter = 0; while (1) { +#ifdef PIOS_INCLUDE_WDG + PIOS_WDG_UpdateFlag(PIOS_WDG_SYSTEM); +#endif // NotificationUpdateStatus(); // Update the system statistics if (!(++counter & 0x7F)) { diff --git a/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h b/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h index 9e48c8fe5..389e6176c 100644 --- a/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h +++ b/flight/targets/boards/gpsplatinum/firmware/inc/pios_config.h @@ -67,7 +67,7 @@ #define PIOS_INCLUDE_SPI #define PIOS_INCLUDE_GPIO #define PIOS_INCLUDE_EXTI -// #define PIOS_INCLUDE_WDG +#define PIOS_INCLUDE_WDG /* PIOS USB functions */ // #define PIOS_INCLUDE_USB @@ -151,8 +151,8 @@ #define HEAP_LIMIT_CRITICAL 40 #define IRQSTACK_LIMIT_WARNING 100 #define IRQSTACK_LIMIT_CRITICAL 60 -#define CPULOAD_LIMIT_WARNING 85 -#define CPULOAD_LIMIT_CRITICAL 95 +#define CPULOAD_LIMIT_WARNING 70 +#define CPULOAD_LIMIT_CRITICAL 75 /* Task stack sizes */ // #define PIOS_ACTUATOR_STACK_SIZE 1020 diff --git a/flight/targets/boards/gpsplatinum/firmware/pios_board.c b/flight/targets/boards/gpsplatinum/firmware/pios_board.c index cdc5bfb1c..11b99d825 100644 --- a/flight/targets/boards/gpsplatinum/firmware/pios_board.c +++ b/flight/targets/boards/gpsplatinum/firmware/pios_board.c @@ -67,6 +67,10 @@ void PIOS_Board_Init(void) PIOS_LED_Init(led_cfg); #endif /* PIOS_INCLUDE_LED */ + /* Initialize watchdog as early as possible to catch faults during init */ +#ifdef PIOS_INCLUDE_WDG + PIOS_WDG_Init(); +#endif #if defined(PIOS_INCLUDE_SPI) /* Set up the SPI interface to the serial flash */ if (PIOS_SPI_Init(&pios_spi_mag_flash_id, &pios_spi_mag_flash_cfg)) { @@ -89,11 +93,6 @@ void PIOS_Board_Init(void) #endif PIOS_IAP_Init(); -/* Initialize watchdog as early as possible to catch faults during init */ -#ifdef PIOS_INCLUDE_WDG - PIOS_WDG_Init(); -#endif - /* Check for repeated boot failures */ uint16_t boot_count = PIOS_IAP_ReadBootCount(); if (boot_count < 3) { diff --git a/flight/targets/boards/gpsplatinum/pios_board.h b/flight/targets/boards/gpsplatinum/pios_board.h index 5d4999d78..f3ee604ce 100644 --- a/flight/targets/boards/gpsplatinum/pios_board.h +++ b/flight/targets/boards/gpsplatinum/pios_board.h @@ -64,8 +64,8 @@ // ------------------------ // WATCHDOG_SETTINGS // ------------------------ -#define PIOS_WATCHDOG_TIMEOUT 250 -#define PIOS_WDG_REGISTER BKP_DR4 +#define PIOS_WATCHDOG_TIMEOUT 400 +#define PIOS_WDG_REGISTER RTC_BKP_DR4 #define PIOS_WDG_SYSTEM 0x0001 #define PIOS_WDG_GPS 0x0002 #define PIOS_WDG_MAG 0x0004