a simple boxe timer (code included)


Closed Thread
Results 1 to 25 of 25

Hybrid View

  1. #1
    Join Date
    Jun 2008
    Posts
    3


    Did you find this post helpful? Yes | No

    Default

    i'm new to picbasic.

    i didn't know that the "select" statment is so faster and smaller than many "if then" compiled in picbasic [realy i did not look at the select statment ... i've just used the first think i know in picbasic]. it was my mistake that i does't look at the beutiness of my code... even in functions where performance are not needed (like the selection of the time).
    i've just share my code.
    anyway, thank for suggestions.
    any other suggestion will be apriciated.

    p.s. is this code more faster? (no IF needed)

    LOOKDOWN2 W0,>[255,242,218,192,166,144,124,105,80,59,49,40,0],B0
    LOOKUP2 B0,[60,600,180,120,60,60,40,30,20,15,10,45,30],timerAc
    LOOKUP2 B0,[60,180,60,60,60,30,40,30,20,15,10,15,15],timerBc
    LOOKUP2 B0,[6,1,2,3,4,5,6,7,8,9,10,11,12],timerN
    Last edited by hozone; - 20th June 2008 at 21:14.

  2. #2
    T.Jackson's Avatar
    T.Jackson Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by hozone View Post

    p.s. is this code more faster? (no IF needed)

    LOOKDOWN2 W0,>[255,242,218,192,166,144,124,105,80,59,49,40,0],B0
    LOOKUP2 B0,[60,600,180,120,60,60,40,30,20,15,10,45,30],timerAc
    LOOKUP2 B0,[60,180,60,60,60,30,40,30,20,15,10,15,15],timerBc
    LOOKUP2 B0,[6,1,2,3,4,5,6,7,8,9,10,11,12],timerN
    At a guess I'm going to say much slower. LOOKUP / DOWN is a function, a group of operations, probably containing many IFs inside it. I think the protocol behind that function would be lengthy, well protected and complex.

    I place no bets though, never implemented it.

    Trent Jackson

  3. #3
    T.Jackson's Avatar
    T.Jackson Guest


    Did you find this post helpful? Yes | No

    Default A Good Case

    The main reason "Select Case" is faster is because it allows you to structure your code. As with an IF statement there's still a "compare" operation being preformed, but it's usually far better optimized.

    The biggest problem with your original code is that every IF will be executed, which consequently wastes time.

    Say for example that b1 = 245, the first IF is tested, the result returns true because b1 is within range of (255 - 243), so the block of code associated with that IF is executed, timerN is set to 1 etc ...

    Now here's the problem -- all subsequent IFs are executed even though b1 is clearly out of range and the result will always return false while ever b = 245.

    Code:
        If (b1 <= 255 And b1 >= 243) Then ' Comparison always performed
            timerN = 1
            timerAc = 600
            timerBc = 180
        End If
        If (b1 <= 242 And b1 >= 219) Then ' Comparison always performed
            timerN = 2
            timerAc = 180
            timerBc = 60
        End If
    Select Case can be configured in a way so that only one comparison is ever performed, only one block of code is ever executed.

    Trent Jackson

  4. #4
    Join Date
    Mar 2006
    Location
    INDIA
    Posts
    89


    Did you find this post helpful? Yes | No

    Default

    Great,... Yes.

    IF AND THEN --- compile to 159 words.
    Select case --- compile to 58 words.

    I will have to compere all statements. eg. FOR/NEXT loops. while/Wend, GOTO, GOSUB/RETURN, HI/LOW, TOGGLE.
    For time of Execution speed and code space.


    .

  5. #5
    T.Jackson's Avatar
    T.Jackson Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by precision View Post
    I will have to compere all statements. eg. FOR/NEXT loops. while/Wend, GOTO, GOSUB/RETURN, HI/LOW, TOGGLE.
    For time of Execution speed and code space.
    while / wend (same as "do / loop" but without a condition) -- will always be faster than "for next loops" Main reason is because there is no counter, there's no constantly incrementing or decrementing after each iteration.

    But I encourage you to conduct your tests and post the results here.

    Trent Jackson

  6. #6
    T.Jackson's Avatar
    T.Jackson Guest


    Did you find this post helpful? Yes | No

    Default

    Another thing also, the "AND" operator -- try to avoid it at all costs.

    Code:
    if b1 = 100 then
       if b2 = 200 then
          Thank Mr Jackson for these invaluable tips
       end if
    end if
    is much better than ...

    Code:
    if b1 = 100 and b2 = 200 then
      do something ...
    end if
    You might save a few bytes of code space, it'll run faster too.

    Can anyone tell me why?

    Trent Jackson

  7. #7
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    IF you're actually asking a question vs. just talking out your.............................
    then...
    Code:
    if b1 = 100 then
       if b2 = 200 then
          Thank Mr Jackson for these invaluable tips
       end if
    end if
    2 comparisons, 3 jumps

    Code:
    if b1 = 100 and b2 = 200 then
      do something ...
    end if
    3 'nested' comparisons (2 + 1), couple of extra 'state' bits to save in the middle of it all, plus 4 jumps

    IF you're posing a question for the class from the podium, then nevermind...

Similar Threads

  1. Elapsed Timer Demo
    By Darrel Taylor in forum Code Examples
    Replies: 111
    Last Post: - 29th October 2012, 17:39
  2. Replies: 5
    Last Post: - 24th February 2009, 18:55
  3. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 08:26
  4. Interrupt/timer not really interrupting...
    By Tom Gonser in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 22nd May 2005, 22:05
  5. Timer Accuracy
    By GEEZER in forum mel PIC BASIC Pro
    Replies: 8
    Last Post: - 31st March 2005, 05:26

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts