Celso Labinaz <labinaz@tin.it> pointed to me thatthe console on serial
line was not working. After spending quite a time to find the right
cable and software, I confirm this.
I'm going to debug this in the next days because I want to use the
serial line for debugging. In the meantime, in order to be sure that
this was a driver initialization/bug, I made printk work on the serial
line in order to be sure the receiver part and configuration was OK.
Here is the for printk on serial line. BTW, does anyone else use the
serial line facilities for PC? printf seems to output nothing (hello.exe
output everything that has a printk but application printf seems to be
broken).
The patch (rtems-rc-980821.diff) I had sent recently to fix the "make
install" problem in rtems-980821/make/ still contained a bug (Thanks to
Eric N. for reporting it).
The patch enclosed to this mail is a corrected version of this patch,
which finally should fix this problem.
Here is another patch to hopefully enhance rtems' configuration.
Motivation: Try to support other c-compilers besides gcc (I tried to
build rtems under Solaris using sun's WSPro c-compiler).
Here is a couple of small patches concerning the host compiler
configuration, which fix/work-around the worst problems when using sun's
WSPro c-compiler.
Changes:
* Replaced make/compilers/gcc.cfg with make/compilers/gcc.cfg.in, ie.
gcc.cfg is generated by configure now.
* Removed a line containing a hard-coded "gcc" from gcc.cfg (BUG-fix).
* Add -g to host compiler flags only if configure reported -g to work
* Add -Wall to host compiler flags only if configure reported that the
host compiler is gcc (WSPro's cc chokes on -Wall).
* Some modifications to make/Makefile.in
* Adapted make/custom/default.cfg to the new location of gcc.cfg
BTW, gcc.cfg/gcc.cfg.in seems to be full of unused code (DEBUG-VARIANTS
etc.) which deserves to be cleaned up, IMO.
IMO, a similar patch should be applied to gcc-target-default.cfg
Here is a patch that enables to catch exception
and get message before crashing RTEMS :)
It should be generic to any Intel port although enabled
only for pc386 BSP...
[Joel] I fixed the bug I introduced in irq_asm.s...
"Thomas Doerfler" <td@imd.m.isar.de> wrote:
>
> While implementing/testing the console/termios support for
> PPC403 in RTEMS-4.0.0-beta3, I am stuck at a certain location in
> termios.c:
>
> During "rtems_termios_initialize", the main control data structure
> "*tty" is allocated using malloc(). (Note, that malloc does not
> clear the allocated memory and my BSP does not clear memory during
> startup). Furtheron, a lot of fields of that structure are
> initialized, but the field "rawOutBufState" is not, and therefore
> keeps an arbitrary contents.
>
> When "osend()" is called the first time(with the serial device
> driver working in interrupt mode), termios gets stuck and will not
> call the device drivers output function.
>
> My questions now are:
>
> - anybody already experienced this bug?
> - is it a bug at all or did I do anything fundamentally wrong?
> - is there already a common bugfix for that?
>
> I don't like poking around in other people code, as long as I am
> not absolutely sure, what I do...
Yes, there's a bug there.
I thought that Joel had patched this already, but here's a patch to
fix this. This patch also addresses a concern that many others have
raised regarding enabling and disabling of transmitter interrupts.
First, here's the example I've been using of a simple UART-style
interrupt-driven driver:
===============================================================
void
device_write_routine (int minor, char *buf, int count)
{
UART->control_register &= ~UART_TRANSMITTER_READY;
UART->output_register = *buf;
UART->control_register |= UART_TRANSMIT_INTERRUPT_ENABLE;
}
void
device_transmit_interrupt_routine (int vector)
{
UART->control_register &= ~UART_TRANSMIT_INTERRUPT_ENABLE;
rtems_termios_dequeue_characters (device_ttyp, 1);
}
==============================================================
Several people have expressed their concern about the disable/enable
of transmitter interrupts for every character. On some machines
this disable/enable is an expensive operation. With the attached
patch applied you can write the two routines as:
==============================================================
void
device_write_routine (int minor, char *buf, int count)
{
code_to_clear_transmitter_ready_status ();
if (device_ttyp->rawOutBufState == rob_idle)
code_to_enable_transmitter_interrupts ();
code_to_send_one_character_to_transmitter (*buf);
}
void
device_transmit_interrupt_routine (int vector)
{
rtems_termios_dequeue_characters (device_ttyp, 1);
if (device_ttyp->rawOutBufState == rob_idle)
code_to_disable_transmitter_interrupts ();
}
===============================================================