|
|
View previous topic :: View next topic |
Author |
Message |
Stumped Guest
|
Undefined identifier fgetc |
Posted: Wed Jul 05, 2006 8:39 am |
|
|
Guys...help...
PIC16C73B (soon to be PIC16F73)
Two serial ports...
I can send data out to each port.
I see data arriving back at the receive pins.
Can't capture this in code.
When I try to use fgetc( stream ), the compiler bombs...what am I missing?
Code: |
#use rs232(baud=4800, xmit=PIN_A3, rcv=PIN_A2, STREAM=DBG)
#use rs232(baud=4800, xmit=PIN_C7, rcv=PIN_C6, STREAM=MDM)
<SNIP>
BYTE boGotFirstModemRespChar( unsigned long ulTimeoutSecs, unsigned char ucExpectedPacketType )
{
unsigned long ulModemRespTimeout10Us;
BYTE boGotFirstChar;
BYTE boWaitingForPcktHdr;
unsigned char ucChar;
unsigned long ulTimeout;
boWaitingForPcktHdr = true;
boGotFirstChar = FALSE;
ulTimeout = ulTimeoutSecs;
fprintf( DBG, "Waiting for response from modem\r\n" ); [color=red]THIS WORKS FINE[/color]
while ( boWaitingForPcktHdr == true )
{
ulModemRespTimeout10Us = 0;
while( !kbhit( MDM ) && (ulModemRespTimeout10Us < 100000 ))
{
delay_us( 10 );
ulModemRespTimeout10Us++;
}
if ( kbhit( MDM ) )
{
fprintf( DBG, "Something on the rcv buffer\r\n" );
ucChar = fgetc( MDM ); [color=red]THIS FAILS TO COMPILE[/color]
fprintf( DBG, "%X", ucChar );
if( ucChar == PKT_HEADER )
{
if( fgetc( MDM ) == ucExpectedPacketType )
{
boGotFirstChar = true;
boWaitingForPcktHdr = False;
}
}
}
ulTimeout--;
if(ulTimeout == 0)
{
boGotFirstChar = FALSE;
boWaitingForPcktHdr = false;
}
}
fprintf( DBG, "\r\n" );
return boGotFirstChar;
}
|
If I compile with fgetc( MDM ), I get Undefined Identifier fgetc
If I replace fgetc( stream ) with getc( stream ), the program compiles but I can't capture received data...probably because getc doesn't take a stream parameter?
I've tried swapping the orders of the #use directives...no joy.
Any help greatly appreciated. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Wed Jul 05, 2006 9:31 am |
|
|
Replace this:
#use rs232(baud=4800, xmit=PIN_C7, rcv=PIN_C6, STREAM=MDM)
for this:
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, STREAM=MDM)
Humberto |
|
|
Stumped Guest
|
RE: Undefined identifier fgetc |
Posted: Wed Jul 05, 2006 9:57 am |
|
|
Humberto wrote: | Replace this:
#use rs232(baud=4800, xmit=PIN_C7, rcv=PIN_C6, STREAM=MDM)
for this:
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, STREAM=MDM)
Humberto |
I have pinned out the connections correctly. As I mentioned, I can see data transmitted over each serial line thru hyperterminal. When sending data back, I see activity on the correct rcv pin on the PIC. |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1635 Location: Perth, Australia
|
Re: RE: Undefined identifier fgetc |
Posted: Wed Jul 05, 2006 10:02 am |
|
|
Stumped wrote: | Humberto wrote: | Replace this:
#use rs232(baud=4800, xmit=PIN_C7, rcv=PIN_C6, STREAM=MDM)
for this:
#use rs232(baud=4800, xmit=PIN_C6, rcv=PIN_C7, STREAM=MDM)
Humberto |
I have pinned out the connections correctly. As I mentioned, I can see data transmitted over each serial line thru hyperterminal. When sending data back, I see activity on the correct rcv pin on the PIC. |
I think you mean you have set the use statement to match your hardware configuration however you are forcing the compiler to use software uart emulation because you have transposed the transmit and receive pins with respect to the hardware UART pin assignments.
Because you are using the software UART you must be calling kbhit(MDM) at least 10 times the bit rate. You did not mention the clock rate you are using for the PICs. Taking into account the clock rate and the delay you have inserted in the loop you may be missing characters.
I do not now why the code does not compile - there may be some reason outside the section you have listed. _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!!
Last edited by asmallri on Wed Jul 05, 2006 10:10 am; edited 1 time in total |
|
|
Ttelmah Guest
|
|
Posted: Wed Jul 05, 2006 10:05 am |
|
|
The point being made by Humberto, is that you are using software serial on both ports. You have the wiring wrong, to use the hardware UART, and the compiler will simply substitute a software UART for this. Unfortunately, there will be no warning that this is happening. As such, it means that only one stream will ever work at a time, there will be no hardware buffering, etc. etc.. This reduces massively, the chances of getting code to work, trying to do multiple things...
Best Wishes |
|
|
Stumped Guest
|
Thanks |
Posted: Wed Jul 05, 2006 3:38 pm |
|
|
Ttelmah wrote: | The point being made by Humberto, is that you are using software serial on both ports. You have the wiring wrong, to use the hardware UART, and the compiler will simply substitute a software UART for this. Unfortunately, there will be no warning that this is happening. As such, it means that only one stream will ever work at a time, there will be no hardware buffering, etc. etc.. This reduces massively, the chances of getting code to work, trying to do multiple things...
Best Wishes |
Thanks to all above.
As we're going through a SIPEX 233 chip, there's not much can be done except respin the pcb's.
Thanks again...stooopid mistake.
PS. Apologies Humberto if I sounded terse. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Wed Jul 05, 2006 4:10 pm |
|
|
Stumped, all is ok.
We have a phrase in Spanish: "to the best hunter, the hare escapes to him".
I thought that as soon you read my advice you will realize what was going on.
Anyway IMO you not only need to "respin the pcb's" as you says but also to rewrite your code.
1) You do not need while( !kbhit( MDM )....
2) Instead you will need a short INT_RDA handler. To use ucChar = fgetc( MDM );
3) You would use fprintf( DBG, "%X", ucChar); only in main.
Humberto |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|