Thanks everyone for the feedback on the terminal programs. New problem with crossworks. I'm trying to redefine __putchar() to send out the SPI port, instead of to the virtual terminal. So according to the instructions, I should just be able to redirect the linker to use my function instead of the __putchar() function, right? I did this: -D___putchar=_my_putchar in the additional linker options. This should utilize my_putchar() instead of the standard one, right? However, when I compile, I get a duplicate __printchar error now. Any ideas? Is there a better way to do this? -Micah
Okay, now crossworks question
Started by ●March 31, 2006
Reply by ●March 31, 20062006-03-31
Hello Micah, Simply use the __putchar() function with the same prototype as in the library, and your own __putchar() code will be linked in, instead of the Library code. You _must_ use the same prototype to have your own function linked in ie. int __putchar (int); If you're using SPI, just return the parameter you were called with : int __putchar (int spi_data) { //.... do your SPI stuff return (spi_data); } If there's an error you can elect to return EOF or IOW (-1) B rgds Kris -----Original Message----- From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah Sent: Saturday, 1 April 2006 9:25 AM To: msp430@msp4... Subject: [msp430] Okay, now crossworks question Thanks everyone for the feedback on the terminal programs. New problem with crossworks. I'm trying to redefine __putchar() to send out the SPI port, instead of to the virtual terminal. So according to the instructions, I should just be able to redirect the linker to use my function instead of the __putchar() function, right? I did this: -D___putchar=_my_putchar in the additional linker options. This should utilize my_putchar() instead of the standard one, right? However, when I compile, I get a duplicate __printchar error now. Any ideas? Is there a better way to do this? -Micah . Yahoo! Groups Links
Reply by ●March 31, 20062006-03-31
Oh, also note that once you have directed low level stdout to your SPI with __putchar(), that you can eg. use this : printf ("Now I'm sending on my SPI port"); and the whole stdio.h family. -- Kris -----Original Message----- From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Microbit Sent: Saturday, 1 April 2006 9:56 AM To: msp430@msp4... Subject: RE: [msp430] Okay, now crossworks question Hello Micah, Simply use the __putchar() function with the same prototype as in the library, and your own __putchar() code will be linked in, instead of the Library code. You _must_ use the same prototype to have your own function linked in ie. int __putchar (int); If you're using SPI, just return the parameter you were called with : int __putchar (int spi_data) { //.... do your SPI stuff return (spi_data); } If there's an error you can elect to return EOF or IOW (-1) B rgds Kris -----Original Message----- From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah Sent: Saturday, 1 April 2006 9:25 AM To: msp430@msp4... Subject: [msp430] Okay, now crossworks question Thanks everyone for the feedback on the terminal programs. New problem with crossworks. I'm trying to redefine __putchar() to send out the SPI port, instead of to the virtual terminal. So according to the instructions, I should just be able to redirect the linker to use my function instead of the __putchar() function, right? I did this: -D___putchar=_my_putchar in the additional linker options. This should utilize my_putchar() instead of the standard one, right? However, when I compile, I get a duplicate __printchar error now. Any ideas? Is there a better way to do this? -Micah . Yahoo! Groups Links . Yahoo! Groups Links
Reply by ●March 31, 20062006-03-31
On Fri, Mar 31, 2006 at 02:25:08PM -0800, Micah wrote: > New problem with crossworks. I'm trying to redefine __putchar() to send > out the SPI port, instead of to the virtual terminal. So according to > the instructions, I should just be able to redirect the linker to use my > function instead of the __putchar() function, right? Micah, What I have done to implement my own low level serial routine was to define two functions, __putchar() and _putchar(). The first function here is the one that Crossworks printf() function makes calls to: void __putchar(int c) { #ifdef SERIAL_PORT _putchar(c); #endif // SERIAL_PORT #ifdef RADIO_PORT rf_send(c); #endif // RADIO_PORT } Crossworks will use your __putchar() routine above if it exists, instead of its own. The second function is the actual low-level serial output routine that gets called by the one above: void _putchar(int c) { ...bleh } I did not define anything else, nor did I have to add any linker switches. It just _works_. :) Take care, -Chris -- /> Christopher Cole <\ <\ << Cole Design and Development \\ email: cole@cole... \\ \\ Computer Networking & Embedded Electronics \\ web: http://coledd.com >> \> \> </
Reply by ●March 31, 20062006-03-31
Still not working.
Okay, so I added this function to common.c:
int __putchar (int spi_data)
{
if (spi_data == '\n')
spi_data = 0x0a;
WRITE_TX_BUF2 (spi_data & 0xff);
WAIT_SPI_FREE2;
return (spi_data);
}
And this to common.h:
int __putchar (int);
and included <stdio.h> in common.c and main.c. And I still get the
duplicate __putchar error.
What's up?
-Micah
Microbit wrote:
>Hello Micah,
>
>Simply use the __putchar() function with the same prototype as in the
library, and
>your own __putchar() code will be linked in, instead of the Library code.
>
>You _must_ use the same prototype to have your own function linked in ie.
>
>int __putchar (int);
>
>If you're using SPI, just return the parameter you were called with :
>
>int __putchar (int spi_data)
>{
> //.... do your SPI stuff
> return (spi_data);
>}
>
>If there's an error you can elect to return EOF or IOW (-1)
>
>
>B rgds
>Kris
>
>
>-----Original Message-----
>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>Sent: Saturday, 1 April 2006 9:25 AM
>To: msp430@msp4...
>Subject: [msp430] Okay, now crossworks question
>
>Thanks everyone for the feedback on the terminal programs.
>
>New problem with crossworks. I'm trying to redefine __putchar() to send
>out the SPI port, instead of to the virtual terminal. So according to
>the instructions, I should just be able to redirect the linker to use my
>function instead of the __putchar() function, right? I did this:
>
>-D___putchar=_my_putchar
>
>in the additional linker options. This should utilize my_putchar()
>instead of the standard one, right? However, when I compile, I get a
>duplicate __printchar error now.
>
>Any ideas? Is there a better way to do this?
>
>-Micah
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
Reply by ●March 31, 20062006-03-31
Huh ? Weird that this works, you MUST match the prototype (or should have to) : int __putchar (int); I'll try this next time I'm on MSP430, I'm coding on ARM for the moment. -- Kris -----Original Message----- From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Christopher Cole Sent: Saturday, 1 April 2006 10:05 AM To: msp430@msp4... Subject: Re: [msp430] Okay, now crossworks question On Fri, Mar 31, 2006 at 02:25:08PM -0800, Micah wrote: > New problem with crossworks. I'm trying to redefine __putchar() to send > out the SPI port, instead of to the virtual terminal. So according to > the instructions, I should just be able to redirect the linker to use my > function instead of the __putchar() function, right? Micah, What I have done to implement my own low level serial routine was to define two functions, __putchar() and _putchar(). The first function here is the one that Crossworks printf() function makes calls to: void __putchar(int c) { #ifdef SERIAL_PORT _putchar(c); #endif // SERIAL_PORT #ifdef RADIO_PORT rf_send(c); #endif // RADIO_PORT } Crossworks will use your __putchar() routine above if it exists, instead of its own. The second function is the actual low-level serial output routine that gets called by the one above: void _putchar(int c) { ...bleh } I did not define anything else, nor did I have to add any linker switches. It just _works_. :) Take care, -Chris -- /> Christopher Cole <\ <\ << Cole Design and Development \\ email: cole@cole... \\ \\ Computer Networking & Embedded Electronics \\ web: http://coledd.com >> \> \> </ . Yahoo! Groups Links
Reply by ●March 31, 20062006-03-31
Have you included the crossworks IO header file :
#include <__cross_studio_io.h>
???
-- Kris
-----Original Message-----
From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
Sent: Saturday, 1 April 2006 10:10 AM
To: msp430@msp4...
Subject: Re: [msp430] Okay, now crossworks question
Still not working.
Okay, so I added this function to common.c:
int __putchar (int spi_data)
{
if (spi_data == '\n')
spi_data = 0x0a;
WRITE_TX_BUF2 (spi_data & 0xff);
WAIT_SPI_FREE2;
return (spi_data);
}
And this to common.h:
int __putchar (int);
and included <stdio.h> in common.c and main.c. And I still get the
duplicate __putchar error.
What's up?
-Micah
Microbit wrote:
>Hello Micah,
>
>Simply use the __putchar() function with the same prototype as in the
library, and
>your own __putchar() code will be linked in, instead of the Library code.
>
>You _must_ use the same prototype to have your own function linked in ie.
>
>int __putchar (int);
>
>If you're using SPI, just return the parameter you were called with :
>
>int __putchar (int spi_data)
>{
> //.... do your SPI stuff
> return (spi_data);
>}
>
>If there's an error you can elect to return EOF or IOW (-1)
>
>
>B rgds
>Kris
>
>
>-----Original Message-----
>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>Sent: Saturday, 1 April 2006 9:25 AM
>To: msp430@msp4...
>Subject: [msp430] Okay, now crossworks question
>
>Thanks everyone for the feedback on the terminal programs.
>
>New problem with crossworks. I'm trying to redefine __putchar() to send
>out the SPI port, instead of to the virtual terminal. So according to
>the instructions, I should just be able to redirect the linker to use my
>function instead of the __putchar() function, right? I did this:
>
>-D___putchar=_my_putchar
>
>in the additional linker options. This should utilize my_putchar()
>instead of the standard one, right? However, when I compile, I get a
>duplicate __printchar error now.
>
>Any ideas? Is there a better way to do this?
>
>-Micah
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
.
Yahoo! Groups Links
Reply by ●March 31, 20062006-03-31
Yep, in main.c and common.c.
-Micah
Microbit wrote:
>Have you included the crossworks IO header file :
>
>#include <__cross_studio_io.h>
>
>???
>
>-- Kris
>
>
>-----Original Message-----
>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>Sent: Saturday, 1 April 2006 10:10 AM
>To: msp430@msp4...
>Subject: Re: [msp430] Okay, now crossworks question
>
>
>Still not working.
>
>Okay, so I added this function to common.c:
>
>int __putchar (int spi_data)
>{
> if (spi_data == '\n')
> spi_data = 0x0a;
> WRITE_TX_BUF2 (spi_data & 0xff);
> WAIT_SPI_FREE2;
>
> return (spi_data);
>}
>
>And this to common.h:
>
>int __putchar (int);
>
>and included <stdio.h> in common.c and main.c. And I still get the
>duplicate __putchar error.
>
>What's up?
>
>-Micah
>
>
>Microbit wrote:
>
>
>
>>Hello Micah,
>>
>>Simply use the __putchar() function with the same prototype as in the
library, and
>>your own __putchar() code will be linked in, instead of the Library
code.
>>
>>You _must_ use the same prototype to have your own function linked in
ie.
>>
>>int __putchar (int);
>>
>>If you're using SPI, just return the parameter you were called with
:
>>
>>int __putchar (int spi_data)
>>{
>> //.... do your SPI stuff
>>return (spi_data);
>>}
>>
>>If there's an error you can elect to return EOF or IOW (-1)
>>
>>
>>B rgds
>>Kris
>>
>>
>>-----Original Message-----
>>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>>Sent: Saturday, 1 April 2006 9:25 AM
>>To: msp430@msp4...
>>Subject: [msp430] Okay, now crossworks question
>>
>>Thanks everyone for the feedback on the terminal programs.
>>
>>New problem with crossworks. I'm trying to redefine __putchar() to
send
>>out the SPI port, instead of to the virtual terminal. So according to
>>the instructions, I should just be able to redirect the linker to use my
>>function instead of the __putchar() function, right? I did this:
>>
>>-D___putchar=_my_putchar
>>
>>in the additional linker options. This should utilize my_putchar()
>>instead of the standard one, right? However, when I compile, I get a
>>duplicate __printchar error now.
>>
>>Any ideas? Is there a better way to do this?
>>
>>-Micah
>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
Reply by ●March 31, 20062006-03-31
If it helps, here's the error:
C:/Program Files/Rowley Associates Limited/CrossWorks MSP430 1.3/bin/hld
HW_debug/nRF2401_MAC.hzo HW_debug/sys_init.hzo HW_debug/mulaw.hzo
HW_debug/pn_tables.hzo HW_debug/interrupts.hzo HW_debug/common.hzo
HW_debug/timers.hzo HW_debug/charging.hzo HW_debug/signal.hzo
HW_debug/led.hzo HW_debug/main.hzo HW_debug/channel.hzo
HW_debug/sys_debug.hzo HW_debug/crt0.hzo C:/Program Files/Rowley
Associates Limited/CrossWorks MSP430 1.3/lib/lib_vfprintf_int_hf.hza
C:/Program Files/Rowley Associates Limited/CrossWorks MSP430
1.3/lib/lib_vfscanf_int_hf.hza -g C:/Program Files/Rowley Associates
Limited/CrossWorks MSP430 1.3/lib/libc_hf.hza C:/Program Files/Rowley
Associates Limited/CrossWorks MSP430 1.3/lib/libm_hf.hza -Oph -Ofl -Odc
-Ojt -GCODE=L -GCONST=L -TINTVECe0 -GINTVEC=L -TCODE,CONST00-ffdf
-GINFO=L -TINFO00-10ff -DRAM_Start_AddressQ2 -DRAM_Size 48
-T.abs=0 -G.abs=L -TIDATA0,UDATA0 0-9ff -o HW_debug/FHSS_RC1.hzx
C:/Program Files/Rowley Associates Limited/CrossWorks MSP430
1.3/bin/hld: duplicate symbol '___putchar'
-Micah
Micah wrote:
>Yep, in main.c and common.c.
>
>
>-Micah
>
>Microbit wrote:
>
>
>
>>Have you included the crossworks IO header file :
>>
>>#include <__cross_studio_io.h>
>>
>>???
>>
>>-- Kris
>>
>>
>>-----Original Message-----
>>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>>Sent: Saturday, 1 April 2006 10:10 AM
>>To: msp430@msp4...
>>Subject: Re: [msp430] Okay, now crossworks question
>>
>>
>>Still not working.
>>
>>Okay, so I added this function to common.c:
>>
>>int __putchar (int spi_data)
>>{
>> if (spi_data == '\n')
>> spi_data = 0x0a;
>> WRITE_TX_BUF2 (spi_data & 0xff);
>> WAIT_SPI_FREE2;
>>
>>return (spi_data);
>>}
>>
>>And this to common.h:
>>
>>int __putchar (int);
>>
>>and included <stdio.h> in common.c and main.c. And I still get the
>>duplicate __putchar error.
>>
>>What's up?
>>
>>-Micah
>>
>>
>>Microbit wrote:
>>
>>
>>
>>
>>
>>>Hello Micah,
>>>
>>>Simply use the __putchar() function with the same prototype as in
the library, and
>>>your own __putchar() code will be linked in, instead of the Library
code.
>>>
>>>You _must_ use the same prototype to have your own function linked
in ie.
>>>
>>>int __putchar (int);
>>>
>>>If you're using SPI, just return the parameter you were called
with :
>>>
>>>int __putchar (int spi_data)
>>>{
>>> //.... do your SPI stuff
>>>return (spi_data);
>>>}
>>>
>>>If there's an error you can elect to return EOF or IOW (-1)
>>>
>>>
>>>B rgds
>>>Kris
>>>
>>>
>>>-----Original Message-----
>>>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>>>Sent: Saturday, 1 April 2006 9:25 AM
>>>To: msp430@msp4...
>>>Subject: [msp430] Okay, now crossworks question
>>>
>>>Thanks everyone for the feedback on the terminal programs.
>>>
>>>New problem with crossworks. I'm trying to redefine __putchar()
to send
>>>out the SPI port, instead of to the virtual terminal. So according
to
>>>the instructions, I should just be able to redirect the linker to
use my
>>>function instead of the __putchar() function, right? I did this:
>>>
>>>-D___putchar=_my_putchar
>>>
>>>in the additional linker options. This should utilize my_putchar()
>>>instead of the standard one, right? However, when I compile, I get a
>>>duplicate __printchar error now.
>>>
>>>Any ideas? Is there a better way to do this?
>>>
>>>-Micah
>>>
>>>
>>>.
>>>
>>>
>>>Yahoo! Groups Links
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>.
>>>
>>>
>>>Yahoo! Groups Links
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
Reply by ●March 31, 20062006-03-31
If you take over that function, you shouldn't include the crossworks
io header file,
just use the prototype in your common.h file IIRC.
It's been a while I've done this.
I'd have to dig up old code to check.
-- Kris
-----Original Message-----
From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
Sent: Saturday, 1 April 2006 10:15 AM
To: msp430@msp4...
Subject: Re: [msp430] Okay, now crossworks question
Yep, in main.c and common.c.
-Micah
Microbit wrote:
>Have you included the crossworks IO header file :
>
>#include <__cross_studio_io.h>
>
>???
>
>-- Kris
>
>
>-----Original Message-----
>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>Sent: Saturday, 1 April 2006 10:10 AM
>To: msp430@msp4...
>Subject: Re: [msp430] Okay, now crossworks question
>
>
>Still not working.
>
>Okay, so I added this function to common.c:
>
>int __putchar (int spi_data)
>{
> if (spi_data == '\n')
> spi_data = 0x0a;
> WRITE_TX_BUF2 (spi_data & 0xff);
> WAIT_SPI_FREE2;
>
> return (spi_data);
>}
>
>And this to common.h:
>
>int __putchar (int);
>
>and included <stdio.h> in common.c and main.c. And I still get the
>duplicate __putchar error.
>
>What's up?
>
>-Micah
>
>
>Microbit wrote:
>
>
>
>>Hello Micah,
>>
>>Simply use the __putchar() function with the same prototype as in the
library, and
>>your own __putchar() code will be linked in, instead of the Library
code.
>>
>>You _must_ use the same prototype to have your own function linked in
ie.
>>
>>int __putchar (int);
>>
>>If you're using SPI, just return the parameter you were called with
:
>>
>>int __putchar (int spi_data)
>>{
>> //.... do your SPI stuff
>>return (spi_data);
>>}
>>
>>If there's an error you can elect to return EOF or IOW (-1)
>>
>>
>>B rgds
>>Kris
>>
>>
>>-----Original Message-----
>>From: msp430@msp4... [mailto:msp430@msp4...] On Behalf Of Micah
>>Sent: Saturday, 1 April 2006 9:25 AM
>>To: msp430@msp4...
>>Subject: [msp430] Okay, now crossworks question
>>
>>Thanks everyone for the feedback on the terminal programs.
>>
>>New problem with crossworks. I'm trying to redefine __putchar() to
send
>>out the SPI port, instead of to the virtual terminal. So according to
>>the instructions, I should just be able to redirect the linker to use my
>>function instead of the __putchar() function, right? I did this:
>>
>>-D___putchar=_my_putchar
>>
>>in the additional linker options. This should utilize my_putchar()
>>instead of the standard one, right? However, when I compile, I get a
>>duplicate __printchar error now.
>>
>>Any ideas? Is there a better way to do this?
>>
>>-Micah
>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>.
>>
>>
>>Yahoo! Groups Links
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
>.
>
>
>Yahoo! Groups Links
>
>
>
>
>
>
>
>
.
Yahoo! Groups Links