EmbeddedRelated.com
Forums
Memfault Beyond the Launch

GNU compiler ERROR/Warnings

Started by chet...@gmail.com September 13, 2007
Hi there,
Iam using Keil uVision3(MDK 3.11) with GNU compiler for my LPC2368 based project.

Iam seeing the following error (undefined reference to '__udivsi3') and warnings( missing braces around initializer) :
Build target 'MCB2300'
assembling Startup.s...
compiling LPC2000_CAN_Driver.c...
src/LPC2000_CAN_Driver.c(72): warning: missing braces around initializer
src/LPC2000_CAN_Driver.c(72): warning: (near initialization for 'CAN_Send_Data[0].DataField')
compiling target.c...
compiling irq.c...
compiling LPC2000_CAN_SYS.c...
linking...
lpc2000_can_sys.o(.text+0x21c): In function 'uart0_config':
src/LPC2000_CAN_SYS.c(225): error: undefined reference to '__udivsi3'
collect2: ld returned 1 exit status
Target not created

The error message points to the code line
"temp_uart0 = (Fpclk/16)/Baudrate; " in the following source code :

void uart0_config(UInt32 Baudrate,UART0MODE U0_config)
{
UInt32 temp_uart0;
U0LCR = 0x80; // DLAB=1, Can use U0DLM, U0DLL
temp_uart0 = (Fpclk/16)/Baudrate;

U0DLM = temp_uart0>>8;
U0DLL = temp_uart0&0xFF;

temp_uart0 = U0_config.Datalength - 5;
if( U0_config.Stopbit == 2 ) temp_uart0 |= 0x04;

if( U0_config.Paritybit != 0 )
{
U0_config.Paritybit = U0_config.Paritybit - 1;
temp_uart0 |= 0x08;
}
temp_uart0 |= U0_config.Paritybit<<4;
U0LCR = temp_uart0;
U0FCR = 0x07;
U0IER = IER_RBR | IER_RLS;
}
The warning points to the following code:

lpc2000CANdriver_TXObj_t CAN_Send_Data[] {{0x00080000,0x00000001,0x12345678,0x12345678},
{0x00080000,0x00000002,0x12345678,0x12345678},
{0x00080000,0x00000347,0x12345678,0x12345678},
{0x00080000,0x000003F1,0x1643F6E5,0xD4C3B2A1}};

I have observed that, in the Linker settings if the
option "Donot use Standard system libraries" is not selected then the error is not reported by the compiler. But, the UART doesnot work.

I have tried out the same program using Real View Compiler and it works fine.

Kindly give me your suggestions.

Thanks in Advance,
Chetan

An Engineer's Guide to the LPC2100 Series

Hi,
Also, I would like to add the following observations

Iam not using printf. Iam using the following routine to print the output on the PC's hyperterminal.
Iam seeing some junk values appear on the hyperterminal.

Print_4bits_to_Screen( (Temp_Data_Output[i] & 0x000000F0)>>4 );
UInt32 Print_4bits_to_Screen( UInt32 Value_Hex_4bits)
{
switch(Value_Hex_4bits)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: U0THR = Value_Hex_4bits + 48; // print "0 - 9"
break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15: U0THR = Value_Hex_4bits + 55; // print "A - F"
break;

case 32:
case 44:
case 45: U0THR = Value_Hex_4bits;
break;
default:
break;
}
while( (U0LSR & 0x20) == 0 );
return(0);
}

So, please I would like to know whether this program is wrong.
Is it that one has to use putchar function for GNU compiler.

Regards,
Chetan

Hi there,
>Iam using Keil uVision3(MDK 3.11) with GNU compiler for my LPC2368 based project.
>
>Iam seeing the following error (undefined reference to '__udivsi3') and warnings( missing braces around initializer) :
>Build target 'MCB2300'
>assembling Startup.s...
>compiling LPC2000_CAN_Driver.c...
>src/LPC2000_CAN_Driver.c(72): warning: missing braces around initializer
>src/LPC2000_CAN_Driver.c(72): warning: (near initialization for 'CAN_Send_Data[0].DataField')
>compiling target.c...
>compiling irq.c...
>compiling LPC2000_CAN_SYS.c...
>linking...
>lpc2000_can_sys.o(.text+0x21c): In function 'uart0_config':
>src/LPC2000_CAN_SYS.c(225): error: undefined reference to '__udivsi3'
>collect2: ld returned 1 exit status
>Target not created
>
>The error message points to the code line
>"temp_uart0 = (Fpclk/16)/Baudrate; " in the following source code :
>
>void uart0_config(UInt32 Baudrate,UART0MODE U0_config)
>{
> UInt32 temp_uart0;
> U0LCR = 0x80; // DLAB=1, Can use U0DLM, U0DLL
> temp_uart0 = (Fpclk/16)/Baudrate;
>
> U0DLM = temp_uart0> > 8;
> U0DLL = temp_uart0&0xFF;
>
> temp_uart0 = U0_config.Datalength - 5;
> if( U0_config.Stopbit == 2 ) temp_uart0 |= 0x04;
>
> if( U0_config.Paritybit != 0 )
> {
> U0_config.Paritybit = U0_config.Paritybit - 1;
> temp_uart0 |= 0x08;
> }
> temp_uart0 |= U0_config.Paritybit <
Looks like the baud rate is set wrong on the LPC CPU

Regards

Jean-Jacques

--- In l..., chetanrp@... wrote:
>
> Hi,
> Also, I would like to add the following observations
>
> Iam not using printf. Iam using the following routine to print the
output on the PC's hyperterminal.
> Iam seeing some junk values appear on the hyperterminal.
>
> Print_4bits_to_Screen( (Temp_Data_Output[i] & 0x000000F0)>>4 );
> UInt32 Print_4bits_to_Screen( UInt32 Value_Hex_4bits)
> {
> switch(Value_Hex_4bits)
> {
> case 0:
> case 1:
> case 2:
> case 3:
> case 4:
> case 5:
> case 6:
> case 7:
> case 8:
> case 9: U0THR = Value_Hex_4bits + 48; // print "0 - 9"
> break;
> case 10:
> case 11:
> case 12:
> case 13:
> case 14:
> case 15: U0THR = Value_Hex_4bits + 55; // print "A - F"
> break;
>
> case 32:
> case 44:
> case 45: U0THR = Value_Hex_4bits;
> break;
> default:
> break;
> }
> while( (U0LSR & 0x20) == 0 );
> return(0);
> }
>
> So, please I would like to know whether this program is wrong.
> Is it that one has to use putchar function for GNU compiler.
>
> Regards,
> Chetan
>
>
>
> Hi there,
> >Iam using Keil uVision3(MDK 3.11) with GNU compiler for my LPC2368
based project.
> >
> >Iam seeing the following error (undefined reference
to '__udivsi3') and warnings( missing braces around initializer) :
> >Build target 'MCB2300'
> >assembling Startup.s...
> >compiling LPC2000_CAN_Driver.c...
> >src/LPC2000_CAN_Driver.c(72): warning: missing braces around
initializer
> >src/LPC2000_CAN_Driver.c(72): warning: (near initialization
for 'CAN_Send_Data[0].DataField')
> >compiling target.c...
> >compiling irq.c...
> >compiling LPC2000_CAN_SYS.c...
> >linking...
> >lpc2000_can_sys.o(.text+0x21c): In function 'uart0_config':
> >src/LPC2000_CAN_SYS.c(225): error: undefined reference
to '__udivsi3'
> >collect2: ld returned 1 exit status
> >Target not created
> >
> >The error message points to the code line
> >"temp_uart0 = (Fpclk/16)/Baudrate; " in the following source code :
> >
> >void uart0_config(UInt32 Baudrate,UART0MODE U0_config)
> >{
> > UInt32 temp_uart0;
> > U0LCR = 0x80; // DLAB=1, Can use U0DLM, U0DLL
> > temp_uart0 = (Fpclk/16)/Baudrate;
> >
> > U0DLM = temp_uart0> > 8;
> > U0DLL = temp_uart0&0xFF;
> >
> > temp_uart0 = U0_config.Datalength - 5;
> > if( U0_config.Stopbit == 2 ) temp_uart0 |= 0x04;
> >
> > if( U0_config.Paritybit != 0 )
> > {
> > U0_config.Paritybit = U0_config.Paritybit - 1;
> > temp_uart0 |= 0x08;
> > }
> > temp_uart0 |= U0_config.Paritybit <
>
Dear Jean-Jacques,

Yes you are correct. Thank You.
I have set right the baud rate in the startup file.
Now it's working fine.

Regards,
Chetan

On 9/13/07, jdauchot wrote:
>
> Looks like the baud rate is set wrong on the LPC CPU
>
> Regards
>
> Jean-Jacques
> --- In l... , chetanrp@...
> wrote:
> >
> > Hi,
> > Also, I would like to add the following observations
> >
> > Iam not using printf. Iam using the following routine to print the
> output on the PC's hyperterminal.
> > Iam seeing some junk values appear on the hyperterminal.
> >
> > Print_4bits_to_Screen( (Temp_Data_Output[i] & 0x000000F0)>>4 );
> >
> >
> > UInt32 Print_4bits_to_Screen( UInt32 Value_Hex_4bits)
> > {
> > switch(Value_Hex_4bits)
> > {
> > case 0:
> > case 1:
> > case 2:
> > case 3:
> > case 4:
> > case 5:
> > case 6:
> > case 7:
> > case 8:
> > case 9: U0THR = Value_Hex_4bits + 48; // print "0 - 9"
> > break;
> > case 10:
> > case 11:
> > case 12:
> > case 13:
> > case 14:
> > case 15: U0THR = Value_Hex_4bits + 55; // print "A - F"
> > break;
> >
> > case 32:
> > case 44:
> > case 45: U0THR = Value_Hex_4bits;
> > break;
> > default:
> > break;
> > }
> > while( (U0LSR & 0x20) == 0 );
> > return(0);
> > }
> >
> > So, please I would like to know whether this program is wrong.
> > Is it that one has to use putchar function for GNU compiler.
> >
> > Regards,
> > Chetan
> >
> >
> >
> > Hi there,
> > >Iam using Keil uVision3(MDK 3.11) with GNU compiler for my LPC2368
> based project.
> > >
> > >Iam seeing the following error (undefined reference
> to '__udivsi3') and warnings( missing braces around initializer) :
> > >Build target 'MCB2300'
> > >assembling Startup.s...
> > >compiling LPC2000_CAN_Driver.c...
> > >src/LPC2000_CAN_Driver.c(72): warning: missing braces around
> initializer
> > >src/LPC2000_CAN_Driver.c(72): warning: (near initialization
> for 'CAN_Send_Data[0].DataField')
> > >compiling target.c...
> > >compiling irq.c...
> > >compiling LPC2000_CAN_SYS.c...
> > >linking...
> > >lpc2000_can_sys.o(.text+0x21c): In function 'uart0_config':
> > >src/LPC2000_CAN_SYS.c(225): error: undefined reference
> to '__udivsi3'
> > >collect2: ld returned 1 exit status
> > >Target not created
> > >
> > >The error message points to the code line
> > >"temp_uart0 = (Fpclk/16)/Baudrate; " in the following source code :
> > >
> > >void uart0_config(UInt32 Baudrate,UART0MODE U0_config)
> > >{
> > > UInt32 temp_uart0;
> > > U0LCR = 0x80; // DLAB=1, Can use U0DLM, U0DLL
> > > temp_uart0 = (Fpclk/16)/Baudrate;
> > >
> > > U0DLM = temp_uart0> > 8;
> > > U0DLL = temp_uart0&0xFF;
> > >
> > > temp_uart0 = U0_config.Datalength - 5;
> > > if( U0_config.Stopbit == 2 ) temp_uart0 |= 0x04;
> > >
> > > if( U0_config.Paritybit != 0 )
> > > {
> > > U0_config.Paritybit = U0_config.Paritybit - 1;
> > > temp_uart0 |= 0x08;
> > > }
> > > temp_uart0 |= U0_config.Paritybit <
> >
>
Ok

But did you find out about the problem with the linker undefined
reference '__udivsi3' as I have the same problem

Regards

Jean-Jacques

--- In l..., "C RP" wrote:
>
> Dear Jean-Jacques,
>
> Yes you are correct. Thank You.
> I have set right the baud rate in the startup file.
> Now it's working fine.
>
> Regards,
> Chetan
>
> On 9/13/07, jdauchot wrote:
> >
> > Looks like the baud rate is set wrong on the LPC CPU
> >
> > Regards
> >
> > Jean-Jacques
> >
> >
> > --- In l... ,
chetanrp@
> > wrote:
> > >
> > > Hi,
> > > Also, I would like to add the following observations
> > >
> > > Iam not using printf. Iam using the following routine to print
the
> > output on the PC's hyperterminal.
> > > Iam seeing some junk values appear on the hyperterminal.
> > >
> > > Print_4bits_to_Screen( (Temp_Data_Output[i] & 0x000000F0)>>4 );
> > >
> > >
> > > UInt32 Print_4bits_to_Screen( UInt32 Value_Hex_4bits)
> > > {
> > > switch(Value_Hex_4bits)
> > > {
> > > case 0:
> > > case 1:
> > > case 2:
> > > case 3:
> > > case 4:
> > > case 5:
> > > case 6:
> > > case 7:
> > > case 8:
> > > case 9: U0THR = Value_Hex_4bits + 48; // print "0 - 9"
> > > break;
> > > case 10:
> > > case 11:
> > > case 12:
> > > case 13:
> > > case 14:
> > > case 15: U0THR = Value_Hex_4bits + 55; // print "A - F"
> > > break;
> > >
> > > case 32:
> > > case 44:
> > > case 45: U0THR = Value_Hex_4bits;
> > > break;
> > > default:
> > > break;
> > > }
> > > while( (U0LSR & 0x20) == 0 );
> > > return(0);
> > > }
> > >
> > > So, please I would like to know whether this program is wrong.
> > > Is it that one has to use putchar function for GNU compiler.
> > >
> > > Regards,
> > > Chetan
> > >
> > >
> > >
> > > Hi there,
> > > >Iam using Keil uVision3(MDK 3.11) with GNU compiler for my
LPC2368
> > based project.
> > > >
> > > >Iam seeing the following error (undefined reference
> > to '__udivsi3') and warnings( missing braces around initializer) :
> > > >Build target 'MCB2300'
> > > >assembling Startup.s...
> > > >compiling LPC2000_CAN_Driver.c...
> > > >src/LPC2000_CAN_Driver.c(72): warning: missing braces around
> > initializer
> > > >src/LPC2000_CAN_Driver.c(72): warning: (near initialization
> > for 'CAN_Send_Data[0].DataField')
> > > >compiling target.c...
> > > >compiling irq.c...
> > > >compiling LPC2000_CAN_SYS.c...
> > > >linking...
> > > >lpc2000_can_sys.o(.text+0x21c): In function 'uart0_config':
> > > >src/LPC2000_CAN_SYS.c(225): error: undefined reference
> > to '__udivsi3'
> > > >collect2: ld returned 1 exit status
> > > >Target not created
> > > >
> > > >The error message points to the code line
> > > >"temp_uart0 = (Fpclk/16)/Baudrate; " in the following source
code :
> > > >
> > > >void uart0_config(UInt32 Baudrate,UART0MODE U0_config)
> > > >{
> > > > UInt32 temp_uart0;
> > > > U0LCR = 0x80; // DLAB=1, Can use U0DLM, U0DLL
> > > > temp_uart0 = (Fpclk/16)/Baudrate;
> > > >
> > > > U0DLM = temp_uart0> > 8;
> > > > U0DLL = temp_uart0&0xFF;
> > > >
> > > > temp_uart0 = U0_config.Datalength - 5;
> > > > if( U0_config.Stopbit == 2 ) temp_uart0 |= 0x04;
> > > >
> > > > if( U0_config.Paritybit != 0 )
> > > > {
> > > > U0_config.Paritybit = U0_config.Paritybit - 1;
> > > > temp_uart0 |= 0x08;
> > > > }
> > > > temp_uart0 |= U0_config.Paritybit <
> > >
> >
> >
> >
>
>
--- In l..., "jdauchot" wrote:
>
> Ok
>
> But did you find out about the problem with the linker undefined
> reference '__udivsi3' as I have the same problem
>
> Regards
>
> Jean-Jacques
>

Try searching the forum for "udivsi3" and you should get some answers.

Brendan
Hi Jean,

Sorry, forgot to mention that. Yes, the error "__udivsi3" got debugged
.
Under the Linker Options , uncheck the option "Donot use Standard System
Libraries".

But, iam still unable to debug the warnings.

Cheers,
Chetan

On 9/13/07, Brendan Murphy wrote:
>
> --- In l... , "jdauchot"
> wrote:
> >
> > Ok
> >
> > But did you find out about the problem with the linker undefined
> > reference '__udivsi3' as I have the same problem
> >
> > Regards
> >
> > Jean-Jacques
> > Try searching the forum for "udivsi3" and you should get some answers.
>
> Brendan
>
>
>
Hi All

I still have a problem to resolve "__udivsi3"

I use Eclipse and GNU tool chain

Regards
Jean-Jacques

--- In l..., "C RP" wrote:
>
> Hi Jean,
>
> Sorry, forgot to mention that. Yes, the error "__udivsi3" got
debugged
> .
> Under the Linker Options , uncheck the option "Donot use Standard
System
> Libraries".
>
> But, iam still unable to debug the warnings.
>
> Cheers,
> Chetan
>
> On 9/13/07, Brendan Murphy wrote:
> >
> > --- In l...
40yahoogroups.com>, "jdauchot"
> > wrote:
> > >
> > > Ok
> > >
> > > But did you find out about the problem with the linker undefined
> > > reference '__udivsi3' as I have the same problem
> > >
> > > Regards
> > >
> > > Jean-Jacques
> > >
> >
> > Try searching the forum for "udivsi3" and you should get some
answers.
> >
> > Brendan
> >
> >
> >
>
>
--- In l..., "jdauchot" wrote:
>
> Hi All
>
> I still have a problem to resolve "__udivsi3"
>
> I use Eclipse and GNU tool chain
>
> Regards
> Jean-Jacques

Did you search the forum for "udivsi3" as I suggested?
hello again,

stupid me, used 30 mhz instead of 20.
so, you calculation is right, mine is wrong.

sorry for the fuzz...

greets,

chris

Memfault Beyond the Launch