Microchip'in yeni derleyicisi: Mplab XCx

Başlatan asergin, 27 Mart 2012, 06:25:16

Tagli

#15
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.
Gökçe Tağlıoğlu

Elektroemre

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  :)

ahfxg

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.
Erkeklerin dünyasına başkaldıran bayan mühendis..

erolca



#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%)
eroool

Logan

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?
İmza.

erolca

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.


eroool

Logan

Aslında mesajı yazmadan önce denemiştim. Fakat olmadı. Şimdi dökümanları inceliyorum. Hala çözebilmiş değilim. Nerdesin @allegro?
İmza.

Erol YILMAZ

#22
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

Logan

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.
İmza.

asergin

Ö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

NecroCapo

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)