A question for the Macro experts....


Closed Thread
Results 1 to 17 of 17

Hybrid View

  1. #1
    forgie's Avatar
    forgie Guest


    Did you find this post helpful? Yes | No

    Default

    Oh and, how do you post code like you guys do? I have been using < code>.... whats the tag to put it in a nice little grey box?

  2. #2
    Join Date
    Oct 2004
    Location
    Italy
    Posts
    695


    Did you find this post helpful? Yes | No

  3. #3
    forgie's Avatar
    forgie Guest


    Did you find this post helpful? Yes | No

    Default

    Thanks, Luciano
    My macro now looks like thus:
    Code:
    TXArray	var Sample_Array
    TXIndex	var word SYSTEM
    TXData	var word SYSTEM
    @TX_Sample macro index
    	@ MOVE?WW index, TXIndex
    	TXData = TXArray[TXIndex]
    	Hserout [TXData / 100, TXData // 100]
    	@ endm
    (Sample_Array is a word array that I'm using to store my data in).

    This works great, and I can call it like this:
    Code:
    	@ TX_Sample _Sample
    Thanks for the pointers, fellow PBPers. The only thing I couldn't do was get it to take both the array and the index as arguments.... I have to nut out the whole memory addressing thing in my head before I can get it to work.

  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Good job guy. i just want to remind you something. Every time a macro is called, that duplicate his whole code. so, by using the following
    Code:
    asm
    TX_Sample macro index
    	MOVE?WW index, TXIndex
        L?CALL TXnow
    	endm
    TXnow
        ENDASM
    	TXData = TXArray[TXIndex]
    	Hserout [TXData / 100, TXData // 100]
        RETURN
    this will generate less code everytime you call the macro.

    Here's another method to send a specific index of Word array var.
    Code:
    DEFINE LOADER_USED 1
    DEFINE OSC 20
    DEFINE HSER_RCSTA 90h
    DEFINE HSER_TXSTA 24h
    DEFINE HSER_SPBRG 129 ' 9600 Bauds
    
    TXData  var WORD SYSTEM   
    aVar    var word[4] SYSTEM
    
    avar[0]=0
    avar[1]=100
    avar[2]=1000
    avar[3]=10000
    goto start
    
    asm
    Usend macro index
    	MOVE?WW aVar + (index*2) , TXData
        L?CALL TXnow
    	endm
    TXnow
        ENDASM
    	Hserout [dec TXData,13,10]
        RETURN
    start:
          @ Usend 0
          @ Usend 1
          @ Usend 2
          @ Usend 3
          pause 500
          goto start
    there's probably tons of way like using AOUT?xxx macro too.. well still unsure of that one AOUT?xxx
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Macro's can be usefull. &nbsp;But, they're not always the best choice.
    Code:
    TRANSMIT:
        Temp = Sample_Array(Index)
        HSEROUT [Temp / 100, Temp // 100]
    RETURN
    
    Index = 2 : GOSUB TRANSMIT
    <br>
    DT

  6. #6
    forgie's Avatar
    forgie Guest


    Did you find this post helpful? Yes | No

    Default

    Yes, I was aware of that after reading one of your earlier posts. I am sitting slightly under 50% of my available code space (on an 18f452), and on top of that the data sending routines are used in a part of the code where speed is preferable (but not critical). To use the fastest method I would have to find out what macros HSEROUT calls, and call them directly somehow.... and the smallest code version would be something along the same lines using gosubs. Anyway if the timing becomes more important or code space is an issue then I will rewrite the macro. But for the meantime, I have improved readability by a large degree. Thanks for the ideas/wisdom guys, it's great to know that there's such a concentrated pool of knowledge in this forum to ask when I have a tough PBP question.....

  7. #7
    forgie's Avatar
    forgie Guest


    Did you find this post helpful? Yes | No

    Red face

    Also.... the macro method makes me feel like my code is more 'modular,' and more like a functional language, which makes me feel warm inside

Similar Threads

  1. PBPro error "Macro USBINIT? not found in macro file"
    By Bonxy in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 4th October 2011, 09:06
  2. Replies: 6
    Last Post: - 4th November 2009, 13:36
  3. Really simple question for you experts :)
    By lew247 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 4th June 2008, 01:43
  4. Please answer my first question
    By John_001 in forum Off Topic
    Replies: 1
    Last Post: - 15th September 2006, 06:49
  5. Passing an array as a macro argument?
    By forgie in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 5th September 2005, 17:09

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