Kütüphane Hataları

Başlatan Tagli, 02 Ağustos 2014, 13:24:22

Tagli

Kütüphanelerde hatalar olabiliyor. Bu başlık altında denk geldiklerimizi paylaşalım.

Az önce yakaladığım, XC16'nın (v1.21) Quadrature Encoder Interface (QEI) kütüphanesi ile ilgili. Hatalı fonksiyon ConfigIntQEI ise şu şekilde belgelendirilmiş:
Alıntı Yap3.2         ConfigIntQEI

Function Prototype
   
void ConfigIntQEI(unsigned int config);


Include
   
qei.h


Description
   
This function Configure the QEI Interrupt.


Arguments

config - QEI interrupt priority and enable/disable information as defined below.

QEI Interrupt Enable/Disable

   QEI_INT_ENABLE

   QEI_INT_DISABLE

QEI Interrupt Priority

   QEI_INT_PRI_0

   QEI_INT_PRI_1

   QEI_INT_PRI_2

   QEI_INT_PRI_3

   QEI_INT_PRI_4

   QEI_INT_PRI_5

   QEI_INT_PRI_6

   QEI_INT_PRI_7


Return Value

None


Remarks
   
This function clears the Interrupt Flag bit, sets the interrupt priority and enables/disables the interrupt.


Source File
   
ConfigIntQEI.c


Code Example
   
ConfigIntQEI(QEI_INT_ENABLE & QEI_INT_PRI_1);

Buradan anladığımız kadarıyla  QEI_INT_DISABLE sabitinin QEI kesmesini kapatması gerekiyor. Ama gerçekte kapatmıyor. Neden? Cevap qei.h dosyasında gizli. Bu dosyada sabit şöyle tanımlanmış:
#define QEI_INT_DISABLE             0xFF7F  /* Clear the Interrupt enable bit */


Şimdi dsPIC30F2010'un datasheet'ine dönüp QEIIE bitinin nerede olduğuna bakarsak... IEC2 register'ının 8. biti (0'dan başlarsak). Ama yukarıda tanımlanan 0xFF7F değeri 8. değil 7. biti sıfırlıyor, yani PWM kesmeleri ile ilgili biti.

Siz de bir kontrol edin, yanlışım olmasın.
Gökçe Tağlıoğlu

kimlenbu

PIC kullanmasam da benim gibi hatayı en son kütüphanede arayanlar için güzel bir uyarı olmuş :)

Tagli

Bu arada, bu tür hataları Microchip'e nasıl bildirebiliriz? Twitter hesaplarına tweet atsak olur mu acaba?
Gökçe Tağlıoğlu

yldzelektronik

Alıntı yapılan: Tagli - 02 Ağustos 2014, 14:23:15
Bu arada, bu tür hataları Microchip'e nasıl bildirebiliriz? Twitter hesaplarına tweet atsak olur mu acaba?

cn@microchip.com adresinden sürekli düzeltme mailleri alıyorum.Denemedim ama iş yarayan bir adres olabilir.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

subram

http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

Tagli

http://www.microchip.com/support/hottopics.aspx adresinden Support Ticket oluşturup durumu anlattım.

Bu arada, hatayı yanlış tespit etmişim. Durumun bit numarası ile ilgisi yokmuş. Hatamı ConfigIntQEI.c dosyasına bakınca gördüm (support klasörünün içinden erişilebiliyor). Fonksiyon şöyle tanımlanmış:

void ConfigIntQEI(unsigned int config)
{
    _QEIIF = 0;                 /* clear Interrupt flag */
    _QEIIP = config & 0x07;     /* bits <2:0> is the priority*/
    _QEIIE = (config & 0x8)>>3; /* bit 3 is interrupt enable/diable */
}


Yani QEI_INT_DISABLE sabitinin 0xFF7F değil, 0xFFF7 olması gerekiyordu.
Gökçe Tağlıoğlu