Skip to content

Commit

Permalink
px4nucleoF767ZI-v1: use board_hardfault_init API
Browse files Browse the repository at this point in the history
  • Loading branch information
David Sidrane authored and LorenzMeier committed Oct 25, 2018
1 parent 0658d4e commit 3e9e551
Showing 1 changed file with 6 additions and 136 deletions.
142 changes: 6 additions & 136 deletions src/drivers/boards/px4nucleoF767ZI-v1/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@
#include <perf/perf_counter.h>
#include <systemlib/err.h>

#include <systemlib/hardfault_log.h>

#include <parameters/param.h>

#include "up_internal.h"
Expand Down Expand Up @@ -285,149 +283,21 @@ __EXPORT int board_app_initialize(uintptr_t arg)
(hrt_callout)stm32_serial_dma_poll,
NULL);

#if defined(CONFIG_STM32_BBSRAM)

/* NB. the use of the console requires the hrt running
* to poll the DMA
*/

/* Using Battery Backed Up SRAM */

int filesizes[CONFIG_STM32_BBSRAM_FILES + 1] = BSRAM_FILE_SIZES;

stm32_bbsraminitialize(BBSRAM_PATH, filesizes);

#if defined(CONFIG_STM32_SAVE_CRASHDUMP)

/* Panic Logging in Battery Backed Up Files */

/*
* In an ideal world, if a fault happens in flight the
* system save it to BBSRAM will then reboot. Upon
* rebooting, the system will log the fault to disk, recover
* the flight state and continue to fly. But if there is
* a fault on the bench or in the air that prohibit the recovery
* or committing the log to disk, the things are too broken to
* fly. So the question is:
*
* Did we have a hard fault and not make it far enough
* through the boot sequence to commit the fault data to
* the SD card?
*/

/* Do we have an uncommitted hard fault in BBSRAM?
* - this will be reset after a successful commit to SD
*/
int hadCrash = hardfault_check_status("boot");

if (hadCrash == OK) {

message("[boot] There is a hard fault logged. Hold down the SPACE BAR," \
" while booting to halt the system!\n");

/* Yes. So add one to the boot count - this will be reset after a successful
* commit to SD
*/

int reboots = hardfault_increment_reboot("boot", false);

/* Also end the misery for a user that holds for a key down on the console */

int bytesWaiting;
ioctl(fileno(stdin), FIONREAD, (unsigned long)((uintptr_t) &bytesWaiting));

if (reboots > 2 || bytesWaiting != 0) {

/* Since we can not commit the fault dump to disk. Display it
* to the console.
*/

hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);

message("[boot] There were %d reboots with Hard fault that were not committed to disk - System halted %s\n",
reboots,
(bytesWaiting == 0 ? "" : " Due to Key Press\n"));


/* For those of you with a debugger set a break point on up_assert and
* then set dbgContinue = 1 and go.
*/

/* Clear any key press that got us here */

static volatile bool dbgContinue = false;
int c = '>';

while (!dbgContinue) {

switch (c) {

case EOF:


case '\n':
case '\r':
case ' ':
continue;

default:

putchar(c);
putchar('\n');

switch (c) {

case 'D':
case 'd':
hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false);
break;

case 'C':
case 'c':
hardfault_rearm("boot");
hardfault_increment_reboot("boot", true);
break;

case 'B':
case 'b':
dbgContinue = true;
break;

default:
break;
} // Inner Switch

message("\nEnter B - Continue booting\n" \
"Enter C - Clear the fault log\n" \
"Enter D - Dump fault log\n\n?>");
fflush(stdout);

if (!dbgContinue) {
c = getchar();
}

break;

} // outer switch
} // for

} // inner if
} // outer if

#endif // CONFIG_STM32_SAVE_CRASHDUMP
#endif // CONFIG_STM32_BBSRAM

/* initial LED state */
drv_led_start();
led_off(LED_RED);
led_off(LED_GREEN);
led_off(LED_BLUE);

if (board_hardfault_init(2, true) != 0) {
led_on(LED_RED);
}

#ifdef CONFIG_SPI
int ret = stm32_spi_bus_initialize();

if (ret != OK) {
board_autoled_on(LED_RED);
led_on(LED_RED);
return ret;
}

Expand All @@ -437,7 +307,7 @@ __EXPORT int board_app_initialize(uintptr_t arg)
ret = stm32_sdio_initialize();

if (ret != OK) {
board_autoled_on(LED_RED);
led_on(LED_RED);
return ret;
}

Expand Down

0 comments on commit 3e9e551

Please sign in to comment.