1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-01 18:29:16 +01:00

OP1290 Systemalarms optimizations as suggested by OPReview-689

This commit is contained in:
Corvus Corax 2014-04-06 12:46:27 +02:00
parent 2d9fe95b08
commit e18f2e6d7e

View File

@ -69,7 +69,7 @@ int32_t AlarmsInitialize(void)
*/ */
int32_t AlarmsSet(SystemAlarmsAlarmElem alarm, SystemAlarmsAlarmOptions severity) int32_t AlarmsSet(SystemAlarmsAlarmElem alarm, SystemAlarmsAlarmOptions severity)
{ {
SystemAlarmsData alarms; SystemAlarmsAlarmData alarms;
// Check that this is a valid alarm // Check that this is a valid alarm
if (alarm >= SYSTEMALARMS_ALARM_NUMELEM) { if (alarm >= SYSTEMALARMS_ALARM_NUMELEM) {
@ -80,14 +80,14 @@ int32_t AlarmsSet(SystemAlarmsAlarmElem alarm, SystemAlarmsAlarmOptions severity
xSemaphoreTakeRecursive(lock, portMAX_DELAY); xSemaphoreTakeRecursive(lock, portMAX_DELAY);
// Read alarm and update its severity only if it was changed // Read alarm and update its severity only if it was changed
SystemAlarmsGet(&alarms); SystemAlarmsAlarmGet(&alarms);
uint16_t flightTime = xTaskGetTickCount() * portTICK_RATE_MS; // this deliberately overflows every 2^16 milliseconds to save memory uint16_t flightTime = (uint16_t)xTaskGetTickCount() * (uint16_t)portTICK_RATE_MS; // this deliberately overflows every 2^16 milliseconds to save memory
if ((flightTime - lastAlarmChange[alarm] > PIOS_ALARM_GRACETIME && if ((flightTime - lastAlarmChange[alarm] > PIOS_ALARM_GRACETIME &&
cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity) cast_struct_to_array(alarms, alarms.Actuator)[alarm] != severity)
|| cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] < severity) { || cast_struct_to_array(alarms, alarms.Actuator)[alarm] < severity) {
cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] = severity; cast_struct_to_array(alarms, alarms.Actuator)[alarm] = severity;
lastAlarmChange[alarm] = flightTime; lastAlarmChange[alarm] = flightTime;
SystemAlarmsSet(&alarms); SystemAlarmsAlarmSet(&alarms);
} }
// Release lock // Release lock
@ -120,7 +120,7 @@ int32_t ExtendedAlarmsSet(SystemAlarmsAlarmElem alarm,
// Read alarm and update its severity only if it was changed // Read alarm and update its severity only if it was changed
SystemAlarmsGet(&alarms); SystemAlarmsGet(&alarms);
uint16_t flightTime = xTaskGetTickCount() * portTICK_RATE_MS; // this deliberately overflows every 2^16 milliseconds to save memory uint16_t flightTime = (uint16_t)xTaskGetTickCount() * (uint16_t)portTICK_RATE_MS; // this deliberately overflows every 2^16 milliseconds to save memory
if ((flightTime - lastAlarmChange[alarm] > PIOS_ALARM_GRACETIME && if ((flightTime - lastAlarmChange[alarm] > PIOS_ALARM_GRACETIME &&
cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity) cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] != severity)
|| cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] < severity) { || cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm] < severity) {
@ -143,7 +143,7 @@ int32_t ExtendedAlarmsSet(SystemAlarmsAlarmElem alarm,
*/ */
SystemAlarmsAlarmOptions AlarmsGet(SystemAlarmsAlarmElem alarm) SystemAlarmsAlarmOptions AlarmsGet(SystemAlarmsAlarmElem alarm)
{ {
SystemAlarmsData alarms; SystemAlarmsAlarmData alarms;
// Check that this is a valid alarm // Check that this is a valid alarm
if (alarm >= SYSTEMALARMS_ALARM_NUMELEM) { if (alarm >= SYSTEMALARMS_ALARM_NUMELEM) {
@ -151,8 +151,8 @@ SystemAlarmsAlarmOptions AlarmsGet(SystemAlarmsAlarmElem alarm)
} }
// Read alarm // Read alarm
SystemAlarmsGet(&alarms); SystemAlarmsAlarmGet(&alarms);
return cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[alarm]; return cast_struct_to_array(alarms, alarms.Actuator)[alarm];
} }
/** /**
@ -234,17 +234,17 @@ int32_t AlarmsHasCritical()
*/ */
static int32_t hasSeverity(SystemAlarmsAlarmOptions severity) static int32_t hasSeverity(SystemAlarmsAlarmOptions severity)
{ {
SystemAlarmsData alarms; SystemAlarmsAlarmData alarms;
// Lock // Lock
xSemaphoreTakeRecursive(lock, portMAX_DELAY); xSemaphoreTakeRecursive(lock, portMAX_DELAY);
// Read alarms // Read alarms
SystemAlarmsGet(&alarms); SystemAlarmsAlarmGet(&alarms);
// Go through alarms and check if any are of the given severity or higher // Go through alarms and check if any are of the given severity or higher
for (uint32_t n = 0; n < SYSTEMALARMS_ALARM_NUMELEM; ++n) { for (uint32_t n = 0; n < SYSTEMALARMS_ALARM_NUMELEM; ++n) {
if (cast_struct_to_array(alarms.Alarm, alarms.Alarm.Actuator)[n] >= severity) { if (cast_struct_to_array(alarms, alarms.Actuator)[n] >= severity) {
xSemaphoreGiveRecursive(lock); xSemaphoreGiveRecursive(lock);
return 1; return 1;
} }