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)
Asembler yazımında değişikliler
yapılmış.
Eski versiyon ile derlemeyi deneyin
ya da asm dosyalarını elden geçirin.
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?
Derleyici olmalı. Proreus Proteus üzerinde
gelen versiyonu ile deneyin.
Alıntı yapılan: mehmet - 05 Ağustos 2022, 12:22:00Derleyici olmalı. Proreus üzerinde
gelen versiyonu ile deneyin.
Proreus nedir acaba?
nbproject klasörü altında, configuration.xml dosyasında compiler versiyonu yazıyormuş.
Ç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)