PDA

View Full Version : IF or SELECT



RYTECH
- 31st December 2005, 10:29
whats faster to execute this "IF" statement or this "select" statement? (and why?)

IF RECADD = 0 THEN outr0
IF RECADD = 1 THEN outr1 ' if request is for RECADD#1 then goto RECADD#1 routine
IF RECADD = 2 THEN outr2 ' if request is for RECADD#2 then goto RECADD#2 routine
IF RECADD = 3 THEN outr3 ' if request is for RECADD#3 then goto RECADD#3 routine
IF RECADD = 4 THEN outr4 ' if request is for RECADD#4 then goto RECADD#4 routine
IF RECADD = 5 THEN outr5 ' if request is for RECADD#5 then goto RECADD#5 routine
IF RECADD = 6 THEN outr6 ' if request is for RECADD#6 then goto RECADD#6 routine

or

SELECT CASE RECADD
CASE 1
GOTO outr1
CASE 2
GOTO outr2
CASE 3
GOTO outr3
CASE 4
GOTO outr4
CASE 5
GOTO outr5
CASE 6
GOTO outr6
ELSE
END SELECT

Charles Linquis
- 31st December 2005, 18:31
For things like this, I use a little code timer that I wrote. It uses Timer0 to measure execution time of code snippets.

Presently, it is designed for use with an 18F8720 running at 20Mhz, but it could be easily modified for other processors or speeds.

'------------------------------------------------------------------------


DEFINE OSC 20 ' Set for 20Mhz operation

DEFINE NO_CLRWDT 1 ' Don't waste cycles clearing WDT
DEFINE _18F8720 1
DEFINE HSER_RCSTA 90H
DEFINE HSER_TXSTA 20H

DEFINE HSER_CLROERR 1
DEFINE LOADER_USED 1
Define USE_LFSR 1

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 50

DEFINE I2C_HOLD 1
DEFINE I2C_SLOW 1


TRISC = %10111111 ' Hardware serial port on PORTC.7,PORTC.6

PSPCON = %00000000 ' No PSP
MEMCON = %10000000 ' No External Memory
CMCON = %00000111
' No Comparator used, turn it off
TXSTA1.2 = 1
SPBRG = 129

INTCON = $80 ' Turn off interrupts

T0CON = %10001000 ' No Prescaler,16 bit Timer 0

TimerValue VAR WORD
RealTime VAR WORD
OverFlow VAR BYTE
Prescale VAR BYTE
DummyVal VAR Byte




'-------------------------------------------------------------------------------
' Put Variables required by program here
'-------------------------------------------------------------------------------
Restart:

'-------------------------------------------------------------------------------
'Put code to be timed here
'----------------------------------------------------------------------------



Time_It:

TimerValue.LowByte = TMR0L
TimerValue.Highbyte = TMR0H

IF INTCON.2 = 1 THEN
INTCON.2 = 0
OverFlow = OverFlow + 1
If OverFlow = 1 THEN
T0CON = %10000010
Prescale = 8
ENDIF
IF OverFlow = 2 THEN
HSEROUT ["Execution time too long - choose another prescaler value",13,10]
ENDIF
GOTO RESTART
ENDIF



HSEROUT ["Execution Time = ",#(TimerValue * Prescale), " Cycles, ",#((TimerValue/5)*Prescale)," Microseconds",13,10,10]
HSEROUT ["Press any key to restart",13,10]

HSERIN [DummyVal]
GOTO Restart

END