csb337 compile problem

Joel Sherrill <joel@OARcorp.com> joel.sherrill at OARcorp.com
Wed Nov 3 12:21:55 UTC 2004


Ralf Corsepius wrote:
> On Wed, 2004-11-03 at 06:44, Lars Munch wrote:
> 
>>On Tue, Nov 02, 2004 at 03:58:28PM -0600, Joel Sherrill <joel at OARcorp.com> wrote:
>>
>>>Delete "#include <bsp.h>" in rtc/mc146818a.c.  It isn't supposed
>>>to need that file.
> 
> 
>>So I guess my quick fix to this problem (see previous post) was valid
>>enough?
> 
> 
> Well, you only have worked around one problem, which might be sufficient
> in your case, but there is more to it:
> 
> 
>>>From your previous mail:
> 
> 
> ../../../csb337/lib/include/libchip/serial.h:25: conflicting types for
> `getRegister_f'
> ../../../csb337/lib/include/libchip/rtc.h:22: previous declaration of
> `getRegister_f'
> 
> I.e. both headers declare "getRegister_f" and disagree about it.
> => We have an API problem here. Either both types should be made
> namespace safe (e.g. prefixed by an appropriate string
> "serial_getRegister_f"), or a general API should be implemented.
> 
> IMO, in this case only the first approach makes sense.
> 
> 
>>  I guess you also need to delete it in rtc/mc146818a_ioreg.c
>>then.
> 
> 
> Well, rtc/mc146818a_ioreg.c is subject to yet another problem.
> 
> It uses 2 functions, "input_byte" and "output_byte", which currently are
> not covered by any (internal or external) RTEMS API (i.e. they are not
> declared by any cpu/bsp-independent header)
> 
> ATM, these 2 functions are only provided for few BSPs:
> # find . -name '*.h' -exec grep -H inport_byte {} \;
> ./c/src/lib/libbsp/powerpc/motorola_powerpc/include/bsp.h:#define
> inport_byte(port,value) (value = inb(port))
> ./c/src/lib/libbsp/powerpc/ppcn_60x/console/vga_p.h:   
> inport_byte(0x3c5, val)
> ./c/src/lib/libbsp/powerpc/ppcn_60x/console/vga_p.h:           
> inport_byte(0x3da, ucDummy); \
> ./c/src/lib/libbsp/powerpc/ppcn_60x/include/bsp.h:#define
> inport_byte(port, val\./c/src/lib/libcpu/i386/cpu.h:#define
> i386_inport_byte( _port, _value ) \
> ./cpukit/score/cpu/i386/rtems/score/i386.h:#define inport_byte( _port,
> _value )  i386_inport_byte( _port, _value )
> 
> I.e. ATM rtc/mc146818a_ioreg.c violates RTEMS's APIs, and relies on BSPs
> providing these 2 functions (IMO, this file should have never been added
> to libchip :-) ). 
> 
> So, for the moment the only way to get this file functional for those
> BSPs actually providing the 2 functions is to "include <bsp.h>". For
> those BSPs not providing these 2 functions, you'll see a several
> compiler warning and get non-function objects.
> 
> 
>> Could yo please apply this to cvs?
> 
> I'll remove <bsp.h> from mc146818a.c, but not from mc146818a_ioreg.c. 
> 
> mc146818a_ioreg.c need a fundamental redesign, either of its API or the
> BSPs using it.

I thought about this issue while looking at the include issue.  I think
it would be best to move it to libbsp/shared and make it compiled only
by the pc386 and motorola_shared BSP (as part of TOD).

in/out byte are not going to be part of the general RTEMS API any time
soon.

I would ignore the ppcn_60x.  It is on my deprecation list for 4.7 
unless a volunteer shows up.

How does that sound?

> Ralf
> 
> 


-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel at OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
    Support Available             (256) 722-9985




More information about the users mailing list