Re: Some issues with array of pointers to functions

Royce Pereira <[email protected]>
Newsgroups gmane.comp.hardware.avr.gcc
Message-ID <CACzHknhC0HADhdSvym4N=wP80G1Om93LtJOxGqF1o6N8Ois_Cg@mail.gmail.com>
Thank you, Georg-Johann,

I will try this and report. :)

On Mon, Jun 16, 2014 at 3:19 PM, Georg-Johann Lay <[email protected]> wrote:
> Am 06/13/2014 12:06 PM, schrieb Royce Pereira:
>
>> Hi all,
>>
>> Continuing with the latest avr-gcc, and playing with the new '__flash'
>> qualifier, I'm facing some new warnings, not seen before.
>>
>> I have this:
>> //===================
>> void func1(void)
>>     {
>>        //........
>>     }
>> //===================
>> void func2(void)
>>     {
>>        //........
>>     }
>> //===================
>> void func3(void)
>>     {
>>        //........
>>     }
>> //===================
>>
>> __flash void (*funcArray[])(void) = { func1, func2, func3 } ;
>>
>> //====================
>> unsigned char funcNo;
>>
>> int main(void)
>>      {
>>         //...code that sets 'funcNo'
>>
>>         (funcArray[funcNo])() ;  //call the desired function from the
>> array.
>>
>>         return 0 ;
>>      }
>> //============================
>> /*
>> No error is thrown and the code runs fine on the target board too.
>>
>> But I get the following warnings, and I don't know why :
>>
>> warning: initialization from incompatible pointer type [enabled by
>> default]
>> { func1, func2, func3 } ;
>>    ^
>>
>> warning: (near initialization for 'funcArray[0]') [enabled by default]
>> warning: initialization from incompatible pointer type [enabled by
>> default]
>> warning: (near initialization for 'funcArray[1]') [enabled by default]
>> warning: initialization from incompatible pointer type [enabled by
>> default]
>> warning: (near initialization for 'funcArray[2]') [enabled by default]
>> warning: initialization from incompatible pointer type [enabled by
>> default]
>>
>>   In function 'main':
>> warning: function with qualified void return type called [enabled by
>> default]
>>      (funcArray[funcNo])() ;
>
>
> Your functions are of prototype "void (*)(void)", not of "void (*)()".
>
> And the return type is "void", not "__flash void"; avr-gcc throws a
> diagnostic on this.
>
> If you want to put the array in flash, then put funcArray in flash:
>
> void func1 (void) {}
> void func2 (void) {}
> void func3 (void) {}
>
> void (* const __flash funcArray[])(void) = { func1, func2, func3 } ;
>
> void run (unsigned char funcNo)
> {
>     funcArray[funcNo] ();
> }
>
>
> Johann
>



-- 
Best Regards,

-- Royce Pereira
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.