MRE hangs up on bench fix #899

This commit is contained in:
rusefi 2019-08-10 00:53:16 -04:00
parent 961d6d8c5b
commit c29a6bb323
2 changed files with 20 additions and 5 deletions

View File

@ -688,6 +688,7 @@
*/ */
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \ #define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
/* System halt code here.*/ \ /* System halt code here.*/ \
chDbgPanic3(reason, __FILE__, __LINE__); \
} }
/** /**

View File

@ -240,6 +240,20 @@ static int tle8888_update_direct_output(struct tle8888_priv *chip, int pin, int
return -1; return -1;
} }
// ChibiOS does not offer this function so that's a copy-paste of 'chSemSignal' without locking
void chSemSignalS(semaphore_t *sp) {
chDbgCheck(sp != NULL);
chDbgAssert(((sp->cnt >= (cnt_t)0) && queue_isempty(&sp->queue)) ||
((sp->cnt < (cnt_t)0) && queue_notempty(&sp->queue)),
"inconsistent semaphore");
if (++sp->cnt <= (cnt_t)0) {
chSchWakeupS(queue_fifo_remove(&sp->queue), MSG_OK);
}
}
/** /**
* @brief TLE8888 chip driver wakeup. * @brief TLE8888 chip driver wakeup.
* @details Wake up driver. Will cause output register update * @details Wake up driver. Will cause output register update
@ -249,16 +263,16 @@ static int tle8888_wake_driver(struct tle8888_priv *chip)
{ {
(void)chip; (void)chip;
int wasLocked = lockAnyContext();
if (isIsrContext()) { if (isIsrContext()) {
// this is for normal runtime // this is for normal runtime
int wasLocked = lockAnyContext();
chSemSignalI(&tle8888_wake); chSemSignalI(&tle8888_wake);
if (!wasLocked) {
unlockAnyContext();
}
} else { } else {
// this is for start-up to not hang up // this is for start-up to not hang up
chSemSignal(&tle8888_wake); chSemSignalS(&tle8888_wake);
}
if (!wasLocked) {
unlockAnyContext();
} }
return 0; return 0;