Hi Mr. Surducan,
As for advantages... it uses BASIC language, very close to VB.Net syntax, the resulting .hex file is as optimized as in a fully professional XC16, no limits. The author, David Barker (that makes also Swordfish Basic for PIC18, a commercial compiler this time) compiled the sources of XC16 (an old version 1.11) and removed the limitations. If you install a certain package, you can instruct the Firewing IDE to use an external XC16 toolchain (if you need a more recent version for a newer PIC). The default installation comes with only a couple of PIC24 micros, but you can manually install all the micros supported by the XC16 1.11 version.
It supports also some of the PIC32 micros if uses the internal XC32 compiler (with full optimization) and the full PIC32 family if you set it to use the external XC32 compiler (if there is one installed).
And some PIC18 (for these, it generates assembler directly, and if you want full PIC18 support, you have to buy Swordfish Basic)
The normal user does not need to know C, he works in Basic and gets a hex file. In background, the basic is converted to C and from the IDE option, you can choose to keep also the C source. By default the C source is deleted after compilation.
It comes with some nice libraries and in the forums there is also an ECAN library for PiC24
Recently, the site was down and some of the zip files in the forums are corrupted, but if asked, users will upload them again.
This language is Windows only but it can be run under Linux using Wine.
NOTE: Mainly, this language was made to support the Arduino like Firewing boards, that have the Arduino bootloader installed, but you can use it also for applications that do not need a bootloader - there are some tips in the forum. The following program can be used as a template for an application without bootloader if support for the PICs mentioned inside is installed correctly:
' ====== NO BOOTLOADER APPLICATION SKELETON =======================
' ___________________________________________________________________
' As firewing16 device, you can use any of the following:
' 24HJ32GP302, 24HJ32GP304
' 24HJ64GP202, 24HJ64GP204, 24HJ64GP502, 24HJ64GP504
' 24HJ128GP202, 24HJ128GP204, 24HJ128GP502, 24HJ128GP504
' 33FJ32GP302, 33FJ32GP304
' 33FJ64GP202, 33FJ64GP204, 33FJ64GP802, 33FJ64GP804
' 33FJ128GP202, 33FJ128GP204, 33FJ128GP802, 33FJ128GP804
device = 33FJ128GP802
' clock speed in MHz, you can use any of the following:
' 80, 64, 32, 16, 8
clock = 80
' config statements for pic24hj micro without bootloader,
' pic that can be programmed with pickit 2 programmer (pk2cmd)
config FBS = {BWRP_WRPROTECT_OFF}
#if _device in (24HJ32GP302, 24HJ32GP304, 33FJ32GP302, 33FJ32GP304)
#else
config FSS = {SWRP_WRPROTECT_OFF}
#endif
config FGS = {GWRP_OFF}
config FOSCSEL = {FNOSC_FRCPLL, IESO_OFF}
config FOSC = {POSCMD_NONE, OSCIOFNC_ON, IOL1WAY_OFF, FCKSM_CSECMD}
config FWDT = {WDTPOST_PS256, WINDIS_OFF, FWDTEN_OFF}
config FPOR = {FPWRT_PWR128, ALTI2C_OFF}
config FICD = {ICS_PGD1, JTAGEN_OFF}
macro SetSysClock()
#if _device in (24HJ32GP302,24HJ32GP304,24HJ64GP202,24HJ64GP204,24HJ64GP502,24HJ64GP504,24HJ128GP202,24HJ128GP204,24HJ128GP502,24HJ128GP504,33FJ32GP302,33FJ32GP304,33FJ64GP202,33FJ64GP204,33FJ64GP802,33FJ64GP804,33FJ128GP202,33FJ128GP204,33FJ128GP802,33FJ128GP804)
#else
checkparam(etError, "unsupported firewing16 micro")
#endif
' Fosc = Fin * (M/N1*N2))
' CLKDIVbits.FRCDIV = 0 (CLKDIV[10:8]) FRC/1= 7.3728MHz
' CLKDIVbits.PLLPOST = N2 (CLKDIV[7:6]) N2: 00=2, 01=4, 11=8
' CLKDIVbits.PLLPRE = 2-N1 (CLKDIV[4:0]) N1 = 2-33
' PLLFBDbits.PLLDIV = M-2
#if (_clock = 80) ' 40 MIPS
const FRCDIV = 0
const PLLPOST = 0
const PLLPRE = 1
const PLLDIV = 63 ' 39.94
WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
CLKDIV = WREG4
PLLFBD = PLLDIV
#elseif (_clock = 64) ' 32 MIPS
const FRCDIV = 0
const PLLPOST = 0
const PLLPRE = 1
const PLLDIV = 50 ' 31.95
WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
CLKDIV = WREG4
PLLFBD = PLLDIV
#elseif (_clock = 32) ' 16 MIPS
const FRCDIV = 0
const PLLPOST = 1
const PLLPRE = 1
const PLLDIV = 50 ' 15.97
WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
CLKDIV = WREG4
PLLFBD = PLLDIV
#elseif (_clock = 16) ' 8 MIPS
const FRCDIV = 0
const PLLPOST = 3
const PLLPRE = 1
const PLLDIV = 50 ' 7.99
WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
CLKDIV = WREG4
PLLFBD = PLLDIV
#elseif (_clock = 8) ' 4 MIPS
const FRCDIV = 1 ' note: this is outside the VCO range... should use FNOSC_FRC mode
const PLLPOST = 3
const PLLPRE = 1
const PLLDIV = 50
WREG4 = (CLKDIV and &HF800) or (FRCDIV<<8) or (PLLPOST<<6) or PLLPRE
CLKDIV = WREG4
PLLFBD = PLLDIV
#else
checkparam(etError, "unsupported system clock freq")
#endif
' trim osc for accurate baud (optional)
'OSCTUN = &H03A
' wait until the PLL is locked
while (OSCCON.bits(5) = 0) ' check LOCK bit
end while
end macro
' this code executes when the PIC first starts up
' for a pic24hj micro without bootloader
sub OnStartup() handles PIC.OnStartup
RPINR18 = RPINR18 and &HFFE0 or &B00100 ' map Uart1 RX to D0 (RB.4)
RPOR2 = RPOR2 and &HE0FF or &B00011 << 8 ' map Uart1 TX to D1 (RB.5)
'RPINR18 = RPINR18 or &H001F ' disable Uart1 RX
'RPOR2 = RPOR2 and &HE0FF ' disable Uart1 TX
end sub
'program entry point...
sub Main()
' the following line is mandatory! don't erase it!
SetSysClock()
' code your app bellow...
end sub