projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/scheme: Work around gcc 7.2.0 optimization bug in memory manager
[fw/altos]
/
src
/
kernel
/
ao_pyro.c
diff --git
a/src/kernel/ao_pyro.c
b/src/kernel/ao_pyro.c
index b11d1080a54fbc1a7c25f5cb23a8eae492a7cf23..e5c30eec42da6e1504880684f773da59760bd482 100644
(file)
--- a/
src/kernel/ao_pyro.c
+++ b/
src/kernel/ao_pyro.c
@@
-76,7
+76,7
@@
uint16_t ao_pyro_fired;
#if PYRO_DBG
int pyro_dbg;
#if PYRO_DBG
int pyro_dbg;
-#define DBG(...) do { if (pyro_dbg)
printf("\t%d: ", (int) (pyro - ao_config.pyro)); printf(__VA_ARGS__);
} while (0)
+#define DBG(...) do { if (pyro_dbg)
{ printf("\t%d: ", (int) (pyro - ao_config.pyro)); printf(__VA_ARGS__); }
} while (0)
#else
#define DBG(...)
#endif
#else
#define DBG(...)
#endif
@@
-181,7
+181,7
@@
ao_pyro_ready(struct ao_pyro *pyro)
case ao_pyro_state_greater_or_equal:
if (ao_flight_state >= pyro->state_greater_or_equal)
continue;
case ao_pyro_state_greater_or_equal:
if (ao_flight_state >= pyro->state_greater_or_equal)
continue;
- DBG("state %d
>= %d\n", ao_flight_state, pyro->state_less
);
+ DBG("state %d
< %d\n", ao_flight_state, pyro->state_greater_or_equal
);
break;
default:
break;
default:
@@
-239,11
+239,8
@@
ao_pyro_pins_fire(uint16_t fire)
}
ao_delay(ao_config.pyro_time);
for (p = 0; p < AO_PYRO_NUM; p++) {
}
ao_delay(ao_config.pyro_time);
for (p = 0; p < AO_PYRO_NUM; p++) {
- if (fire & (1 << p))
{
+ if (fire & (1 << p))
ao_pyro_pin_set(p, 0);
ao_pyro_pin_set(p, 0);
- ao_config.pyro[p].fired = 1;
- ao_pyro_fired |= (1 << p);
- }
}
ao_delay(AO_MS_TO_TICKS(50));
}
}
ao_delay(AO_MS_TO_TICKS(50));
}
@@
-261,7
+258,7
@@
ao_pyro_check(void)
/* Ignore igniters which have already fired
*/
/* Ignore igniters which have already fired
*/
- if (
pyro->fired
)
+ if (
ao_pyro_fired & (1 << p)
)
continue;
/* Ignore disabled igniters
continue;
/* Ignore disabled igniters
@@
-296,7
+293,7
@@
ao_pyro_check(void)
* by setting the fired bit
*/
if (!ao_pyro_ready(pyro)) {
* by setting the fired bit
*/
if (!ao_pyro_ready(pyro)) {
-
pyro->fired = 1
;
+
ao_pyro_fired |= (1 << p)
;
continue;
}
continue;
}
@@
-307,8
+304,10
@@
ao_pyro_check(void)
fire |= (1 << p);
}
fire |= (1 << p);
}
- if (fire)
+ if (fire) {
+ ao_pyro_fired |= fire;
ao_pyro_pins_fire(fire);
ao_pyro_pins_fire(fire);
+ }
return any_waiting;
}
return any_waiting;
}
@@
-438,7
+437,7
@@
ao_pyro_show(void)
if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE)
value = *((uint8_t *) ((char *) pyro + ao_pyro_values[v].offset));
else
if (ao_pyro_values[v].flag & AO_PYRO_8_BIT_VALUE)
value = *((uint8_t *) ((char *) pyro + ao_pyro_values[v].offset));
else
- value = *((int16_t *) ((char *) pyro + ao_pyro_values[v].offset));
+ value = *((int16_t *) (
void *) (
(char *) pyro + ao_pyro_values[v].offset));
printf ("%6d ", value);
} else {
printf (" ");
printf ("%6d ", value);
} else {
printf (" ");
@@
-482,7
+481,7
@@
ao_pyro_set(void)
break;
for (c = 0; c < AO_PYRO_NAME_LEN - 1; c++) {
break;
for (c = 0; c < AO_PYRO_NAME_LEN - 1; c++) {
- if (ao_cmd_is_white())
+ if (ao_cmd_is_white()
|| ao_cmd_lex_c == '\n'
)
break;
name[c] = ao_cmd_lex_c;
ao_cmd_lex();
break;
name[c] = ao_cmd_lex_c;
ao_cmd_lex();
@@
-517,7
+516,7
@@
ao_pyro_set(void)
} else {
if (negative)
ao_cmd_lex_i = -ao_cmd_lex_i;
} else {
if (negative)
ao_cmd_lex_i = -ao_cmd_lex_i;
- *((int16_t *) ((char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i;
+ *((int16_t *) (
void *) (
(char *) &pyro_tmp + ao_pyro_values[v].offset)) = ao_cmd_lex_i;
}
}
}
}
}
}