[sdiy] help...no make8() function in Arduino...converting PIC to AVR

dan snazelle subjectivity at hotmail.com
Wed Apr 11 20:20:59 CEST 2012




thanks for everyones help...the #defines definitely worked


plus i understand macros a lot better now!


just noticed the code i am looking at runs on a pic at  32mhz


this means since I am working with an 16mhz AVR, everything will run at half speed!!




On Apr 11, 2012, at 1:35 PM, dan snazelle wrote:

> Ok
> 
> thanks everyone I will now try to absorb this and will also see if the code works!
> 
> very much appreciated
> 
> 
> 
> 
> 
> 
> On Apr 11, 2012, at 1:21 PM, Veronica Merryfield wrote:
> 
>> The pre-processor uses textual substitution to expand macros
>> 
>> #define _mul (al, val) ((int)(((al)*(val))>>8)
>> 
>> used...
>> 
>> tmp2 = _mul (acc2, tmpamt);
>> 
>> becomes...
>> 
>> tmp2 = ((int)(((acc2)*(tmpamt))>>8);
>> 
>> before the compiler proper does it's thing.
>> 
>> 
>> On 2012-04-11, at 10:13 AM, dan snazelle wrote:
>> 
>>> more specifically
>>> 
>>> in a macro
>>> 
>>> 
>>> #define  _mul   (int)( a1*val>>8)
>>> 
>>> 
>>> then when i go in and i do 
>>> 
>>> 
>>> tmp2 = _mul (acc2, tmpamt);
>>> 
>>> how does the define know that acc2=a1 and tmpampt=val??
>>> 
>>> thanks
>>> 
>>> 
>>> On Apr 11, 2012, at 12:57 PM, Olivier Gillet wrote:
>>> 
>>>> There's a cost associated to calling "proper" functions - parameters
>>>> being pushed to the stack or moved to the right register, then a jump,
>>>> the body of the function, a return, and moving the result from the
>>>> output register to whatever register the result should be in. You
>>>> don't want such small things to be functions - and that's probably why
>>>> they were defined as macros in the first place! So you either have to
>>>> define those as macro ; or as inline functions, using something like
>>>> __attribute__((always_inline)) in the declaration. gcc might be smart
>>>> enough to inline them without being forced to do so with the
>>>> __attribute__, but it's not a very good thing to make such
>>>> assumptions.
>>>> 
>>>> Olivier
>>>> 
>>>> On Wed, Apr 11, 2012 at 6:47 PM, dan snazelle <subjectivity at hotmail.com> wrote:
>>>>> ok so if
>>>>> 
>>>>> 
>>>>> make8  = (((var >> (offset*8)) & 0xff)
>>>>> _mul  value = (int)( a1*val1>>8);
>>>>> 
>>>>> 
>>>>> 
>>>>> then since i dont quite understand the parentheses in define I could make 2 functions
>>>>> 
>>>>> 
>>>>> 
>>>>> byte make8(int var, byte offset)
>>>>> {
>>>>> byte result=(((var >> (offset*8)) & 0xff);
>>>>> return result;}
>>>>> 
>>>>> 
>>>>> 
>>>>> and for the other function  (_mul)
>>>>> 
>>>>> 
>>>>> int _mul (byte a1, byte val) {
>>>>> 
>>>>> int result=(int)( a1*val1>>8);
>>>>> return result;
>>>>> }
>>>>> 
>>>>> 
>>>>> 
>>>>> do those look right?
>>>>> 
>>>>> 
>>>>> thanks
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> On Apr 11, 2012, at 12:00 PM, Martin Klang wrote:
>>>>> 
>>>>>> 
>>>>>> what do they do on the pic?
>>>>>> 
>>>>>> make8 I found in the PIC C Compiler Reference:
>>>>>> i8 = MAKE8(var, offset)
>>>>>> Same as: i8 = (((var >> (offset*8)) & 0xff)
>>>>>> 
>>>>>> so that
>>>>>>> tmpbyte1 = make8(tmp1, 1);
>>>>>> 
>>>>>> would be
>>>>>> tmpbyte1 = (tmp1 >> 8) & 0xff;
>>>>>> 
>>>>>> and _mul() multiplies, right?
>>>>>> 
>>>>>> Looks like the code is specifically optimised for the pic instructions set -
>>>>>> tmp1 is 16 bit, right? acc1 and val1 8-bit unsigned integers?
>>>>>> 
>>>>>> Presumably you can replace the two lines with
>>>>>> uint8_t value = (uint8_t)( acc1*val1>>8);
>>>>>> depending on data types, but would have to see some more code to know.
>>>>>> 
>>>>>> 
>>>>>> hth,
>>>>>> 
>>>>>> /m
>>>>>> 
>>>>>> On 11 Apr 2012, at 16:25, dan snazelle wrote:
>>>>>> 
>>>>>>> can someone help me ?
>>>>>>> 
>>>>>>> i am trying to convert some PIC code to AVR
>>>>>>> 
>>>>>>> it is going fine except for 2 things
>>>>>>> 
>>>>>>> there is no make8() function and there is no _mul()
>>>>>>> 
>>>>>>> 
>>>>>>> so code lines like this:
>>>>>>> 
>>>>>>> 
>>>>>>> tmp1 = _mul (acc1, val1);
>>>>>>> 
>>>>>>> tmpbyte1 = make8(tmp1, 1);
>>>>>>> 
>>>>>>> 
>>>>>>> do not work
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> i have been looking for the make8 function online so i can just write that function into my code but no luck
>>>>>>> 
>>>>>>> 
>>>>>>> thanks for any help!
>>>>>> 
>>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Synth-diy mailing list
>>>>> Synth-diy at dropmix.xs4all.nl
>>>>> http://dropmix.xs4all.nl/mailman/listinfo/synth-diy
>>>> 
>>> 
>>> _______________________________________________
>>> Synth-diy mailing list
>>> Synth-diy at dropmix.xs4all.nl
>>> http://dropmix.xs4all.nl/mailman/listinfo/synth-diy
>>> 
>> 
>> 
> 
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at dropmix.xs4all.nl
> http://dropmix.xs4all.nl/mailman/listinfo/synth-diy
> 




More information about the Synth-diy mailing list