PDA

View Full Version : Giúp em tìm cách khác phục lỗi trong mplink


Ngoc Du
16-07-2006, 11:17 PM
Chào các bác!
Em có làm một project dùng MPLAB IDE v7.31 gồm có 4 file .asm; 1 file .inc và một file .LKR .
Khi build all thì có lỗi thông báo như sau các bác giúp em xem tại sao lại có lỗi đó và khắc phục thế nào?
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" "E:\Output files for pic\NTDV\16C765.LKR" "E:\Output files for pic\NTDV\aMain.o" "E:\Output files for pic\NTDV\bdescript.o" "E:\Output files for pic\NTDV\chidclass.o" "E:\Output files for pic\NTDV\dusb_ch9.o" /m"RCMF.map" /o"RCMF.cof"
MPLINK 4.02, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - could not find definition of symbol 'PutEP1' in file 'E:\Output files for pic\NTDV\aMain.o'.
Errors : 1


Khi vào help thì được trả lời như sau:
Could not find definition of symbol 'symName' in file `filename'.
A symbol symName is used without being defined in file filename

Cảm ơn các bác trước

namqn
17-07-2006, 12:28 AM
Cái symbol 'PutEP1' của bạn được dùng trong 'aMain.asm', nhưng chưa từng được định nghĩa (bằng EQU) ở đâu đó trong 'aMain.asm' hay trong các tập tin .inc mà bạn đã dùng.

Trong tập tin 'P16C765.inc' rõ ràng không có định nghĩa cho ký hiệu này.

Nếu bạn biết địa chỉ của nó, giả sử đó là một thanh ghi, thì bạn có thể định nghĩa nó bằng EQU ngay trong tập tin mà bạn dùng nó.

Thân,

Ngoc Du
17-07-2006, 12:57 AM
Đúng là PutEP1 em dùng ở 'aMain.asm', PUTEP1 là một macro được khai báo như sau (marco viết trong file 'def.inc')
PUTEP1 macro
PutEP1
global PutEP1
...
return
endm

có một cái macro PUTEP2 cũng được khai báo tương tự như PUTEP1 ở trên và cũng nằm trong file 'def.inc'

PUTEP2 macro
PutEP2
global PutEP2
...
return
endm


Trong file 'aMain.asm' có khai báo
#include "def.inc"
extern PutEP1
extern PutEP2


Và lạ ở một điều nữa là em không sửa gì cái project đó cả mà chỉ buld all lại một lần nữa thì nó báo lỗi sau
Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" "E:\Output files for pic\NTDV\16c765.lkr" "E:\Output files for pic\NTDV\aMain.o" "E:\Output files for pic\NTDV\bdescript.o" "E:\Output files for pic\NTDV\chidclass.o" "E:\Output files for pic\NTDV\dusb_ch9.o" /o"RCMF.cof" /M"RCMF.map"
MPLINK 4.02, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - could not find definition of symbol 'PutEP2' in file 'E:\Output files for pic\NTDV\aMain.o'.
Errors : 1

Không biết có phải do MLAB IDE hay Mplink có vấn đề hay không

namqn
17-07-2006, 10:44 PM
Hai cái macro PUTEP1 và PUTEP2 thì ok, nhưng 2 symbol PutEP1 và PutEP2 thì có vẻ không ổn, chúng được khai báo (declare) là global, nhưng lại không được định nghĩa (define). Do đó mới có thông báo lỗi "Could not find definition ...". Cần phân biệt khai báo với định nghĩa.

MPLINK biết được hai symbol đó là symbol toàn cục, nhưng không biết chính xác chúng là cái gì, mang giá trị bao nhiêu.

Thân,

Ngoc Du
18-07-2006, 05:46 AM
Em cảm ơn bác namqn đã quan tâm giúp đỡ em. Em đã tìm ra nguyên nhân gây lỗi rồi. Đúng là em đã khai báo các nhãn PutEP1 và PutEP2 trong các macro PUTEP1 và PUTEP2 nhưng do em sơ ý chưa gọi đến các macro ở một chỗ bất kỳ nào đó nên đoạn code viết trong macro chưa được tạo ra ở một chỗ bất kỳ nào trong file .o. Trong các macro em lại tạo các chương trình con PutEP1 và PutEP2, các chương trình con này được gọi trong khi macro chưa được gọi một lần nào nên đương nhiên là không tồn tại 2 cái nhãn này trong file .o.

nily
28-08-2006, 07:00 PM
các bác ơi giúp em với ,cái này sửa thế nào thế ?
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000000, length=0x00000012
Errors : 1

namqn
28-08-2006, 09:23 PM
các bác ơi giúp em với ,cái này sửa thế nào thế ?
MPLINK 4.04, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.org_0' can not fit the absolute section. Section '.org_0' start=0x00000000, length=0x00000012
Errors : 1
Bạn post phần code của bạn lên đi. Linker không thể đặt đoạn code mà bạn đã tạo ra.

Thân,

nily
31-08-2006, 06:05 PM
Đoạn code của em đơn giản thế này thôi .quick buid thi dc rồi mà sao buidall thi báo lỗi
#include <p16f877a.inc> ;file hearder dinh kem
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;khai bao configuration bit
;-------------------------------------
;Bat dau chuong trinh
;-------------------------------------
ORG 0x000
goto start
start
bsf STATUS,RP0 ;chon bank 2 de cau hinh thanh ghi trisb
bcf STATUS,RP1
clrf TRISB ;cau hinh portb la port ra
bsf STATUS,RP0 ;chon bank 0
bsf STATUS,RP1
movlw b'00110110';gan gia tri cho port b
movwf PORTB
loop
goto loop ;vong lap vo tan de ket thuc chuong trinh
END

namqn
31-08-2006, 06:39 PM
Đoạn code của em đơn giản thế này thôi .quick buid thi dc rồi mà sao buidall thi báo lỗi
#include <p16f877a.inc> ;file hearder dinh kem
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;khai bao configuration bit
;-------------------------------------
;Bat dau chuong trinh
;-------------------------------------
ORG 0x000
goto start
start
bsf STATUS,RP0 ;chon bank 2 de cau hinh thanh ghi trisb
bcf STATUS,RP1
clrf TRISB ;cau hinh portb la port ra
bsf STATUS,RP0 ;chon bank 0
bsf STATUS,RP1
movlw b'00110110';gan gia tri cho port b
movwf PORTB
loop
goto loop ;vong lap vo tan de ket thuc chuong trinh
END
Lệnh build all để build một project. Nếu bạn quick build được thì có nghĩa là bạn chỉ build chương trình đơn giản với 1 tập tin .asm thôi. Để dùng lệnh build all thì bạn phải tạo một project, bạn xem hướng dẫn trong tài liệu 'MPLAB IDE Quick Start Guide' (DS51281, phiên bản hiện thời là DS51281F), ở chương 2, về cách tạo một project trong MPLAB IDE.

Link để download:
http://www.microchip.com/Microchip.WWW.SecureSoftwareList/secsoftwaredownload.aspx?device=en019469&lang=en&ReturnURL=http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002#

Thân,

Jerry
03-10-2006, 10:08 AM
To nily : Bạn click đúp vào file 16f877.lkr trong phần linker scripts của project ra, sau đó bạn sẽ nhìn thấy dòng chữ này :
CODEPAGE NAME=vectors START=0x00 END=0x0D PROTECTED

Bạn sửa thành :
CODEPAGE NAME=vectors START=0x00 END=0x0020 PROTECTED

sau đó dịch lại, đảm bảo OK.