[avr] fix interrupt tracing and remove unneeded volatiles

This commit is contained in:
Bart Van Der Meerssche 2011-01-16 17:30:55 +01:00
parent b224ffdf23
commit 8813c816ff
3 changed files with 34 additions and 30 deletions

View File

@ -37,16 +37,16 @@ static char ctrlTxData[CTRL_TX_BUFFER_SIZE];
extern uint16_t EEMEM EEPROM_version; extern uint16_t EEMEM EEPROM_version;
extern uint16_t version; extern uint16_t version;
extern volatile struct event_struct EEMEM EEPROM_event; extern struct event_struct EEMEM EEPROM_event;
extern volatile struct event_struct event; extern struct event_struct event;
extern uint8_t EEMEM EEPROM_phy_to_log[MAX_SENSORS]; extern uint8_t EEMEM EEPROM_phy_to_log[MAX_SENSORS];
extern uint8_t phy_to_log[MAX_SENSORS]; extern uint8_t phy_to_log[MAX_SENSORS];
extern volatile struct sensor_struct EEMEM EEPROM_sensor[MAX_SENSORS]; extern struct sensor_struct EEMEM EEPROM_sensor[MAX_SENSORS];
extern volatile struct sensor_struct sensor[MAX_SENSORS]; extern struct sensor_struct sensor[MAX_SENSORS];
extern volatile struct state_struct state[MAX_SENSORS]; extern struct state_struct state[MAX_SENSORS];
void ctrlInit(void) void ctrlInit(void)
{ {
@ -253,7 +253,7 @@ void ctrlDecode(void)
void ctrlCmdGet(uint8_t cmd) void ctrlCmdGet(uint8_t cmd)
{ {
uint8_t i; uint8_t i = 0;
uint32_t tmp32, tmp32_bis; uint32_t tmp32, tmp32_bis;
switch (cmd) { switch (cmd) {
@ -315,9 +315,9 @@ void ctrlCmdGet(uint8_t cmd)
void ctrlCmdSet(uint8_t cmd) void ctrlCmdSet(uint8_t cmd)
{ {
uint8_t i, tmp8; uint8_t i = 0, tmp8 = 0;
uint16_t tmp16; uint16_t tmp16 = 0;
uint32_t tmp32; uint32_t tmp32 = 0;
switch (cmd) { switch (cmd) {
case 'v': case 'v':

View File

@ -35,28 +35,29 @@
#include "global.h" #include "global.h"
#include "encode.h" #include "encode.h"
volatile uint8_t spi_status, spi_high_hex; register uint8_t spi_status asm("r7");
uint8_t spi_high_hex;
uint8_t EEMEM first_EEPROM_byte_not_used_to_protect_from_brownout_corruption = 0xbe; uint8_t EEMEM first_EEPROM_byte_not_used_to_protect_from_brownout_corruption = 0xbe;
uint8_t EEMEM EEPROM_version[2] = {2, 1}; uint8_t EEMEM EEPROM_version[2] = {2, 1};
uint8_t version[2]; uint8_t version[2];
volatile struct event_struct EEMEM EEPROM_event = {0, 0}; struct event_struct EEMEM EEPROM_event = {0, 0};
volatile struct event_struct event; struct event_struct event;
uint8_t EEMEM EEPROM_phy_to_log[MAX_SENSORS] = {0, 1, 2, 3, 4, 5}; uint8_t EEMEM EEPROM_phy_to_log[MAX_SENSORS] = {0, 1, 2, 3, 4, 5};
uint8_t phy_to_log[MAX_SENSORS]; uint8_t phy_to_log[MAX_SENSORS];
volatile struct sensor_struct EEMEM EEPROM_sensor[MAX_SENSORS]; struct sensor_struct EEMEM EEPROM_sensor[MAX_SENSORS];
volatile struct sensor_struct sensor[MAX_SENSORS]; struct sensor_struct sensor[MAX_SENSORS];
volatile struct state_struct state[MAX_SENSORS]; struct state_struct state[MAX_SENSORS];
volatile uint8_t muxn = 0; uint8_t muxn = 0;
volatile uint16_t timer = 0; uint16_t timer = 0;
volatile struct time_struct time = {0, 0}; struct time_struct time = {0, 0};
ISR(SPI_STC_vect) ISR(SPI_STC_vect)
{ {
@ -68,14 +69,14 @@ ISR(SPI_STC_vect)
if (spi_status & (SPI_NO_OP_1 | SPI_NO_OP_2)) { if (spi_status & (SPI_NO_OP_1 | SPI_NO_OP_2)) {
spi_status--; spi_status--;
DBG_LED_ON(); DBG_LED_ON();
return; goto finish;
} }
// do we have to transmit the first byte? // do we have to transmit the first byte?
if (spi_status & SPI_START_TX) { if (spi_status & SPI_START_TX) {
received_from_spi(SPI_FORWARD_TO_CTRL_PORT); received_from_spi(SPI_FORWARD_TO_CTRL_PORT);
spi_status &= ~SPI_START_TX; spi_status &= ~SPI_START_TX;
return; goto finish;
} }
// are we in Tx mode? // are we in Tx mode?
@ -83,7 +84,7 @@ ISR(SPI_STC_vect)
if (spi_status & SPI_HIGH_HEX) { if (spi_status & SPI_HIGH_HEX) {
received_from_spi(spi_high_hex); /* actually low hex ! */ received_from_spi(spi_high_hex); /* actually low hex ! */
spi_status &= ~SPI_HIGH_HEX; spi_status &= ~SPI_HIGH_HEX;
return; goto finish;
} }
if (spi_status & SPI_TO_FROM_UART) { if (spi_status & SPI_TO_FROM_UART) {
@ -91,25 +92,25 @@ ISR(SPI_STC_vect)
received_from_spi(SPI_END_OF_TX); received_from_spi(SPI_END_OF_TX);
spi_status &= ~SPI_TRANSMIT; spi_status &= ~SPI_TRANSMIT;
spi_status |= SPI_NO_OP_2; spi_status |= SPI_NO_OP_2;
return; goto finish;
} }
} }
else { else {
if (ctrlGetFromTxBuffer(&tx)) { if (ctrlGetFromTxBuffer(&tx)) {
received_from_spi(tx); received_from_spi(tx);
return; goto finish;
} }
else { else {
received_from_spi(SPI_FORWARD_TO_UART_PORT); received_from_spi(SPI_FORWARD_TO_UART_PORT);
spi_status |= SPI_TO_FROM_UART; spi_status |= SPI_TO_FROM_UART;
return; goto finish;
} }
} }
btoh(tx, &spi_tx, (uint8_t *)&spi_high_hex); /* actually low hex ! */ btoh(tx, &spi_tx, (uint8_t *)&spi_high_hex); /* actually low hex ! */
spi_status |= SPI_HIGH_HEX; spi_status |= SPI_HIGH_HEX;
received_from_spi(spi_tx); received_from_spi(spi_tx);
return; goto finish;
} }
// we're in Rx mode // we're in Rx mode
@ -143,7 +144,7 @@ ISR(SPI_STC_vect)
} }
else { else {
ctrlAddToRxBuffer(spi_rx); ctrlAddToRxBuffer(spi_rx);
return; goto finish;
} }
} }
@ -151,7 +152,8 @@ ISR(SPI_STC_vect)
spi_status ^= SPI_HIGH_HEX; spi_status ^= SPI_HIGH_HEX;
} }
DBG_ISR_END(); finish:
DBG_ISR_END();
} }
ISR(INT0_vect) ISR(INT0_vect)
@ -179,7 +181,7 @@ ISR(TIMER1_COMPA_vect)
{ {
uint8_t muxn_l = phy_to_log[muxn]; uint8_t muxn_l = phy_to_log[muxn];
DBG_ISR_BEGIN(); // DBG_ISR_BEGIN();
MacU16X16to32(state[muxn_l].nano, sensor[muxn_l].meterconst, ADC); MacU16X16to32(state[muxn_l].nano, sensor[muxn_l].meterconst, ADC);
@ -213,7 +215,7 @@ ISR(TIMER1_COMPA_vect)
/* Start a new ADC conversion. */ /* Start a new ADC conversion. */
ADCSRA |= (1<<ADSC); ADCSRA |= (1<<ADSC);
DBG_ISR_END(); // DBG_ISR_END();
} }
ISR(ANALOG_COMP_vect) ISR(ANALOG_COMP_vect)
@ -366,7 +368,6 @@ int main(void)
for(;;) { for(;;) {
if (spi_status & SPI_NEW_CTRL_MSG) { if (spi_status & SPI_NEW_CTRL_MSG) {
//ctrlRxToTxLoop();
ctrlDecode(); ctrlDecode();
spi_status &= ~SPI_NEW_CTRL_MSG; spi_status &= ~SPI_NEW_CTRL_MSG;
} }

View File

@ -122,6 +122,9 @@ CDEFS += -D DBG=$(DBG)
# Warn when a function marked for inlining could not be substituted # Warn when a function marked for inlining could not be substituted
CDEFS += -Winline CDEFS += -Winline
# Inline all 'simple-enough' functions (seems to be done by default in -Os)
CDEFS += -finline-functions
# uncomment and adapt these line if you want different UART library buffer size # uncomment and adapt these line if you want different UART library buffer size
CDEFS += -DUART_RX_BUFFER_SIZE=64 CDEFS += -DUART_RX_BUFFER_SIZE=64
CDEFS += -DUART_TX_BUFFER_SIZE=64 CDEFS += -DUART_TX_BUFFER_SIZE=64