Hello again :)
I finally found the solution to my problem:
I declared a FIFO handler in the Relatime part of my application, and when
it was receiving configuration data and tried to set up the IO-Card
something failed. Which lead to a segmentation fault message in my
configuration program and a kernel dump with the name and pid of the config
program, so I was looking at the wrong place for the bug :(
Conclusion: Don't trust any error messages, but put some trace messages in
your realtime module so you know whats happening ....
Happy coding,
Marco
> -----Ursprüngliche Nachricht-----
> Von: [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED]]
> Gesendet am: Freitag, 15. September 2000 10:04
> An: [EMAIL PROTECTED]
> Betreff: [rtl] RTAI 1.4/FIFO problem
>
> Hello all,
>
> I have some strange effects when writing to FIFOs from user space with
> write(). When I am trying to write my data(a struct) to the FIFO, I get a
> segmentation fault.
>
> I got around this by doing
>
> memset (&cfg, 0, sizeof (CONFIG_DATA));
>
> at the beginning of the function. How can this be ? I thought the data I
> pass to write is handled like a buffer with n Bytes, but if seg fault
> happens, somebody has to be interpreting something here ?
>
> I put some pieces of code below. Maybe somebody can tell me whats wrong
> here, if not, i'll just do my memset :).
>
> Thanks in advance,
>
> Marco Schwarz.
>
>
>
> The function that looks like follows:
>
> int rtc_config_add_card (int nIfNr, int nBusType, int nPCIBus, int
> nPCISlot,
> int nDeviceID, int nVendorID, int nRefreshTime,
>
> RTC_RETURN *ret)
> {
> CONFIG_DATA cfg;
> int nBytesRead, nBytesSent;
>
> /* Segmentation fault if not set to 0 !!! */
> memset (&cfg, 0, sizeof (CONFIG_DATA));
>
> cfg.nConfigAction = CA_ADD_CARD;
> cfg.nIfNr = nIfNr;
> cfg.nBusType = nBusType;
> cfg.nPCIBus = nPCIBus;
> cfg.nPCISlot = nPCISlot;
> cfg.nDeviceID = nDeviceID;
> cfg.nVendorID = nVendorID;
> cfg.nRefreshTime = nRefreshTime;
>
> printf ("\nADD_CARD\n");
> printf ("cfg.nIfNr: %d\n",cfg.nIfNr);
> printf ("cfg.nBusTyp: %d\n",cfg.nBusType);
> printf ("cfg.nPCIBus: %d\n",cfg.nPCIBus);
> printf ("cfg.nPCISlot: %d\n",cfg.nPCISlot);
> printf ("cfg.nDeviceID: %x\n",cfg.nDeviceID);
> printf ("cfg.nVendorID: %x\n",cfg.nVendorID);
> printf ("cfg.nRefreshTime: %d\n",cfg.nRefreshTime);
>
> nBytesSent = write(nConfigSendFIFO, &cfg, sizeof(CONFIG_DATA));
> nBytesRead = read(nConfigReceiveFIFO, ret, sizeof(RTC_RETURN));
>
> if (nBytesRead == sizeof (CONFIG_DATA))
> return 0;
> else
> return -1;
> }
>
> Structure definition:
>
> typedef struct
> {
> /* Allg. Teil */
> int nConfigAction;
>
> /* Kartenkonfiguration */
> int nIfNr;
> int nBusType;
> int nPCIBus;
> int nPCISlot;
> int nDeviceID;
> int nVendorID;
> int nRefreshTime;
>
> /* Signalkonfiguration */
> int nSigNr;
> int nSigType;
> int nSigVM;
> int nSigVMGrad;
> int nSigVI;
> int nSigVIInc;
> int nConvPar;
> float fRangeMax;
> float fRangeMin;
> } CONFIG_DATA;
>
>
> -- [rtl] ---
> To unsubscribe:
> echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
> echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
> ---
> For more information on Real-Time Linux see:
> http://www.rtlinux.org/rtlinux/
-- [rtl] ---
To unsubscribe:
echo "unsubscribe rtl" | mail [EMAIL PROTECTED] OR
echo "unsubscribe rtl <Your_email>" | mail [EMAIL PROTECTED]
---
For more information on Real-Time Linux see:
http://www.rtlinux.org/rtlinux/