Merhaba. Microchip, çatısı altındaki C derleyicilerini (Mplab c, Hi-Tech C), Mplab XCx ( Mplab XC8, Mplab XC16, Mplab XC32 gibi) yeniden düzenliyor. bunlar yeni derleyiciler gibi görünüyor. Aşağıdaki linkte konuyla ilgili bir miktar bilgi var:
http://www.microchip.com/pagehandler/en_us/promo/mplabxc/ (http://www.microchip.com/pagehandler/en_us/promo/mplabxc/)
Üstelik, üzretsiz olarak kullanıma sunuyor. Tek kısıtlaması, optimizasyon yapmaması.
XC8'i Downloadlar kısmından indirip kurdum bile ama Mplabx altından ulaşıp da derleme yapma şansım olmadı. Konu hakkında detaylı bilgisi olan varsa, paylaşırlarsa sevinirim. (Sanırım bu başlık bu konu için en uygun yer)
Bilgilendirme için teşekkürler. Bu habere sevindim. Aslında bunun olacağı belliydi biraz. Bir şirketin aynı ürüne hitap eden iki farklı derleyicisinin olması mantıklı değildi. Muhtemelen adamlar Hi-Tech'i aldıktan sonra birleştirme sürecini başlatmışlardır.
Microchip in belirgin şekilde karıştırdığı bi konu olmaya başlamıştır derleyicileri...
Sanırım şimdi çözdüler konuyu :)
Bu iyi bir haber . Microchip ortalığı bir dağıtmıştıki, kullanıcılar artık yeter noktasına geliyorlardı özelliklede yeni chip kullananlar. Hatta hitech forumlarında 'Bizi öldürüyorlar !' diye topicler açılmıştı.
Yalnız şimdi bir deneyeyim dedim, sonuç hüsran oldu. MPLAB X 1.10, XC8 derleyicisini tanımadı. Forumlarda yazdığına göre XC32'de sorun yokmuş. Derleyici PRO versiyonun deneme sürümü olarak yüklendiğinde MPLAB X'te Hi-Tech derleyicisi gibi gözüküyor ve kullanılabiliyormuş. Bunu denemedim.
Sanırım en iyisi MPLAB X'in bir sonraki versiyonunu beklemek olacak. Böyle bir sorun varken fazla bekleteceklerini sanmıyorum. MPLAB X kullanıcıları şimdilik eski derleyicilerle devam etse daha iyi olur.
MPLAB 8 serisinde durum nedir bilmiyorum.
MPLAB 8 ile 16F628A için yaptığım denemede sorun çıkmadı (header'deki bir kaç güncellemem dışında) ancak, MPLABX desteği için sanırım IDE yükseltmesini beklemek gerekecek
ben XC8 i kurarken en sonda hata alıyorum... dolayısı ile kuramadım,
Bu arada çok enteresan bir şey oldu ::) Daha önce (Mplab 8 ile deneme yapmadan önce) MPLABX derleyiciler listesinde XC8 görünmez iken, Mplab 8 ile uygulama denememden sonra tekrar Mplabx IDEyi açtğımda şu anda HI-TECH PICC (v1.00) olarak görünüyor. Ancak Mplabx ile az önce Mplab 8 de başarılı bir şekilde XC8 tarafından derlenen kaynak dosyam, aşağıdaki gösterilen hata ile sonlandı:
error: unknown suboption "ramtest"
sanırım biraz daha çalışmak lazım. (ya da microchipin çalışması lazım ::) )
Alıntı yapılan: Allegro - 27 Mart 2012, 11:26:03
ben XC8 i kurarken en sonda hata alıyorum... dolayısı ile kuramadım,
başka bir bilgisayarda kurdum... Çalıştı...
MPLAB IDE v8.84 ile sorunsuz çalışıyor.
Microchip MPLAB XC8 C Compiler (PRO Mode) V1.00
Copyright (C) 2012 Microchip Technology Inc.
Memory Summary:
Program space used 8h ( 8) of 400h words ( 0.8%)
Data space used 2h ( 2) of 40h bytes ( 3.1%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
Configuration bits used 0h ( 0) of 1h word ( 0.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
Benimkinde problem COMODO Antivirus yazılımıymış.....
Hiçbir virüs beni bu Antivirus kadar uğraştırmamışdı :D
böyle bir şey ti ın ccs sinde başıma gelmişti. çipe program yüklemek 4 dakika debug moduna sokmak ise 2 dakika sürüyordu. antivirüs programını kapatınca düzeldi... ;D
Alıntı yapılan: OptimusPrime - 27 Mart 2012, 16:58:25
...antivirüs programını kapatınca düzeldi... ;D
Hangi Antivirus müş o ?
Gerçi bunların geneli böle sanırım...
Bu arada Microchip XC serisini Hi-tech ve C18 serisinin ortalamasını alarak yapmış sanırım,
ADCON0bits.CHS1=0;
yanlış hatırlamıyorsam nod32 idi...
Hayırlısı olsun,
MPLAB X adam olmaya başladı. Compiler larda bir düzene girerse süper olur.
İnşallah 18F serleri için şu "rom", "udata" ve #pragma"larla bildirelen saçma şeylerde giderilir.
Konfor için kullanıyoruz sonuçta, abidik gubidik işlerle uğraştırmasın bizi.
16F serilerinde zaten sıkıntı yok, canavar gibi artık derleyicileri.
Haydı bakalım gelsin küreklerde keyfimize bakalım ::)
Alıntı yapılan: Elektroemre - 27 Mart 2012, 23:03:04
İnşallah 18F serleri için şu "rom", "udata" ve #pragma"larla bildirelen saçma şeylerde giderilir.
Konfor için kullanıyoruz sonuçta, abidik gubidik işlerle uğraştırmasın bizi.
Bu konuda aynı fikirde değilim. Derleyicinin programcıya düşük seviye ayrıntılara müdahele etme imkanı vermesi bence güzel bir özellik. Böyle imkanlar olmasa, elimizde kalan şey CCS C derleyicisi gibi birşey olurdu.
Keil IAR vs de bu kadar çeşit yok abidik gubidik tanımlama yok, fakat low-level'a erişme konusundada sıkıntı yaşamadım şansen.
Yani sonuçta bunlar gerekli şeyler ama biraz daha az görüntü kirliliği yapacak birşeyler düşünülebilir.
Hi-tech mesela const ile gayet gayet güzel halletmiş işi, c18 de rom yazıyoruz. Diğer adamların elinde sihirli değnek mi vardı?
Koda bakınca sanki C de dğilmişte basic d yazıyormuş hissi uynadırıyor kod penceresi bunları görünce :)
PIC32'yi artık kullanmayacağımı düşünüyorum. 32 bit istiyorsam mis gibi ARM var.
Yalnız dsPIC'lerde özellikle motor uygulamalarında deli dehşet işlemciler çıkmış. Zamanında kılı kırk yardığım, algoritmalar çürüttüğüm şeyi adamlar artık iki register bitine koymuşlar. Yeni seri dsPIC'lere dikkat diyorum o yüzden. C30 zaten iyi bir derleyici idi, yeni sürümde bakalım ne getirecek bize Microchip.
8bit işlemcilere gelirsek C18'in ilginçliklerinden kurtulmak hoş olur açıkçası. Biraz daha ANSI C olsun. Emre'ye katılıyorum #pragma değil de şu udata rom ram gibi saçma şeylerden kurtarsınlar bizi.
#include<xc.h>
#include <stdio.h>
#include <stdlib.h>
__CONFIG(FOSC_XT &WDTE_OFF&PWRTE_ON &LVP_OFF );
/*
* Example code for using timer0 on a 16F84
* Just sets up a 1 second interrupt and increments a variable
*/
/*
* Calculate preload value for one second timer
*/
#define PERIOD 1000000 // period in uS - one second here
#define XTAL 4000000 // crystal frequency - 4MHz
#define IPERIOD (4 * 1000000 / XTAL) // Period of instruction clock in uSeconds
#define SCALE 256 // Timer 0 prescaler
#define T0_TICKS 256 // Number of counts for interrupt
#define TICK_PERIOD (SCALE * IPERIOD) // Period (uSec) of one increment of timer 0
#define RELOADS ((PERIOD/T0_TICKS)/TICK_PERIOD)
unsigned long seconds; // second count
near char reload = 0;
/* service routine for timer 0 interrupt */
void interrupt
timer0_isr(void)
{
if(reload == 0){
// effect a change on PORTB whenever our desired period is reached.
// Note this timing will contain a margin of error.
reload = RELOADS + 1;
seconds++;
PORTB++; // effect a change on PORTB
}
reload--;
T0IF = 0;
}
void main(void)
{
OPTION_REG = 0b0111; // prescale by 256
T0CS = 0; // select internal clock
T0IE = 1; // enable timer interrupt
GIE = 1; // enable global interrupts
TRISB = 0; // output changes on LED
PORTB=0;
while(1)
{
//PORTB++;
}
}
derleme sonucu:
Microchip MPLAB XC8 C Compiler (Free Mode) V1.00
Copyright (C) 2012 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Free mode (warning)
Memory Summary:
Program space used 4Ch ( 76) of 800h words ( 3.7%)
Data space used Ch ( 12) of E0h bytes ( 5.4%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
Configuration bits used 1h ( 1) of 1h word (100.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
MPLAB X IDE ile XC8 kullanıyorum. Henüz bir sıkıntı çıkmadı. Fakat config ayarlarını programdan yapamıyorum. Var mı yardımı dokunabilecek?
Alıntı yapılan: Logan - 29 Mart 2012, 15:36:39
MPLAB X IDE ile XC8 kullanıyorum. Henüz bir sıkıntı çıkmadı. Fakat config ayarlarını programdan yapamıyorum. Var mı yardımı dokunabilecek?
Merhaba,
Hi-Tech kullandıysan cok rahatlıkla yapabilirsin. xc8 'in hi-tech den farkı kullanılan config. isimlerinin farklı olması.
__CONFIG(FOSC_XT &WDTE_OFF&PWRTE_ON &LVP_OFF );
ayrıntılı bilgi için" Microchip\xc8\v1.00\docs" altındaki manual'i okuman yeterli.
Aslında mesajı yazmadan önce denemiştim. Fakat olmadı. Şimdi dökümanları inceliyorum. Hala çözebilmiş değilim. Nerdesin @allegro?
MPLAB® XC8 C Compiler User's Guide sayfa 74 / 434
#pragma config WDT=ON, WDTPS = 0x1A
Consider the following PIC18-only examples.
#pragma config WDT = ON // turn on watchdog timer
#pragma config WDT = 1 // an alternate form of the above
#pragma config WDTPS = 0x1A // specify the timer postscale value
The configuration bits for baseline and mid-range devices can be set with the
__CONFIG macro which was supported in HI-TECH C, for example:
#include <xc.h>
__CONFIG(WDTDIS & HS & UNPROTECT);
NE VAR gibi bütün CONFIG tanımlamalarını değiştirmişler:
Tutmuyor önceki Hi-tech kodlarını....
// Config Register: CONFIG1
#define CONFIG1 0x2007
// Oscillator Selection bits
// RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
#define FOSC_EXTRC_CLKOUT 0xFFFF
// RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
#define FOSC_EXTRC_NOCLKOUT 0xFFFE
// INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
#define FOSC_INTRC_CLKOUT 0xFFFD
// INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
#define FOSC_INTRC_NOCLKOUT 0xFFFC
// EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
#define FOSC_EC 0xFFFB
// HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_HS 0xFFFA
// XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_XT 0xFFF9
// LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_LP 0xFFF8
// Watchdog Timer Enable bit
// WDT enabled
#define WDTE_ON 0xFFFF
// WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
#define WDTE_OFF 0xFFF7
// Power-up Timer Enable bit
// PWRT disabled
#define PWRTE_OFF 0xFFFF
// PWRT enabled
#define PWRTE_ON 0xFFEF
// RE3/MCLR pin function select bit
// RE3/MCLR pin function is MCLR
#define MCLRE_ON 0xFFFF
// RE3/MCLR pin function is digital input, MCLR internally tied to VDD
#define MCLRE_OFF 0xFFDF
// Code Protection bit
// Program memory code protection is disabled
#define CP_OFF 0xFFFF
// Program memory code protection is enabled
#define CP_ON 0xFFBF
// Data Code Protection bit
// Data memory code protection is disabled
#define CPD_OFF 0xFFFF
// Data memory code protection is enabled
#define CPD_ON 0xFF7F
// Brown Out Reset Selection bits
// BOR enabled
#define BOREN_ON 0xFFFF
// BOR enabled during operation and disabled in Sleep
#define BOREN_NSLEEP 0xFEFF
// BOR controlled by SBOREN bit of the PCON register
#define BOREN_SBODEN 0xFDFF
// BOR disabled
#define BOREN_OFF 0xFCFF
// Internal External Switchover bit
// Internal/External Switchover mode is enabled
#define IESO_ON 0xFFFF
// Internal/External Switchover mode is disabled
#define IESO_OFF 0xFBFF
// Fail-Safe Clock Monitor Enabled bit
// Fail-Safe Clock Monitor is enabled
#define FCMEN_ON 0xFFFF
// Fail-Safe Clock Monitor is disabled
#define FCMEN_OFF 0xF7FF
// Low Voltage Programming Enable bit
// RB3/PGM pin has PGM function, low voltage programming enabled
#define LVP_ON 0xFFFF
// RB3 pin has digital I/O, HV on MCLR must be used for programming
#define LVP_OFF 0xEFFF
// In-Circuit Debugger Mode bit
// In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
#define DEBUG_OFF 0xFFFF
// In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger
#define DEBUG_ON 0xDFFF
Erol tanımlamaları "#pragma config CONFIG1H = 0x11" şeklinde yapıyorum sorun çıkmıyor. Fakat CONFIG kullanamıyorum. Ayrıca header dosyalarında WDT veya FOSC gibi konfigürasyon bitleri tanımlı değil ya da ben yanlış dosyaya bakıyorum.
Önceki birkaç mesajdan anlaşıldığı kadarıyla bazı arkadaşlar, Mplab X IDE ile XC8 kullanımı problemini çözmüşler ama benim gibi bu sorunu yaşayanlar için Microchip'in plugin çözümü yardımcı olacaktır. Aşağıdaki linkte pdf'de gerekli açıklamalar var
http://ww1.microchip.com/downloads/en/Market_Communication/addXC8ToMplabX.pdf (http://ww1.microchip.com/downloads/en/Market_Communication/addXC8ToMplabX.pdf)
Daha önceden MPLAB C18 projesi olup da, XC8 ile Compile işlemini başaran var mı ?
Mevcut kodlarımda birçok yeri değiştirmek zorunda kaldım, hataların bir çoğundan kurtuldum, fakat şurada takıldım :
C18 deki #pragma udata access , idata vs.. yerleri kaldırmak zorunda kaldığım için herhalde ? Hi Tech veya XC8'de bu işler nasıl yapılıyor ?
:0: error: can't find 0x1D6 words (0x1d6 withtotal) for psect "text15" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x1CA words (0x1ca withtotal) for psect "text35" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x1BE words (0x1be withtotal) for psect "text22" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x1A4 words (0x1a4 withtotal) for psect "text24" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x190 words (0x190 withtotal) for psect "text3" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x190 words (0x190 withtotal) for psect "text48" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x16C words (0x16c withtotal) for psect "text30" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x168 words (0x168 withtotal) for psect "text36" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x146 words (0x146 withtotal) for psect "text41" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x142 words (0x142 withtotal) for psect "text69" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x142 words (0x142 withtotal) for psect "text80" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x13E words (0x13e withtotal) for psect "text8" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x13E words (0x13e withtotal) for psect "text11" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x128 words (0x128 withtotal) for psect "text25" in class "CODE" (largest unused contiguous range 0x8A)
:0: error: can't find 0x126 words (0x126 withtotal) for psect "text59" in class "CODE" (largest unused contiguous range 0x8A)
:0: advisory: too many errors (21)