Array error in Hserin


Closed Thread
Results 1 to 22 of 22
  1. #1
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793

    Default Array error in Hserin

    It seems that Hserin cannot accept a word array in this expression:

    Code:
    hserin 100,noreceived,[wait("#"),str word_array\2]
    Gives this error:
    PICBASIC PRO(TM) Compiler 3.1.2.4, (c) 1997, 2019 ME Labs, Inc.
    All Rights Reserved.
    ERROR: Macro HSERINSTR?WL not found in macro file.

    If array is byte size then is just fine. Is that correct? I could not find something in the manual.

    Ioannis

  2. #2
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Got it. It is bytes and it is referenced, somewhat cryptic, on page 47, 3rd line from the bottom in the parenthesis.

    Ioannis

  3. #3
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    ext modifier to the rescue

    Code:
    word_array var word[2]
    word_array_asbyte var byte ext
    
    
    @word_array_asbyte=word_array 
    
    
    
    
    
    
    
    
    
    
    
    
    hserin 100,noreceived,[wait("#"),str word_array_asbyte\4]
    Warning I'm not a teacher

  4. #4
    Join Date
    Sep 2009
    Posts
    737


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    You need _ before PBP name, when used in ASM.

  5. #5
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Aha! Thanks Richard.

    pedja089, you mean instead of

    @word_array_asbyte=word_array

    be:

    @ _word_array_asbyte= _word_array

    right?

    Ioannis

  6. #6
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    @ word_array_asbyte= _word_array
    Warning I'm not a teacher

  7. #7
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    I am facing a problem with arrays.

    The task is to grab 10bits of ADC result into array elements.

    This works OK:

    word_temp.byte0=adresl
    word_temp.byte1=adresh
    array[i]=word_temp

    But this does not:

    array.highbyte[i]=adresh
    array.lowbyte[i]=adresl

    Is something wrong with the above syntax?

    Ioannis

  8. #8
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    array[i]=(adresh<<8)|adresl


    or
    using ext modifier
    array_asbyte[i*2]=adresl
    array_asbyte[i*2+1]=adresh
    Warning I'm not a teacher

  9. #9
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Thanks Richard.

    Comparing the

    array[i]=(adresh<<8)|adresl

    takes about 10 words more on compilation than

    word_temp.byte0=adresl
    word_temp.byte1=adresh
    array[i]=word_temp

    Have not tested the EXT version yet.

    Ioannis

  10. #10
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    And the EXT version... 30 words more!!!

    I think is too much.

    Ioannis

  11. #11
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    this way makes ext method 18 words less

    Code:
    array var word[2]
    array_asbyte var byte ext
    @array_asbyte=_array
    inx var byte
    i    var byte
    ADRESLO VAR BYTE
    ADRESHi VAR BYTE
    
    
    i=0
    for  inx=0 to 3
    'array[inx]=(adreshi<<8)| adreslo
    array_asbyte[i]=ADRESLO
    i=1+1
    array_asbyte[i]=ADRESHi
    i=1+1
    
    
    next
    
    
    stop
    Warning I'm not a teacher

  12. #12
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Did you tested on 18F or 16F?

    I did on 16F887. Maybe this is why I get more memory usage?

    Ioannis

  13. #13
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Did you tested on 18F or 16F?
    makes no difference , did you notice that i had removed the math from the array indexing for the better method ?
    Warning I'm not a teacher

  14. #14
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Yes I noticed that. Still no such reduction.

    Most compact code was obtained with the crude

    word_temp.byte0=adresl
    word_temp.byte1=adresh
    array[i]=word_temp

    Now that I think about it, it is just two transfer. So makes sense, doesn't it?

    Ioannis
    Last edited by Ioannis; - 29th January 2020 at 09:09.

  15. #15
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    not much on today so i tried a few options with pic16f877 and 16f1825 with no other complications code wise
    resultant code sizes are commented


    Code:
    array var word[2]
    ADRESLO VAR BYTE
    inx var byte
    ADRESHi VAR BYTE
    
    
    ;METHOD 0
    word_temp  var word   
    
    
    ;METHODS 2 AND 3
    array_asbyte var byte ext
    @array_asbyte=_array
    
    
    
    
    ;ALL METHODS EXCEPT 0 , 1
    i    var byte
    i=0
    ;METHOD 4
    @ MOVE?CW _array , FSR0L    ;  PIC16 ENH CORE
    ;METHOD 5
    '@ MOVE?CW _array , FSR     ;  PIC16 SHITTY OLD CHIP
    
    
    for  inx=0 to 3       ;1 FOR METHOD 0        ;                        36  WORDS
    '    word_temp.byte0=adreslo         ;METHOD 0
    '    word_temp.byte1=adreshi
    '    array[inx]=word_temp   
    
    
     
    '    array[inx]=(adreshi<<8)| adreslo    ;METHOD 1  ;                52   WORDS
    
    
    '    if !i&1 then                       ;METHOD 2    ;               60   WORDS
    '        array_asbyte[i]=ADRESLO
    '    else
    '        array_asbyte[i]=ADRESHi
    '    endif
    '    i=1+1
    
    
        
    '    array_asbyte[i]=ADRESLO          ;METHOD 3   ;                  34   WORDS
    '    i=1+1
    '    array_asbyte[i]=ADRESHi
    '    i=1+1
        
    
    
    
    
    asm                                   ;METHOD 4 PIC16 ENH CORE;      23   WORDS
      MOVE?BA _ADRESLO
      MOVWI FSR0++
      MOVE?BA _ADRESHi
      MOVWI FSR0++
    ENDASM
     
    'asm                               ;METHOD 5 PIC16 SHITTY OLD CHIP;  29   WORDS
    '  MOVE?BA _ADRESLO
    '  MOVWF INDF
    '  INCF FSR,F
    '  MOVE?BA _ADRESHi  
    '  MOVWF INDF
    '  INCF FSR,F
    'ENDASM
     
    
    
     
    next
    
    
    stop
    Warning I'm not a teacher

  16. #16
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Wow! Thanks for the extensive test.

    I suppose i=1+1 should be i=i+1, but does not matter in this test.

    The MOVE?BA _ADRESLO are macros I guess, but where can I find documentation how to use that stuff?

    Ioannis

  17. #17
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    I suppose i=1+1 should be i=i+1, but does not matter in this test.
    might need glasses




    where can I find documentation how to use that stuff?
    there is none i know of but its pretty simple
    A = wreg
    B= byte
    C= constant
    L= label
    W=word
    S= string
    the same as USERCOMMAND
    so
    MOVE?BA _ADRESLO
    is move byte @ ADRESLO to wreg

    it saves all that banksel typing

    ie
    asm
    banksel _ADRESLO
    movf _ADRESLO,w
    banksel whatever is next

    Warning I'm not a teacher

  18. #18
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Thanks Richard.

    Well this makes things more clear. Once I remember doing things in ASM, the banklsel was a pain...

    Ioannis

  19. #19
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Received from Charles this very interesting (and I suppose undocumented) tip:

    array.highbyte[i << 1]=adresh
    array.lowbyte[i << 1]=adresl

    OR

    array.highbyte[i * 2]=adresh
    array.lowbyte[i * 2]=adresl

    instead of

    array.highbyte[i]=adresh
    array.lowbyte[i]=adresl

    Really interesting!
    Ioannis

  20. #20
    Join Date
    Apr 2014
    Location
    OK
    Posts
    557


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    Another PBP trick when mixing with ASM is to declare your variables with the addendum SYSTEM:

    Code:
    Variable VAR BYTE
    @MOVF _Variable, W
    ...becomes:
    Code:
    Variable VAR BYTE SYSTEM
    @MOVF Variable, W

  21. #21
    Join Date
    May 2013
    Location
    australia
    Posts
    2,379


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    UPDATE METHODS

    Code:
    array var word[2]inx var byte
                       ;UNCOMMENT FOR METHOD 8
    ADRESHi VAR BYTE  ;BANK0  SYSTEM
    ADRESLO VAR BYTE  ; BANK0   SYSTEM
    ;METHOD 0
    word_temp  var word   
    
    
    ;METHODS 2 AND 3
    array_asbyte var byte ext
    @array_asbyte=_array
    
    
    
    
    ;ALL METHODS EXCEPT 0 , 1 ,6 ,7 ,8
    'i    var byte
    'i=0
    ;METHOD 4 ,8
    @ MOVE?CW _array , FSR0L    ;  PIC16 ENH CORE
    ;METHOD 5
    '@ MOVE?CW _array , FSR     ;  PIC16 SHITTY OLD CHIP
    
    ;                                                                CHIP    
    for  inx=0 to 1       ;                                                877        1825
    '    word_temp.byte0=adreslo             ;METHOD 0                    30  WORDS  31
    '    word_temp.byte1=adreshi
    '    array[inx]=word_temp   
    
    
     
    '    array[inx]=(adreshi<<8)| adreslo    ;METHOD 1                    50  WORDS   48
    
    
    '    if !i&1 then                        ;METHOD 2                    57  WORDS   57
    '        array_asbyte[i]=ADRESLO
    '    else
    '        array_asbyte[i]=ADRESHi
    '    endif
    '    i=i+1
    
    
        
    '    array_asbyte[i]=ADRESLO              ;METHOD 3                   30  WORDS    34
    '    i=i+1
    '    array_asbyte[i]=ADRESHi
    '    i=i+1
        
    
    
    
    
    asm                                    ;METHOD 4 PIC16 ENH CORE      na  WORDS    22
      MOVE?BA _ADRESLO
      MOVWI FSR0++
      MOVE?BA _ADRESHi
      MOVWI FSR0++
    ENDASM
     
    'asm                                    ;METHOD 5 PIC16 OLD CHIP      27  WORDS    na
    '  MOVE?BA _ADRESLO
    '  MOVWF INDF
    '  INCF FSR,F
    '  MOVE?BA _ADRESHi  
    '  MOVWF INDF
    '  INCF FSR,F
    'ENDASM
     
    '  array.highbyte[inx*2]=adreshi         ;METHOD 6                    76  WORDS   76
    '  array.lowbyte[inx*2]=adreslo
     
    '  array.highbyte[inx<<1]=adreshi        ;METHOD 7                    50  WORDS    49
    '  array.lowbyte[inx<<1]=adreslo
    
    
    'asm                                    ;METHOD 8 PIC16 ENH CORE      na  WORDS    22
    '  movf ADRESLO,w
    '  MOVWI FSR0++
    '  movf ADRESHi,w
    '  MOVWI FSR0++
    'ENDASM 
    
    
    next
    
    
    stop
    Last edited by richard; - 31st January 2020 at 02:32.
    Warning I'm not a teacher

  22. #22
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    3,793


    Did you find this post helpful? Yes | No

    Default Re: Array error in Hserin

    It is very impressive how much room there is for improvements!

    Thanks,
    Ioannis

Similar Threads

  1. Hserin with Array
    By JKaiser in forum Serial
    Replies: 4
    Last Post: - 11th December 2014, 20:13
  2. Hserin Array Question
    By Hylan in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 9th May 2012, 03:39
  3. Error - Fatal Out Of Memory ( With Array)
    By stormdacta in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 26th August 2007, 15:36
  4. Bit/Byte array for Hserin/Hserout
    By mrx23 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 2nd September 2006, 00:07
  5. HSERIN Error
    By eoasap in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 13th January 2006, 04:30

Members who have read this thread : 1

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