LockedSuccess report: C, bare dsPIC and Linux free tools

Page: 12 > Showing page 1 of 2
Author
Guest
Super Member
  • Total Posts : 80499
  • Reward points : 0
  • Joined: 2003/01/01 00:00:00
  • Location: 0
  • Status: online
2005/05/16 14:26:10 (permalink)
0

Success report: C, bare dsPIC and Linux free tools

Using C, bare dsPIC in breadboard, ad-hoc made programmer and just opensource free tools, I have my LED blinking Smile

This game is for bigger nasty children so think twice before following me. But if you think that at least trying what is it worth to do something zero-up, here we go:

1) C30 is ported gcc, you can compile your mostly complete free toolchain or use these .deb or .rpm files:
http://noel.feld.cvut.cz/dspic/

2) Minimalistic C file working around missing libraries looks like this:

#define ASM(X) __asm__ volatile( X )
#define STRING(X) #X /* X macro-expanded before being quoted */
#define BCLR(adr,bit) ASM( "bclr " STRING(adr) ", #" STRING(bit) )
#define BSET(adr,bit) ASM( "bset " STRING(adr) ", #" STRING(bit) )

#define TRISD 0x2D2
#define PORTD 0x2D4
#define LATD 0x2D6

__attribute__((section("__FOSC.sec,x"))) int _FOSC = (0x810B);

_reset(){
main();
}

delay(){
volatile int x = 0;
for( x=30002; x>0; x-- ){
}
}

main(){
BCLR( TRISD, 1 ); /* RD1 is output */
while( 1 ){
BSET( LATD, 1 ); /* RD1 high */
delay();
BCLR( LATD, 1 ); /* RD1 low */
delay();
}
};


3) Compile like this:

pic30-elf-gcc -nostdlib dspic.c -o dspic
pic30-elf-bin2hex dspic


4) Download and compile Homer Reid's programming software:
http://homerreid.ath.cx/misc/dspicprg/

5) Build JDM-style programmer. You should ensure 5V for dsPIC and proper level shifting for these signals:
TD --> MCLR (RS232 to 0V/9V, should rise quickly to at least 9V )
RTS --> PGC (RS232 to logical levels)
DTR --> PGD (RS232 to logical levels)
CTS <-- PGD (logical levels to RS232, working at least when DTR is high)
All this signal conditioning keeps polarity, no inversion.

6) Take special care to filter PGC and PGD as dsPIC is really really picky regarding these signals. For me, it seemed to work with just 82pF between PGC and GND, but might better follow the original advice:

...put 22..47 pF on the PGD and PGC lines to ground near the target chip. In addition, put a 100 ohm resistor in series with the PGD line between target chip and the cap


7) Try to guess whether things work buy observing the hex file produced by something like:

dspicdmp -p 760

where "760" is the base port IN DECIMAL (look at /proc/ioports for ideas) and when confident enough, flash your program with something like

dspicprg -p 760 -c pic30f4012 -f dspic.hex


8) Connect MCLR to +5V and enjoy blinking LED.

[:@][:-][:@][:-]wink

So far the C code cannot use global variables, look here to know more:
http://forum.microchip.com/tm.asp?m=85994

And please consider pushing the status of free tools a little bit forward. Well, I am happy to have my blinking LED, but I might have one without going through 1000+ pages of manuals [&:] If you want any further progress on the Linux front, it might very well be up to you nowgrin

Many thanks to Microchip, John, Homer and Olin.

Regards

Vaclav Hanzl
#1

23 Replies Related Threads

    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/06 04:54:56 (permalink)
    0
    This is great. Any new progress in this front?

      USB_Links and libusb
    #2
    jjmcd
    Super Member
    • Total Posts : 856
    • Reward points : 0
    • Joined: 2005/04/01 19:11:14
    • Location: Michigan, U.S.A.
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/06 08:26:35 (permalink)
    0
    This is great. I made a couple of passes at getting these things to work some months back, but no joy.

    So many RPMs, so little documentation.

    --McD
    #3
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/06 22:52:57 (permalink)
    0
    I am using Ubuntu 5.04 (Debian basd) and the Debian pacakge works right awsy.

      USB_Links and libusb
    #4
    Guest
    Super Member
    • Total Posts : 80499
    • Reward points : 0
    • Joined: 2003/01/01 00:00:00
    • Location: 0
    • Status: online
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/23 07:16:42 (permalink)
    0
    What's the cause of the problem with global variables? Is it just that thete's no code to zero out the appropriate locations on startup, or is something deeper missing? I've looked through the posts, but haven't seen anything explaining the problem.

    -John
    #5
    t-tecjohn
    Starting Member
    • Total Posts : 54
    • Reward points : 0
    • Joined: 2005/02/22 19:23:20
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/23 18:58:29 (permalink)
    0
    The global variables issue is because the linker needs a linker script to know where it can put globals, and to initialise the stack pointer. Vaclav's example code doesn't have any trouble with this, because it does not need to use any data memory at all.

    I suspect that as soon as you do something where variables spill from registers into memory, the lack of a linker script is going to become a issue. (Unless the stack pointer has a sane POR value? Haven't checked . . .)
    #6
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/24 04:16:06 (permalink)
    0
    How to make the Linux version work with the header file, the libraries
    and the linker script? Is is at all possible?

    By the way, my testing shows that MPLAB C30 works under Linux
    with Wine as well. MPLAB C18, MPASM, MPASM30 all work
    under Linux with Wine. However I do not like Wine since I am
    using a dual-boot machine.


    Regards,
    Xiaofan
    #7
    t-tecjohn
    Starting Member
    • Total Posts : 54
    • Reward points : 0
    • Joined: 2005/02/22 19:23:20
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2005/08/24 16:58:06 (permalink)
    0
    You can do it, it works fine. Here's some example command lines that I used to build my first blinking light program:
    pic30-elf-cc -D__dsPIC30F2010__ -Wall -W -g   -c -o main.o main.c
    pic30-elf-as -p=30F2010 -g -o init_dsPIC30F2010.o init_dsPIC30F2010.s
    pic30-elf-cc -Wl,--script=p30f2010.gld main.o init_dsPIC30F2010.o -lp30f2010-elf -o blinkenlight.elf
    pic30-elf-bin2hex blinkenlight.elf
    #8
    Guest
    Super Member
    • Total Posts : 80499
    • Reward points : 0
    • Joined: 2003/01/01 00:00:00
    • Location: 0
    • Status: online
    RE: Success report: C, bare dsPIC and Linux free tools 2005/10/08 02:48:46 (permalink)
    0
    I suspect that as soon as you do something where variables spill from registers into memory, the lack of a linker script is going to become a issue. (Unless the stack pointer has a sane POR value? Haven't checked . . .)


    Things are quite sane in dsPIC after POR. Stack is usable, local variables work.

    That issue with global variables is really easy to solve, one-day work at most. Just unpack initial values to RAM. Compiler can prepare these in two formats, the 3-byte packed one is slightly harder. But it can be done in C mostly.

    And the default linker script, which is built into the compiler and thereby happens to be GPL, is quite a good one. There is not much you really have to add I guess.

    Bye

    Vaclav
    #9
    Guest
    Super Member
    • Total Posts : 80499
    • Reward points : 0
    • Joined: 2003/01/01 00:00:00
    • Location: 0
    • Status: online
    RE: Success report: C, bare dsPIC and Linux free tools 2005/10/08 03:42:28 (permalink)
    0
    Thomas Sailer also did some related work:

    http://www.baycom.org/~tom/dspic/

    It is basically the type of solution provided by John (using non-free libraries) but Thomas seems to have some more fixes related to tools.

    Vaclav
    #10
    Guest
    Super Member
    • Total Posts : 80499
    • Reward points : 0
    • Joined: 2003/01/01 00:00:00
    • Location: 0
    • Status: online
    RE: Success report: C, bare dsPIC and Linux free tools 2005/12/23 06:14:34 (permalink)
    0
    Stephan Walter started to work on free libraries:


    To whom it may concern,

    I started a libc implementation for the PIC30/dsPIC family of
    microcontrollers made by Microchip. The libc distributed by Microchip
    is closed source, it would be great if there was a complete
    free-as-in-speech toolchain, as there is one for the AVR
    microcontrollers.

    The project is hosted at https://gna.org/projects/pic30-libc/

    Only a few functions from stdlib.h and string.h are implemented yet.
    Important stuff like printf() and malloc() is currently missing. I'm
    writing this email to find people interested in helping with the
    development.


    you can get the source with subversion:
    $ svn co http://svn.gna.org/svn/pic30-libc/trunk pic30-libc

    or in a tarball:
    http://stephan.walter.name/files/pic30-libc-0.1.tar.gz


    to compile:
    $ ./bootstrap.sh # only if you got the source from subversion
    $ ./configure --host=pic30-elf
    $ make

    You'll need the pic30 compiler from http://noel.feld.cvut.cz/dspic/


    If you're interested, just PM me...

    Happy holidays & happy hacking!
    Regards,
    Stephan Walter



    and small clarification:


    By "starting from scratch" I didn't mean reinventing the wheel. Of
    course I am reusing code from avr-libc, uClibc and GNU libc.
    #11
    Guest
    Super Member
    • Total Posts : 80499
    • Reward points : 0
    • Joined: 2003/01/01 00:00:00
    • Location: 0
    • Status: online
    RE: Success report: C, bare dsPIC and Linux free tools 2005/12/23 14:13:17 (permalink)
    0
    (Thanks to Vaclav for posting my message here)

    malloc() is now implemented but untested, as I don't have a dsPIC to test it with at the moment. If anybody wants to test the implemented functions or implement missing ones, go right ahead! A lot of the trivial functions are done. File IO is completely missing, but that doesn't make much sense on a uC (except for running code in the simulator, and there's no free simulator (yet?)). But sprintf() is certainly needed.

    The library libpic30-elf.a (needed for linking besides libc and libm) doesn't seem to be open source. Microchip gives the source in MPLAB C30/src/pic30, but it only says "Copyright Microchip". Would be great if they licensed it under the LGPL.

    I made a new tarball which includes most of the functions from stdlib.h, string.h and ctype.h:
    http://download.gna.org/pic30-libc/pic30-libc-0.1.1.tar.gz
    #12
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/16 20:27:27 (permalink)
    0
    Somehow the build process failed at the last step for pic30-libc-0.1.1 and the SVN version (the SVN version also miss one file: malloc.h).
    I am using the RPM version from Thomas Sailer under FC4.

    ...
    make[1]: Entering directory `/home/xiaofan/Desktop/dspic/pic30-libc'
    rm -f libc.a
    pic30-elf-ar cru libc.a libc/ctype/isalnum.o libc/ctype/isalpha.o libc/ctype/isascii.o libc/ctype/isblank.o libc/ctype/iscntrl.o libc/ctype/isdigit.o libc/ctype/isgraph.o libc/ctype/islower.o libc/ctype/isprint.o libc/ctype/ispunct.o libc/ctype/isspace.o libc/ctype/isupper.o libc/ctype/isxdigit.o libc/ctype/toascii.o libc/ctype/tolower.o libc/ctype/toupper.o libc/stdlib/abort.o libc/stdlib/abs.o libc/stdlib/atof.o libc/stdlib/atoi.o libc/stdlib/atol.o libc/stdlib/bsearch.o libc/stdlib/calloc.o libc/stdlib/div.o libc/stdlib/errno.o libc/stdlib/exit.o libc/stdlib/labs.o libc/stdlib/ldiv.o libc/stdlib/malloc.o libc/stdlib/qsort.o libc/stdlib/rand.o libc/stdlib/random.o libc/stdlib/realloc.o libc/stdlib/strtod.o libc/stdlib/strtol.o libc/stdlib/strtoul.o libc/string/memccpy.o libc/string/memchr.o libc/string/memcmp.o libc/string/memcpy.o libc/string/memmove.o libc/string/memset.o libc/string/ffs.o libc/string/strcasecmp.o libc/string/strcat.o libc/string/strchr.o libc/string/strcmp.o libc/string/strcpy.o libc/string/strlcat.o libc/string/strlcpy.o libc/string/strlen.o libc/string/strncasecmp.o libc/string/strncat.o libc/string/strncmp.o libc/string/strncpy.o libc/string/strrchr.o libc/string/strsep.o libc/string/strstr.o libc/string/strtok_r.o
    *** buffer overflow detected ***: pic30-elf-ar terminated
    ======= Backtrace: =========
    /lib/libc.so.6(__chk_fail+0x41)[0x867c45]
    /lib/libc.so.6(__vsprintf_chk+0x0)[0x867510]
    /lib/libc.so.6(_IO_default_xsputn+0x97)[0x7ea858]
    /lib/libc.so.6(_IO_padn+0x7b)[0x7e067b]
    /lib/libc.so.6(_IO_vfprintf+0x204e)[0x7c6b50]
    /lib/libc.so.6(__vsprintf_chk+0xa1)[0x8675b1]
    /lib/libc.so.6(__sprintf_chk+0x30)[0x867504]
    pic30-elf-ar[0x804fc3e]
    pic30-elf-ar[0x804f92c]
    pic30-elf-ar[0x8050a32]
    pic30-elf-ar[0x8053ffa]
    pic30-elf-ar[0x804bb36]
    pic30-elf-ar[0x804c275]
    /lib/libc.so.6(__libc_start_main+0xdf)[0x79ed5f]
    pic30-elf-ar(calloc+0x13d)[0x8049601]
    ======= Memory map: ========
    0076c000-00786000 r-xp 00000000 08:07 876146 /lib/ld-2.3.5.so
    00786000-00787000 r-xp 00019000 08:07 876146 /lib/ld-2.3.5.so
    00787000-00788000 rwxp 0001a000 08:07 876146 /lib/ld-2.3.5.so
    0078a000-008ad000 r-xp 00000000 08:07 876149 /lib/libc-2.3.5.so
    008ad000-008af000 r-xp 00123000 08:07 876149 /lib/libc-2.3.5.so
    008af000-008b1000 rwxp 00125000 08:07 876149 /lib/libc-2.3.5.so
    008b1000-008b3000 rwxp 008b1000 00:00 0
    00a07000-00a10000 r-xp 00000000 08:07 876240 /lib/libgcc_s-4.0.2-20051126.so.1
    00a10000-00a11000 rwxp 00009000 08:07 876240 /lib/libgcc_s-4.0.2-20051126.so.1
    00c29000-00c2a000 r-xp 00c29000 00:00 0 [vdso]
    08048000-08098000 r-xp 00000000 08:07 162500 /usr/bin/pic30-elf-ar
    08098000-08099000 rw-p 0004f000 08:07 162500 /usr/bin/pic30-elf-ar
    08099000-0809b000 rw-p 08099000 00:00 0
    09c2b000-09d9b000 rw-p 09c2b000 00:00 0 [heap]
    b7d54000-b7f54000 r--p 00000000 08:07 1791916 /usr/lib/locale/locale-archive
    b7f54000-b7f55000 rw-p b7f54000 00:00 0
    b7f60000-b7f6a000 rw-p b7f60000 00:00 0
    b7f6a000-b7f70000 r--s 00000000 08:07 1849756 /usr/lib/gconv/gconv-modules.cache
    b7f70000-b7f71000 rw-p b7f70000 00:00 0
    bfc5b000-bfc71000 rw-p bfc5b000 00:00 0 [stack]
    make[1]: *** [libc.a] Aborted
    pic30-elf-ranlib libc.a
    make[1]: Leaving directory `/home/xiaofan/Desktop/dspic/pic30-libc'
    #13
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/17 01:31:52 (permalink)
    0
    Another alternative is to use Microchip's header and linker scripts.
     
    There is a sentence in Thomas Sailer's website.
     
    "Due to license restrictions, the dsPIC header files and libraries cannot be distributed. You have to install the Microchip distribution under Windows, tar/bzip2 the Microchip installation directory, and then build the nosrc.rpm"
     
    How to do this? I've got the MPLAB C v1.32 and V2.00 Studnet version installed under Wine
    without an issue. So in theory I can build the header files and libraries RPM packages. But I am
    not so sure how to do that. Sorry I am not familiar with building software pacakges in Linux at all.
     
    I tried to manually copy the files over to /use/pic30-elf but it does not work. pic30-elf-gcc and
    pic30-elf-as can not find the header files.
     
    Regards,
    Xiaofan
     
     
     
     
    #14
    t-tecjohn
    Starting Member
    • Total Posts : 54
    • Reward points : 0
    • Joined: 2005/02/22 19:23:20
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/18 15:48:29 (permalink)
    0
    xiaofan: With my Debian/Ubuntu packages, I have patched gcc to look for include files in /usr/pic30-elf/include. Thomas Sailer may have done something similar for his RPMs. The unpatched source says '#define DEFAULT_INCLUDE_PATH "../include:../support/h"'. This is relative to where the pic30-elf-gcc binary is installed.
    #15
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/20 06:06:10 (permalink)
    0
    t-tecjohn:

    Thanks for the help,

    I will try the rpm version later under FC4. Meanwhile I have built the pic30-support_1.32-1_all.deb
    according to John's method under Ubuntu 5.10. I will try this version first.

    I guess the debian package could be updated to v2.00 as well. Have you tried it?

    Regards,
    Xiaofan
    #16
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/21 01:14:14 (permalink)
    0
    I find it is quite okay under Ubuntu.

    Sample running session witht-tecjohn's deb packages (C30 v1.32)

    mcuee@ubuntu:~/Desktop/coding/dspic/examples$ cat run_example1.bat
    pic30-gcc -ansi -Os main.c get_month.s -o example1.cof -I..\include -L..\lib -Wl,--heap=0
    pic30-bin2hex example1.cof
    @echo **********************************************************
    @echo *** The following simulation should take about 1 minute **
    @echo **********************************************************
    sim30 example1.cmd
    @type UartOut.txt
    @del example1.cof
    @del example1.hex

    mcuee@ubuntu:~/Desktop/coding/dspic/examples$ pic30-elf-gcc -ansi -Os main.c get_month.s -o example1.cof -I..\include -L..\lib -Wl,--heap=0

    mcuee@ubuntu:~/Desktop/coding/dspic/examples$ pic30-elf-bin2hex example1.cof

    mcuee@ubuntu:~/Desktop/coding/dspic/examples$ wine /usr/pic30-elf/bin/sim30.exe example1.cmd Warning: Language 'en_SG' was not recognized, defaulting to 'en_US'.
    Warning: Language 'en_SG' was not recognized, defaulting to 'en_US'.
    Warning: Language 'en_SG' was not recognized, defaulting to 'en_US'.
    This is the Microchip dsPIC30 simulator version [CLI v3.00.00.01a]
    Copyright (c) 2004 Microchip Technology Inc. All rights reserved.
    Device: 'dspic30super'
    Instruction set version [ISA2 Rev A 2003/01/31]
    Program space:-
    [000000..03ffff] Program FLASH
    [7ff000..7fffff] Data FLASH
    [f80000..f8000d] Configuration Registers
    Data space:-
    [0000..ffff] X Data RAM
    [3000..ffff] Y Data RAM
    Simulated Peripherals:-
    HsAdc Uart1 Uart2 PWM Timer1
    Timer2 Timer3 Timer4 Timer5 IC1
    IC2 IC3 IC4 IC5 IC6
    IC7 IC8 IOPortA IOPortB IOPortC
    IOPortD IOPortE IOPortF IOPortG
    dsPIC30> lp example1.hex
    dsPIC30> rp
    dsPIC30> io nul
    dsPIC30> e
    dsPIC30> q
    dsPIC30>
    #17
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/21 07:45:23 (permalink)
    0

    I could not build the nosrc.rpm file so I just copy the relavant folders to
    /usr/pic30-elf/ and I can still build the HelloWorld example under FC4 (Fedora Core 4 Linux).

    [xiaofan@localhost MPLABC30_Getting_Started]$ pic30-elf-gcc -ansi -Os
    hello.c -o hello.cof -I /usr/pic30-elf/include -L /usr/pic30-elf/lib/
    -Wl,--heap=0

    [xiaofan@localhost MPLABC30_Getting_Started]$ pic30-elf-bin2hex hello.cof

    [xiaofan@localhost MPLABC30_Getting_Started]$ wine
    /usr/pic30-elf/bin/sim30.exe hello.cmd
    This is the Microchip dsPIC30 simulator version [CLI v3.00.00.01a]
    Copyright (c) 2004 Microchip Technology Inc. All rights reserved.
    Device: 'dspic30super'
    Instruction set version [ISA2 Rev A 2003/01/31]
    Program space:-
    [000000..03ffff] Program FLASH
    [7ff000..7fffff] Data FLASH
    [f80000..f8000d] Configuration Registers
    Data space:-
    [0000..ffff] X Data RAM
    [3000..ffff] Y Data RAM
    Simulated Peripherals:-
    HsAdc Uart1 Uart2 PWM Timer1
    Timer2 Timer3 Timer4 Timer5 IC1
    IC2 IC3 IC4 IC5 IC6
    IC7 IC8 IOPortA IOPortB IOPortC
    IOPortD IOPortE IOPortF IOPortG
    dsPIC30> lp hello.hex
    dsPIC30> rp
    dsPIC30> io nul
    dsPIC30> e
    dsPIC30> q

    [xiaofan@localhost MPLABC30_Getting_Started]$ cat UartOut.txt
    Hello, world!
    #18
    dotlo
    New Member
    • Total Posts : 19
    • Reward points : 0
    • Joined: 2004/01/08 18:03:31
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/21 10:48:44 (permalink)
    0
    Xiofan,

    I've had the pic30 tools installed on my Linux box for some time with the intent of adding dsPIC support to gpsim. Now I'd like to start! First I'd like to duplicate your experience with the "Hello World" example. Where does this example exist? It doesn't appear to be part of the pic30 open sourced source. Is it part of MPLAB or C30?

    Scott
    #19
    xiaofan
    Super Member
    • Total Posts : 6247
    • Reward points : 0
    • Joined: 2005/04/14 07:05:25
    • Location: Singapore
    • Status: offline
    RE: Success report: C, bare dsPIC and Linux free tools 2006/01/21 16:51:49 (permalink)
    0
    Hi Scott,
     
    The HelloWorld and other examples is installed by C30. Therefore it is quite easy to install
    under Wine (MPLAB 7.30 is slight tricky: http://forum.microchip.com/tm.aspx?m=112347).
     
    By default, the examples are installed here:
    C:\Program Files\Microchip\MPLAB C30\examples
     
    And the file hello.c is quoted here:
    #include <stdio.h>              /* Required for printf */
    int main (int argc, char * argv[])
    {
       printf ("Hello, world!");
       return 0;
    }
     
     
    Regards,
    Xiaofan
    #20
    Page: 12 > Showing page 1 of 2
    Jump to:
    © 2017 APG vNext Commercial Version 4.5