More details in report.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14752 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2021-09-13 07:51:30 +00:00
parent 3328a2c1b5
commit da74d65fbf
1 changed files with 20 additions and 10 deletions

View File

@ -232,7 +232,6 @@ static void guard_cb(virtual_timer_t *vtp, void *p) {
*/ */
void vt_storm_execute(const vt_storm_config_t *cfg) { void vt_storm_execute(const vt_storm_config_t *cfg) {
unsigned i; unsigned i;
bool delta_warning;
config = cfg; config = cfg;
@ -277,7 +276,7 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
#endif #endif
for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) { for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) {
bool dw; bool warning;
chprintf(cfg->out, "Iteration %d\r\n", i); chprintf(cfg->out, "Iteration %d\r\n", i);
chThdSleep(TIME_MS2I(10)); chThdSleep(TIME_MS2I(10));
@ -286,9 +285,10 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
vtcus = 0; vtcus = 0;
delay = TIME_MS2I(5); delay = TIME_MS2I(5);
saturated = false; saturated = false;
delta_warning = false; warning = false;
do { do {
rfcu_mask_t mask;
sysinterval_t decrease; sysinterval_t decrease;
/* Starting sweepers.*/ /* Starting sweepers.*/
@ -300,7 +300,7 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
chVTSetI(&sweeperm3, delay - 3, sweeperm3_cb, NULL); chVTSetI(&sweeperm3, delay - 3, sweeperm3_cb, NULL);
chVTSetI(&sweeperp3, delay + 3, sweeperp3_cb, NULL); chVTSetI(&sweeperp3, delay + 3, sweeperp3_cb, NULL);
chVTSetI(&wrapper, (sysinterval_t) - 1, wrapper_cb, NULL); chVTSetI(&wrapper, (sysinterval_t) - 1, wrapper_cb, NULL);
chVTSetContinuousI(&continuous, CH_CFG_ST_TIMEDELTA * 10, continuous_cb, NULL); chVTSetContinuousI(&continuous, TIME_US2I(50), continuous_cb, NULL);
chVTSetI(&guard0, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM / 2), guard_cb, NULL); chVTSetI(&guard0, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM / 2), guard_cb, NULL);
chVTSetI(&guard1, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM - 1), guard_cb, NULL); chVTSetI(&guard1, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM - 1), guard_cb, NULL);
chVTSetI(&guard2, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM + 1), guard_cb, NULL); chVTSetI(&guard2, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM + 1), guard_cb, NULL);
@ -324,18 +324,28 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
chVTResetI(&guard3); chVTResetI(&guard3);
/* Check for relevant RFCU events.*/ /* Check for relevant RFCU events.*/
dw = chRFCUGetAndClearFaultsI(CH_RFCU_VT_INSUFFICIENT_DELTA | mask = chRFCUGetAndClearFaultsI(CH_RFCU_VT_INSUFFICIENT_DELTA |
CH_RFCU_VT_SKIPPED_DEADLINE) != (rfcu_mask_t)0; CH_RFCU_VT_SKIPPED_DEADLINE);
chSysUnlock(); chSysUnlock();
if (saturated) { if (saturated) {
chprintf(cfg->out, "#"); chprintf(cfg->out, "#");
break; break;
} }
else if (dw) { else if (mask == CH_RFCU_VT_INSUFFICIENT_DELTA) {
palToggleLine(config->line);
chprintf(cfg->out, "x");
warning = true;
}
else if (mask == CH_RFCU_VT_SKIPPED_DEADLINE) {
palToggleLine(config->line); palToggleLine(config->line);
chprintf(cfg->out, "+"); chprintf(cfg->out, "+");
delta_warning = true; warning = true;
}
else if (mask == (CH_RFCU_VT_INSUFFICIENT_DELTA | CH_RFCU_VT_SKIPPED_DEADLINE)) {
palToggleLine(config->line);
chprintf(cfg->out, "*");
warning = true;
} }
else { else {
palToggleLine(config->line); palToggleLine(config->line);
@ -351,7 +361,7 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
delay = delay - decrease; delay = delay - decrease;
} while (delay >= (sysinterval_t)VT_STORM_CFG_MIN_DELAY); } while (delay >= (sysinterval_t)VT_STORM_CFG_MIN_DELAY);
if (delta_warning) { if (warning) {
chprintf(cfg->out, "\r\nRFCU warning detected", TIME_I2US(delay), delay); chprintf(cfg->out, "\r\nRFCU warning detected", TIME_I2US(delay), delay);
} }
else { else {