Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: volkii - 05 Ağustos 2022, 10:13:54

Başlık: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: volkii - 05 Ağustos 2022, 10:13:54
Herkese merhaba,

Elimde bir proje var, benden önceki tasarımcılardan kalan. Proje, bootloader ve application olarak iki projeden oluşuyor. kısaca firmware update yapılabiliyor ama şuan çok önemli değil. Projelerin her ikisinin de main.c kodu C'de yazılmış. Diğer kod dosyaları hep .asm uzantılı. main.C'deki kodlar sadece bu asm dosyalarındaki fonksiyonları çağırıyor.

Projede bazı sorunlar var ve düzeltmem gerekiyor ancak MPLAB X'de derleme esnasında hata alıyorum. MPLAB X C kodunu derleyebiliyor ama işin içine asm girince, kendi ürettiği .i uzantılı dosyalarda (örneğin interrupt.i) hata syntax hatası veriyor. bu .i uzantılı dosyalar, sanırım .asm uzantılı dosyaların clean hali ve IDE tarafından üretiliyor (içeriği birbirine çok benzer), sonra bu dosyalar derleniyor sanırım.

EDİT: MPLAB V6.0'da denedim derleme işini ve bu sefer .i dosyaları değil .asm dosyalarında synax error veriyor.

MCU: 18F46K80
IDE: MPLAB V5.1
XC8: V2.0
 

projelerden birinin main.c içeri aşağıdaki gibidir:
#include <main.h>
#include <timer.h>
#include <interrupt.h>
#include <port.h>
#include <eeprom.h>
#include <spi.h>
#include <can.h>

void __at(0x4020) main(void)
{
    canInit();
    eepromInit();
    timerInit();
    interruptInit();
    do
    {
        portCheckSystemOnOffEvent();
        spiMessageProcess();
        portCheckTurnOn();
        spiMessageProcess();
        timerSystemOn();
        spiMessageProcess();
        timerSystemOff();
        spiMessageProcess();
        timerTurnOnUnit();
        spiMessageProcess();
        spiCheckInitExit();
        spiMessageProcess();
        timerSystemOnDelay();
        spiMessageProcess();
        timerDebugLED();
        spiMessageProcess();
        timerWorkingHour();
        spiMessageProcess();
        timerShutdown();
        spiMessageProcess();
        eepromSaveParameters();
        spiMessageProcess();
        spiCheckTimeOut();
        spiMessageProcess();
    }while(1==1);
}


Bu da projede yer alan .asm dosyalarından birisi:
#include <xc.inc>
#include "global.inc"
#include <timer.inc>
#include <eeprom.inc>
#include <spi.inc>
#include <can.inc>

GLOBAL  _TEMP_W
GLOBAL  _TEMP_STATUS
GLOBAL  _TEMP_BSR
GLOBAL  _main

PSECT   resetProgram, abs, ovrld, class=CODE
ORG 0x4000
resetProgram:
    BRA     0x401C
    NOP
    NOP
    NOP
    GOTO    highISR
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    GOTO    lowISR

PSECT   _interruptInit, class=CODE
GLOBAL  _interruptInit
_interruptInit:
    BSF     IPEN, ACCESS
    BSF     GIEH, ACCESS
    BSF     GIEL, ACCESS
    RETURN  NOFAST

PSECT   highISR, class=CODE
highISR:
    BTFSC   SSPIF, ACCESS
    CALL    spiISR, NOFAST
    RETFIE  FAST

PSECT   lowISR, class=CODE
lowISR:
    MOVFF   WREG, _TEMP_W
    MOVFF   STATUS, _TEMP_STATUS
    MOVFF   BSR, _TEMP_BSR

    BTFSC   CCP2IF, ACCESS
    CALL    timerISR, NOFAST
    BTFSC   EEIF, ACCESS
    CALL    eepromISR, NOFAST
    BTFSC   RXB0IF, ACCESS
    CALL    canISR, NOFAST

    MOVFF   _TEMP_BSR, BSR
    MOVFF   _TEMP_STATUS, STATUS
    MOVFF   _TEMP_W, WREG
    RETFIE  NOFAST
    END



(https://i.ibb.co/T2jzcvL/PDU-Error1.jpg) (https://ibb.co/T2jzcvL)

(https://i.ibb.co/n1w3gDj/PDU-Error2.jpg) (https://ibb.co/n1w3gDj)

(https://i.ibb.co/kMQN4MD/pic2.jpg) (https://ibb.co/kMQN4MD)

(https://i.ibb.co/3cB5J0m/pic3.jpg) (https://ibb.co/3cB5J0m)
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: mehmet - 05 Ağustos 2022, 11:26:20
Asembler yazımında değişikliler
yapılmış.
Eski versiyon ile derlemeyi deneyin
ya da asm dosyalarını elden geçirin.
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: volkii - 05 Ağustos 2022, 12:18:13
Yanıt için teşekkür ederim, Bahsettiğiniz IDE versiyonu mu yoksa compiler mı? Ben Microchip dünyasına çok yabancıyım, bu sebeple her türlü kullanışlı ip ucuna açığım. Doğru versiyonu bulmak açısından, proje dosyalarında bir yerlerde IDE'nin veya compilerın versiyonu yazıyor olma ihtimali var mı acaba?
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: mehmet - 05 Ağustos 2022, 12:22:00
Derleyici olmalı. Proreus Proteus üzerinde
gelen versiyonu ile deneyin.
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: volkii - 05 Ağustos 2022, 13:43:23
Alıntı yapılan: mehmet - 05 Ağustos 2022, 12:22:00Derleyici olmalı. Proreus üzerinde
gelen versiyonu ile deneyin.

Proreus nedir acaba?
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: volkii - 05 Ağustos 2022, 13:52:50
nbproject klasörü altında, configuration.xml dosyasında compiler versiyonu yazıyormuş.
Başlık: Ynt: XC8'de assebmly ve C konudun birlikte kullanımında IDE'nin verdiği hatalar
Gönderen: volkii - 05 Ağustos 2022, 16:28:24
Çok şükür projeleri derleyebiliyorum. Sadece derleyici değil packet versiyonu da önemliymiş anlaşılan. Eski bir paket yükleyince çalıştı. Düzgün config ayarları aşağıdaki gibidir:









(https://i.ibb.co/ry3FjDR/IDE-Ayarlari.png) (https://ibb.co/ry3FjDR)