Pic Programı Derleme MPASM Hata Mesajları
Pic programını ASM
olarak hazırlamak özen ve sabır ister. Programa başlama niyetiniz ile
birlikte kontrolu ele almanız gerekmektedir. Bu o kadarda zor değildir.
Her uğraşta sahip olunan bilgi o işin sonucunu belirler. MPASM hata
mesajları hakkında Türkçe içerikli yeterince döküman bulamayınca, kendi
örneklemeli hata mesajı tablomu oluşturmak istedim. Benim burada yapmak
istediğim, Microchip firmasının yayınladığı hata listesini tercüme etmek
değil, kullandığın Pic programıyla oluşan genel geçer hata listesini
oluşturmaktır. Bu yazıda liste tam olarak verilmekte, sadece sık
karşılaşılan hatalar incelenmektedir. Bu konuda okuyucuların katkısı
olursa sevinirim.
Hata mesajlarını incelemek için daha önce sitede yayınlanan 16F628 ile gerçekleştirilen "Pic 16F628 ile Karaşimşek Devresi"
programını kullanacağım. krsmsk1.asm dosyası, açıklamalar,
mikrokontrolör tanıtımı, dosya iliştirme (include), değişken tanımlama,
portların çalışma şartlerının belirtilmesi (girişler/çıkışlar ve
16F628'e özel tanıtımlar), başlangıç ayarları, program çalışma bloğu ve
bitişten oluşmakatadır.
Bu programı MPASM'e derlettiğimde, hata mesajı sayısını 0 gösterdi (Errors:0)
Burada bize program içerisinde kaç tane hata olduğunu bildiriyor. Bu
hata mesajları ise yine asm dosyanın adı ile .err uzantılı olarak bize
dosyalanıyor. bu err uzantılı dosyayı bir yazı editörü ile açarak (not
defteri) listelenen hata mesajlarının hepsini buluruz.
Bu ifade ile Pic'de hata bulunmadığını ve programın Pic 16F628'e programlanabilir olduğunu anlıyoruz.
Şimdi bu programda hatalar oluşturarak hata mesajlarını inceleyelim:
Bazı
hatalar, yapılan tek hata olmasına rağmen, bu hatadan kaynaklanan diğer
hataları da listeler. Yani bir hatanın sebebi başka bir hata olabilir.
Yani derleme sonucunda eğer 10 hata uyarısı aldıysak, derleme yapılırken
10 defa sorunla karşılaşılmış anlamına gelir, yoksa 10 tane hata var
anlamına gelmeyabilir, ama bu durum olabilirde tabii. Hata 113'de benzer
şekilde 1 hata olup çok hata uyarısı alabildiğimizin örneği var,
örneğin bir değişkenin tanımlanmasında hata varsa ve bu değişkeni biz 10
yerde kullandıysak hatamız 1 yerde olmasına rağmen 10 tane hata uyarısı
alırız. Bu durumda asıl hatalı olan yeri düzelttiğimizde
sorun düzelir. Mesela, değişkeni tanımlarsak bütün sorunlar çözülmüş
olur. Ya da hatalarınızın çeşitliliğinin fazlalığından dolayı bir kısmı
çözülmüş olur. Adım adım düzeltme yaparsak içinden çıkılamaz sorun
yoktur.
MPASM assembler hataları numaralı listesi aşağıdadır:
101 ERROR:
Kullanıcı hatası, yanlış yönlendirme.
102 Out of memory
Dahili işlemlerde veya tanımlamalarda (#define) makrolar için yetersiz bellek.
103 Symbol table full
Dahili sembol tablosu için yeterli bellek yok.
104 Temp file creation error
Geçici dosya oluşturulamıyor. Diskteki boş alanı kontrol ediniz.
105 Cannot open file
Dosya
açılamıyor. Dosyayı kontrol ediniz. Yazmaya karşı korunmalı olabilir.
Salt okunur olabilir. CD'de olabir. Dosyanın özelliklerine bakarak salt
okunurluğunu kaldırabilir veya yazdırılabilir bir ortama
taşıyabilirsiniz.
Örnek:
Error[105] C:KRSMSK1KRSMSK1.ASM 7 : Cannot open file (Include File "M16F628.INC" not found)
Include dosyasının adı yanlış yazıldığından hata veriyor
106 String substitution too complex
Dizileri oluşturuken karıştırmak. #define'leri kontrol edin.
107 Illegal digit
Geçersiz
sayı kullanmak. Geçerli sayılar, Binary (ikilik) için; 0-1, Octal
(sekizlik) için; 0-7, decimal (ondalık) için; 0-9, hexadecimal
(onaltılık) için;0-9, a-f, ve A-F.
108 Illegal character
Etiketlerde
geçersiz karakter kullanmak. Geçerli karakterler: alfabetik olanlar
(a..f, A..F), sayısal (numeric) olanlar (0-9), the altçizgi (_), ve soru
işareti. Etiketlere sayısal bir karakterle başlanmaz. Hatalı yazılışlarda.
Örnek:
Error[108] C:KRSMSK1KRSMSK1.ASM 49 : Illegal character (2)
Mesela DONGU2 olması gerekirken DONGU 2 şeklinde 2 ayrı yazılırsa.
109 Unmatched (
Parantezi açtıktan sonra kapatmamak. Örnek,
DATA (1+2
110 Unmatched )
Parantezi açmadayı unutarak kapatmak. Örnek,
DATA 1+2)
111 Missing symbol
Eksik sembol.
Örnek:
Error[111] C:KRSMSK1KRSMSK1.ASM 1 : Missing symbol
Programın açıklama satırlarının başında ( ; ) noktalı virgül bulunmazsa.
;=============== olması gereken satır,
=============== şeklinde olursa.
112 Missing operator
Aritmetik operatöre eksik ifade (tanım) vermek. Geçersiz işlem tanımlandığında.
Örnek:
DATA 1 2
Örnek:
Error[112] C:KRSMSK1KRSMSK1.ASM 30 : Missing operator
İşlemde bir eksiklik olduğunu, geçersiz bir işleme zorlandığını ifade ediyor.
Mesela: Bir komut satırının devamındaki açıklama yazısınnın başına noktalı virgül ( ; ) konulması unutulursa bu hatayı veriyor.
CALL BEKLE ;Bekleme Yapılacak satırı CALL BEKLE Bekleme Yapılacak şeklinde yazılırsa. Bu hatada 3 tane hata var diyor.
113 Symbol not previously defined
Sembolü önceden tanımlamamak. Olması gereken veya tanımlamaya uymayan değişken hataları
Error[113] C:KRSMSK1KRSMSK1.ASM 9 : Symbol not previously defined (_CP_OFF)
Error[113] C:KRSMSK1KRSMSK1.ASM 9 : Symbol not previously defined (_DATA_CP_OFF)
...
Error[113] C:KRSMSK1KRSMSK1.ASM 37 : Symbol not previously defined (PORTB)
Error[113] C:KRSMSK1KRSMSK1.ASM 38 : Symbol not previously defined (PORTB)
Bu hatalar programda,
INCLUDE "P16F628.INC"
satırının bulunmamasından kaynaklandı.
Burada 19 tane hata listelendi. Asklında hata sadece INCLUDE "P16F628.INC" satırının olmamasından kaynaklanmaktadır, bu satır eklendiğinde hata düzeliyor.
Error[113] C:KRSMSK1KRSMSK1.ASM 9 : Symbol not previously defined (_INTRC_OSC_CLOKOUT)
Bu hata _INTRC_OSC_CLKOUT tanıtımının _INTRC_OSC_CLOKOUT şeklinde yapılmasından kaynaklandı. _INTRC_OSC_CLOKOUT yazısının bilinmeyen bir şey olduğunu ifade ediyor.
Error[113] C:KRSMSK1KRSMSK1.ASM 52 : Symbol not previously defined (SAYAC1)
Bu hata SAYAC1
in bir değişken olarak, program içinde kullanılmasına rağmen program
girişinde değişken olarak tanıtılmamasından kaynaklanmaktadır. SAYAC1 EQU h'20' programa yazılırsa hata düzelir.
Error[113] C:KRSMSK1KRSMSK1.ASM 51 : Symbol not previously defined (DONGU2)
Bu hata, alt programın başında başlığının yazılmasının unutulmduğunda oluşuyor.
DONGU2 (unutmamak gerekiyor)
DECFSZ SAYAC2, F
GOTO DONGU2
114 Divide by zero
0 'a bölmek.
115 Duplicate label
Etiketi çoğaltmak.
116 Address label duplicated or different in second pass
Adres etiketini çoğaltmak veya başka yerde pas geçmek (unutmak).
117 Address wrapped around 0
0
sayısını adrese vermek. For PIC12/16 devces, the location counter can
only advance to 0xFFFF. After that, it wraps back to 0. Error 117 is
followed by error 118.
118 Overwriting previous address contents
Geriye doğru adres yazmak.
119 Code too fragmented
Kod parçalanmış.
120 Call or jump not allowed at this address
Adreste izin verilmeyen yere atlatmak veya izin verilmeyen yerden çağırmak.
121 Illegal label
Geçersiz etiket.
122 Illegal opcode
Geçersiz işlem kodu. Geçersiz bir işlem kodu bulunduğunu ifade ediyor.
Örnek:
Error[122] C:KRSMSK1KRSMSK1.ASM 11 : Illegal opcode (h)
Bu hatada, SAYAC1 EQU h'20' olması gerken satırda EQU yazılması unutulacak olursa, SAYAC1 h'20' şeklinde hatalı yazılırsa.
123 Illegal directive
Geçersiz yön/yönlendirme.
124 Illegal argument
Geçersiz değişken, örnek:
bekleme yeri
125 Illegal condition
Geçersiz bir durumun (koşulun) oluşması.
126 Argument out of range
İşlem kodunda, değişkende veya yönlendirmede geçerli değerin dışına taşma çıkma. Örnek, TRIS 10.
127 Too many arguments
Karışık değişken çağırmak. Karışık nitelikli değişkene sahip makroyu çağırmak.
128 Missing argument(s)
Eksik değişken. Geçersiz Bir değişken tanımlandığında
Error[128] C:KRSMSK1KRSMSK1.ASM 38 : Missing argument(s)
Mesela: BTFSS PORTB, 0 yerine BTFSS PORTB; 0 yazmışsanız,
Ayrıca, konfigurasyon ayarlarında eksiklik veya yanlışlık varsa bu hatayı veriyor.
129 Expected
Bitişi veya çıkışı sağlayamama.
Örnek:
Error[129] C:KRSMSK1KRSMSK1.ASM 58 : Expected (END)
End yazmadan programın bitirilmesi halinde.
130 Processor type previously defined
A different family of processor is being selected.
131 Processor type is undefined
İşlemci tipi belirtilmemiş.
Örnek:
Error[131] C:KRSMSK1KRSMSK1.ASM 9 : Processor type is undefined
Error[122] C:KRSMSK1KRSMSK1.ASM 15 : Illegal opcode (PORTB)
Error[122] C:KRSMSK1KRSMSK1.ASM 16 : Illegal opcode (STATUS)
... hataları listelemeye devam ediyor.
Programda Pic Processor tanıtım satırının bulunmaması durumunda bu hata mesajını veriyor.
LIST P=16F628
satırının
eklenmediğinde oluşan bir hata. Toplam 28 tane hata olduğu bildirildi
ama aslında bir tane hata var. Bu hata haricindeki hatalar
microişlemcinin programa tanıtılmamasından dolayı program bütününde
oluşan ilgili hataları göstermektedir. Burada eksik satır düzeltilirse
tüm hatalar düzelmiş olur.
132 Unknown processor
Bilinmeyen işlemci. Tanıtılan işlemçi geçerli olanlardan seçilmemiş..
133 Hex file format INHX32 required
32K HEX dosya formatı gerekli.
134 Illegal hex file format
Tanımlamada geçersiz HEX formatı yapılmış.
135 Macro name missing
Makro adı yok. Geçerli makro adı tanımlanmamış.
136 Duplicate macro name
Makro adının kopyası/tekrarı yapılmış.
137 Macros nested too deep
The maximum macro nesting level was exceeded.
138 Include files nested too deep
The maximum include file nesting level was exceeded.
139 Maximum of 100 lines inside WHILE-ENDW
A while-endw can contain at most 100 lines.
140 WHILE must terminate within 256 iterations
A while-endw loop must terminate within 256 iterations. This is to prevent infinite assembly.
141 WHILEs nested too deep
The maximum while-endw nesting level was exceeded.
142 IFs nested too deep
The maximum if nesting level was exceeded.
143 Illegal nesting
Macros,
if's and while's must be completely nested; they cannot overlap. If you
have an if within a while loop, the endif must come before the endw.
144 Unmatched ENDC
endc found without a cblock.
145 Unmatched ENDM
endm found without a macro definition.
146 Unmatched EXITM
exitm found without a macro definition.
147 Directive/operation only allowed when generating an object file
The
instruction/operand shown only has meaning when a linkable object file
is generated. It cannot be used when generating absolute code.
148 Expanded source line exceeded 200 characters
The
maximum length of a source line, after #define and macro parameter
substitution, is 200 characters. Note that #define substitution does not
include comments, but macro parameter substitution does.
149 Directive only allowed when generating an object file
Certain
directives, such as global and extern, only have meaning when a
linkable object file is generated. They cannot be used when generating
absolute code.
150 Labels must be defined in a code or data section when making an object file
When
generating a linkable object file, all data and code address labels
must be defined inside a data or code section. Symbols defined by the
equ and set directives can be defined outside of a section.
151 Operand contains unresolvable labels or is too complex
When generating an object file, operands must be of the form [high|low]([relocatable address label]+[offset]).
152 Executable code and data must be defined in an appropriate section
When generating a linkable object file, all executable code and data declarations must be placed within appropriate sections.
153 Page or Bank bits cannot be evaluated for the operand
The operand of a pagesel, banksel or bankisel directive must be a relocatable address label or a constant.
154 Each object file section must be contiguous
Object
file sections, except udata_ovr sections, cannot be stopped and
restarted within a single source file. To resolve this problem, either
name each section with its own name or move the code and data
declarations such that each section is contiguous. This error will also
be generated if two sections of different types are given the same name.
155 All overlaid sections of the same name must have the same starting address
If multiple udata_ovr sections with the same name are declared, they must all have the same starting address.
156 Operand must be an address label
When
generating object files, only address labels in code or data sections
may be declared global. Variables declared by the set or equ directives
may not be exported.
157 ORG at odd address
For PIC18 devices, you cannot place org at an odd address, only even. Consult your device data sheet.
158 Cannot use RES directive with odd number of bytes
For PIC18 devices, you cannot use res to specify an odd number of bytes, only even. Consult your device data sheet.
159 Cannot use FILL directive with odd number of bytes
For PIC18 devices, you cannot use fill to fill with data an odd number of bytes, only even. Consult your device data sheet.
160 CODE_PACK directive not available for this part;substituting CODE
The code_pack directive can only be used with byte-addressable ROM.
161 Non-negative value required for this context.
Some contexts require non-negative values.
162 Expected a section name
Some
operators and pseudo-operators take section names as operands. The
lexical form of a section name is that of an identifier, optionally
prefixed with a `.'.
163 __CONFIG directives must be contiguous
Do not place other code between __config directive declarations.
164 __IDLOC directives must be contiguous
Do not place other code between __idloc directive declarations.
165 extended mode not available for this device
This PIC18 device does not support extended mode.
166 left bracket missing from offset operand
The left bracket is missing from an offset, i.e., [0x55.
167 right bracket missing from offset operand
The right bracket is missing from an offset, i.e., 0x55].
168 square brackets required around offset operand
Square brackets are required around an offset, i.e., [0x55]
169 access bit cannot be specified with indexed mode
When using indexed mode, the access bit cannot be specified.
170 expression within brackets must be constant
The expression specified within brackets is not a constant value.
171 address specified is not in access ram range of [0x60, 0xFF]
When making use of Access RAM, addressing must occur within the specified Access Bank range.
172 PCL, TOSL, TOSH, or TOSU cannot be destinatin of MOVFF or MOVSF
These registers cannot be written to with movff or movsf commands.
173 source file path exceeds 62 characters
MPASM
assembler has a 62-character limit on source file path names, i.e., the
length of the path plus the name of the file. See Assembler Limitations
for more information.
### UNKNOWN ERROR
An internal application error has occurred. (### is the value of the last defined error plus 1.)
Yorumlarınız
bu hata mesajlarının tümünü bulabileceğimiz biyer varmıdır
Bir yorum ekleyin
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>