[U-Boot] [PATCH v2 13/22] omap4: add clock support
Aneesh V
aneesh at ti.com
Tue Jun 21 11:08:46 CEST 2011
On Tuesday 21 June 2011 01:50 PM, Wolfgang Denk wrote:
> Dear Aneesh,
>
> In message<4E00447B.9070804 at ti.com> you wrote:
>>
>> $ gcc main.c
>> main.c:5: error: initializer element is not constant
>> main.c:5: error: (near initialization for ‘arr[0]’)
>> main.c:7: error: initializer element is not constant
>> main.c:7: error: (near initialization for ‘arr[1]’)
>
> I have to admit that I don't understand either why this error is
> raised here; after all, from our understanding of the code these _are_
> constant addresses.
>
> You may want to ask this in a compiler group...
Yes. I will.
>
>> As a result, I will have to do something like this to populate my
>> array:
>>
>> static unsigned int *const reg_arr[] = {
>> &(((struct my_regs_struct *const)OMAP4_PRCM_REG_BASE)->uart_clkctrl),
>> &(((struct my_regs_struct *const)OMAP4_PRCM_REG_BASE)->i2c_clkctrl),
>> };
>>
>> Is this acceptable?
>
> No, please don't.
>
> Note that the following code compiles fine:
>
> ----------------------------- snip -----------------------------
> #include<stdio.h>
>
> struct my_regs_struct {
> unsigned int reg1;
> unsigned int reg2;
> unsigned int reg3;
> };
>
> static struct my_regs_struct *const my_regs = (struct my_regs_struct *) 0x1000;
>
> static void print_regs(void)
> {
> unsigned int *const reg_arr[] = {
> &my_regs->reg1,
> &my_regs->reg3,
> };
> printf("regs %p %p \n", (void *)reg_arr[0], (void *)reg_arr[1]);
> }
In my function I am using 3 such arrays with quite a few entries in
them. Won't it look ugly besides increasing the stack footprint.
Of course, I can try to break them down to different functions, if need
be.
Or, how about using a utility macro and make it look better like this:
#define OMAP4_PRCM_REG_ADDR(reg)\
(&(((struct my_regs_struct *)OMAP4_PRCM_BASE)->reg))
static unsigned int *const reg_arr[] = {
OMAP4_PRCM_REG_ADDR(uart_clkctrl),
OMAP4_PRCM_REG_ADDR(i2c_clkctrl)
};
This one doesn't generate any warning even with 'gcc -Wall -pedantic'.
Are you not comfortable with getting the address in this manner at all?
best regards,
Aneesh
More information about the U-Boot
mailing list