Save some DSEG space by marking cmd functions __reentrant
authorKeith Packard <keithp@keithp.com>
Fri, 16 Oct 2009 03:56:45 +0000 (12:56 +0900)
committerKeith Packard <keithp@keithp.com>
Fri, 16 Oct 2009 03:56:45 +0000 (12:56 +0900)
__reentrant causes the compiler to place args and locals on the stack
instead of in the data segment.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/ao_adc.c
src/ao_ee.c
src/ao_flight.c
src/ao_gps_sirf.c
src/ao_log.c
src/ao_usb.c

index 26209dcf1381904b5d68bd597db535e0ba3b7940..d96726716fdf568d6cbc8a6378f3dc2aea6314d1 100644 (file)
@@ -61,9 +61,9 @@ ao_adc_isr(void) interrupt 1
 }
 
 static void
-ao_adc_dump(void)
+ao_adc_dump(void) __reentrant
 {
-       __xdata struct ao_adc   packet;
+       static __xdata struct ao_adc    packet;
        ao_adc_get(&packet);
        printf("tick: %5u accel: %4d pres: %4d temp: %4d batt: %4d drogue: %4d main: %4d\n",
               packet.tick, packet.accel >> 4, packet.pres >> 4, packet.temp >> 4,
index 9b6db2340d69e2a1f9f6e41582a1742773f84519..26cfb7fd4cb6a13451a20a529473d0213160c61b 100644 (file)
@@ -351,11 +351,11 @@ ao_ee_read_config(uint8_t *buf, uint16_t len) __reentrant
 }
 
 static void
-ee_dump(void)
+ee_dump(void) __reentrant
 {
-       __xdata uint8_t b;
-       __xdata uint16_t block;
-       __xdata uint8_t i;
+       uint8_t b;
+       uint16_t block;
+       uint8_t i;
 
        ao_cmd_hex();
        block = ao_cmd_lex_i;
@@ -377,13 +377,13 @@ ee_dump(void)
 }
 
 static void
-ee_store(void)
+ee_store(void) __reentrant
 {
-       __xdata uint16_t block;
-       __xdata uint8_t i;
-       __xdata uint16_t len;
-       __xdata uint8_t b;
-       __xdata uint32_t addr;
+       uint16_t block;
+       uint8_t i;
+       uint16_t len;
+       uint8_t b;
+       uint32_t addr;
 
        ao_cmd_hex();
        block = ao_cmd_lex_i;
index ec89e7c2f7e97bdbbb850ead7f1015b1e45e83f1..c43d0711d571b2d79a3ff41e874b066250ca5c2b 100644 (file)
@@ -458,7 +458,7 @@ ao_flight(void)
 #define AO_VEL_COUNT_TO_MS(count)      ((int16_t) ((count) / 2700))
 
 static void
-ao_flight_status(void)
+ao_flight_status(void) __reentrant
 {
        printf("STATE: %7s accel: %d speed: %d altitude: %d main: %d\n",
               ao_state_names[ao_flight_state],
index 2b3a5178120029bee4998de33631a862dedf6432..5843876051d3d3ecf86f50ea091afdf78e745c06 100644 (file)
@@ -302,7 +302,7 @@ static const char ao_gps_set_message_rate[] = {
 };
 
 void
-ao_sirf_set_message_rate(uint8_t msg, uint8_t rate)
+ao_sirf_set_message_rate(uint8_t msg, uint8_t rate) __reentrant
 {
        uint16_t        cksum = 0x00a6;
        uint8_t         i;
index 7945ace4e1854c536b216a1d8d5e17c96d137ae7..b2bfbd6f8e9a27616a9921c1874a32447e8a16de 100644 (file)
@@ -192,7 +192,7 @@ ao_log_stop(void)
 }
 
 static void
-dump_log(void)
+dump_log(void) __reentrant
 {
        uint8_t more;
 
index 2266572541c820b661897b22b3a6530152b71fa9..8926b9ca3102378667471f7030ad9151790ea753 100644 (file)
@@ -72,7 +72,7 @@ uint8_t * __xdata ao_usb_ep0_in_data;
 __xdata uint8_t ao_usb_ep0_in_len;
 __xdata uint8_t        ao_usb_ep0_in_buf[2];
 __xdata uint8_t ao_usb_ep0_out_len;
-__xdata uint8_t *__data ao_usb_ep0_out_data;
+__xdata uint8_t *__xdata ao_usb_ep0_out_data;
 __xdata uint8_t ao_usb_configuration;
 
 /* Send an IN data packet */