Site içi Arama

Ara

Pic Programı Derleme MPASM Hata Mesajları

Mehmet Yılmaz - 10.08.2005

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

Adana'da dünyaya geldi. Televizyon tamirciliğınde çırak olarak erken dönemde iş hayatına başladı. Daha sonraları Adana ve Ankara'da imalat, bilgisayar ve danışmanlık sektöründe iş hayatına devam etti. Şu anda kendisine ait işyerinde çalışmalarına devam etmektedir.
Web adresi: www.teknimer.com
E-posta: mehmet@teknimer.com
Sayfa Etiketleri:Pic Asm (13)
İçerik Yan Blok
Konular
Tasarım: Teknimer Teknoloji
Yukarı