Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: sifirzero - 01 Ekim 2023, 00:00:44

Başlık: Kütüphane yazma
Gönderen: sifirzero - 01 Ekim 2023, 00:00:44
Merhaba arkadaşlar. BMP180 basinc sesnorunun datasheetine bakarak. nasil kutuphane yazabiliriz. ve diger sensorlerde kutuphane yazmak istesek hangi methot yontem kullaniliyor. Hic yazmadim bilmiyorum yazi veya video varmi ogrenmek istiyorum.
Başlık: Ynt: Kütüphane yazma
Gönderen: Mucit23 - 01 Ekim 2023, 10:57:51
Normalde sensörün haberleşmesi için protokoller teknik dökümanda anlatılır. Kütüphanelerde bu haberleşmenin gerçekleşmesi için gerekli protokoller gerekli matematiksel hesaplar yapılır. Bunn fonksiyonlar yazılır. Bmp180 için sıfırdan kütüphane yazmaya gerek yoktur. Hazır birçok kütüphane bulabilirsiniz. Bu kütüphaneleri inceleyip mantığını kavramak ve kendi platformunuza uydurmanız daha doğru olur.
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 02 Ekim 2023, 22:36:16
Sıfırdan yazmak için neleri öğrenmem gerekli. herhangi bir sensörün kütüphanesini yazmak istesek. video veya belge var mı. örnek bakabileceğimiz
Başlık: Ynt: Kütüphane yazma
Gönderen: fahri- - 03 Ekim 2023, 09:14:42
Hangi dili hangi derleyiciyi kullanıyorsun?
CCS C kullanıyorsan kütüphanesinde yüzlerce örnek var. O örneklerdeki kodları ve kodları yazılan malzemelerin datasheetlerini inceleyebilirsin.
Başlık: Ynt: Kütüphane yazma
Gönderen: alikeskinkilic - 04 Ekim 2023, 10:45:11
Asm kullananların sürekli yaptığı şey aslında tamda bu her program için harici donanıma kütüphane yazmak.ilk önce harici donanımın hangi haberleşme yöntemini kullandığını bilmeli ve ona hakim olmalısın daha sonrasında harici donanımın zorunlu "register,At,gibi" ayarlarını yapacak kadar bilgiyi ürünlerin data sayfasında bulabilirsin onları bir alt program ile yazar ve ana program başlangıcında çağırırsın Pic asm için örnek koyayım aşağıya belki işine yarar
;//////////////////////ADXL345//////// STANDART AYARLAR///////////////////////////
;////////////////////////////////////////////////////////////////////////////////////////////
;
ADXL_BEGIN    MACRO          ;    CSN PORT VE BACAK SEÇİMİ

        BANKSEL    TRISA
    ;    MOVLW    0X10
    ;    IORWF        TRISB    ,F
        BSF        TRISB    ,4
        BCF        TRISB    ,6   
        BCF        TRISC    ,7
        BCF        TRISC    ,6
       
        MOVLW    0XC0
        MOVWF    SSPSTAT
        BANKSEL    SSPCON
        MOVLW    0X30
        MOVWF    SSPCON
       
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN   
        MOVLW    0XFF
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        CALL        ADXL_PAUS100
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0X27
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X00
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN            ;100 HZ DATA ÇIKIŞ HIZI
        CALL        ADXL_PAUS1        ;DOKUNMA SENSÖRÜ İPTAL
        BCF        CSN
        MOVLW    0X2D
        MOVWF    SSPBUF            ;SÜREKLİ ÖLÇÜM MODU
        CALL        ADXL_SEND
        MOVLW    0X08
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0X31                ;2G ÖLÇÜM. / SAĞA YASLI 10 BİT ÇÖZÜNÜRLÜK/4 KABLO SPİ MODU
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X00
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        BSF        CSN
        CALL        ADXL_PAUS100
        GOTO        ADXL_EXT   
ADXL_PAUS100:       
              movlw          .186
                movwf          R0
                movlw          .4
                movwf          R1
                movlw          .2
                movwf          R2
                decfsz          R0,F
                goto            $-1
                decfsz          R1,F
                goto            $-3
                decfsz          R2,F
                goto            $-5
        RETURN
ADXL_PAUS1:   

                movlw      .6
                movwf      R0
                decfsz      R0,F
                goto        $-1
                nop
        RETURN
ADXL_SEND:
        BTFSS      PIR1 ,SSPIF
            GOTO        $-1 
            BCF            PIR1  ,SSPIF
            RETURN
ADXL_EXT:
        ENDM   
;******************************************************************************************
;//////////////////ADXL OKUMA///////////////////////////////////////////////////////
;/////////////////ADXL_READ        X,Y,Z   
ADXL_READ MACRO    ?0,?1,?2
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB2
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?0                    ;X
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB3
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?0+1                ;X+1
;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY   
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB4
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88                ;DUMMY       
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?1                    ;Y
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB5
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?1+1                ;Y+1
;ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ   
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB6
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?2                    ;Z
        BSF        CSN
        CALL        ADXL_PAUS1
        BCF        CSN
        MOVLW    0XB7
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVLW    0X88
        MOVWF    SSPBUF
        CALL        ADXL_SEND
        MOVF        SSPBUF    ,W
        MOVWF    ?2+1                ;Z+1
        BSF        CSN
        CALL        ADXL_PAUS100
        ENDM
kodda SPI ile haberleşen ADXL345 için ayarlar ve okuma makrosu yer alıyor dosyayı .inc dosyası olarak kaydedip ana programa INCLUDE "sensor.INC" olarak eklediğimizde artık ana programda sadece" ADXL_BEGIN"yazdığımızda adxl nin ayarları yapılır.ADXL_READ x,y,z yazdığımızda x,y,z değişkenlerimize okunan veriler yazılır .kütüphane böyle olur.bu diğer diller için de aynı aşağı yukarı donanımın pdf sini okumak anlamak ve ayarlarını yapabilecek kadar iletişim protokolüne hakim olmak zorundasınız.tabi hazır kütüphaneler de çözüm
Başlık: Ynt: Kütüphane yazma
Gönderen: alikeskinkilic - 04 Ekim 2023, 10:52:09
Tabi birde C cilerin körelmiş pdf okuma paradoksunu aşmaları gerekir. ;)  ::op
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 04 Ekim 2023, 10:57:41
Nettenden arastirdim. kimse bu konu hakkinda yazi veya video cekmemis. Çok onemli alan diye dusunuyorum. örnek ds18b20 veri tablosuna gore bir kutuphane gerekli. bunu yazmam icin asama asama ilerleme ve yazilan bir örnek bilgi.

04 Ekim 2023, 10:58:27
Hazir kutuphaneler isimize tabiki yariyordur. ama kendimiz neden yazamiyoruz.
Başlık: Ynt: Kütüphane yazma
Gönderen: gevv - 04 Ekim 2023, 11:35:02
Bir ara @Tagli hocam uğraşmıştı

Eski konular var

https://www.google.com/search?q=k%C3%BCt%C3%BCphane+yazma+picproje+site%3Awww.picproje.org&oq=k&gs_lcrp=EgZjaHJvbWUqBggBEEUYOzIGCAAQRRg8MgYIARBFGDsyBggCEEUYOzIGCAMQRRg8MgYIBBBFGDwyBggFEEUYPTIGCAYQRRg5MgYIBxBFGDsyFggIEAAYgwEYiwMYpgMYqAMYsQMYigUyDQgJEC4YgwEYsQMYigXSAQgxNzcwajFqN6gCALACAA&client=ms-android-meizu&sourceid=chrome-mobile&ie=UTF-8

Prg.bilgim yok ama basit kütüphaneleri ve malzemenin datasheet dosyası incelenerek çözülebilir.

Birde ingilizce ve rusca arama yapın

Başlık: Ynt: Kütüphane yazma
Gönderen: alikeskinkilic - 04 Ekim 2023, 12:42:21
bunun ayrı bir eğitimi yok da ondan paylaşmıyor kimse birde Arduino, c falan hazır kütüphaneleri çok olduğu için kimse uğraşmıyor.ASM için kütüphane çalışması ben yapıyorum videolar da çekiyorum ama o da belliki işinize yaramayacak. Ama bir programlama dili biliyorsanız kullanacağınız harici ekipmanla iletişimi zaten  kütüphane olmadan da sağlayabilmeniz gerekiyor. kütüphane kullanmadan bağlantı yapabilmek için de kullanacağınız harici donanımı mecburen tanımanız gerekiyor .bilgi sayfasında iletişimi nasıl kuracağınız hangi registerlere hangi değerleri vereceğiniz açıkça yazılı oluyor. bence açın pdf dosyasını bir dil biliyorsanız en fazla 1 haftanızı alır ama sonrasında rahat edersiniz.
Başlık: Ynt: Kütüphane yazma
Gönderen: kudretuzuner - 04 Ekim 2023, 13:27:10
Merhaba,
Kütüphane nedir bilmem. Bir işi yapacaksam kafamda tasarlar yaparım. Örneğin geçmiş yıllarda MPX57xx basınç sensörünü kullandım. 0-5 volt arası Analog çıkış vermektedir. Hangi basınç değerinde hangi değeri veriyor bilmiyordum. Ben de 0-6 bar arasında çıkan analog değerleri 00-FF arası dijitale çevirip kurduğum düzenekle okudum ve de hangi barda ne göstermem gerektiğinin programını yazdım. Böylece dijital bir manometre ortaya çıkmıştı. Tabiidir ki bayağı bir yazılım ortaya çıktı. Kütüphane dediğiniz bu mudur?   videoda displayin ondalık (nokta) ledi yanmamaktadır                                                               https://www.youtube.com/shorts/L2-pvJRkWcE   
Başlık: Ynt: Kütüphane yazma
Gönderen: mehmet - 04 Ekim 2023, 14:38:00
Alıntı yapılan: alikeskinkilic - 04 Ekim 2023, 10:52:09Tabi birde C cilerin körelmiş pdf okuma paradoksunu aşmaları gerekir. ;)  ::op

Her "C" ci değildir.  8-)
Başlık: Ynt: Kütüphane yazma
Gönderen: alikeskinkilic - 04 Ekim 2023, 15:12:07
Alıntı yapılan: mehmet - 04 Ekim 2023, 14:38:00Her "C" ci değildir.  8-)
söylediklerinin %20 diyelim mehmet hocam.aslında kastettiğim her sensöre,mikro işlemciye özel birileri video çekip nasıl reg ayarlarının yapıldığını anlatmazki.işin mantığı bellidir mevcut kütüphane isteklerini karşılamıyor ve kütüphane yazmak istiyorsan.donanımın isterleri bellidir kütüphanenin farklı bir dili yokki programını yazdığın aynı dil ile bir alt program yazmalısın ha bunu üniversal tüm işlemcilerde çalışacak falan gibi birşey yapacaksan dile ve algoritma kurmaya  iyi derecede hakimiyet gereklidir farklı osc değerleri için farklı gecikmeler kurmalı falan tatavası çok,asıl önemli olan ise mecburen kullanacağın donanımın nasıl çalıştığını bilmelisin.yoksa başka birinin bildiği karadı ile yetinmeli ve onun kütüphanesini kullanmalısın. tavsiyem üniversal kütüphanelerin birsürü parametreyi if leyerek kontrol etme zorunluluğundan çok yavaş olması yüzünden işlemciye özel kütüphaneyi kendiniz yazmanız
Başlık: Ynt: Kütüphane yazma
Gönderen: kimlenbu - 04 Ekim 2023, 15:25:59
İyi bir kütüphane farklı işlemcilerle kullanılacak şekilde tasarlanmalı. Gene de ben sadece STM32 ile çalıştığım için bir kütüphane arayacak olursam direkt STM32 için olanı bulmaya çalışıyorum. Buglarını kontrol ediyorum, özellikle programımın çakılmasına sebep olacak "while" döngülerine timeout ekliyorum, hardfaulta sebep olabilecek sıkıntılar varsa önlemini alırım, gereksiz delay'lerden kurtulurum. Donanım hazır olmadan okuma/yazmanın sıkıntı çıkaracağı durumların önlemini alırım.

Örneğin i2c kullanan bir sensör için STM32'ye kütüphane yazacak olalım. Kolaya kaçarsak HAL Library için basitçe sadece init fonksiyonuna hangi i2c'yi kullanacağımızı parametre vererek yazabiliriz. Geri kalan her fonksiyonda bu parametreyi kullanırız. Sensör iletişimi nasıl olacaksa komutlar tek tek yanlarında açıklamalarıyla "define" edilir. örneğin kodda 0x07 adresine bir şeyler yolladığınızı veya okuduğumuzu düşünelim, okuyan adam ne olduğunu anlamakta zorlanır, ama yukarıda #define SICAKLIK_REGISTERI 0x07 derseniz kodu okuması da kolaylaşır.

Son olarak fonksiyolara @brief, @param, @return gibi açıklamarı da mutlaka yazmak gerekiyor, 3 ay sonra kendiniz yazdıysanız bile bir şey anlaşılmıyor.
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 04 Ekim 2023, 15:28:54
Cok guzel bilgiler. Tesekkurler arkadaslar.
Başlık: Ynt: Kütüphane yazma
Gönderen: Tagli - 04 Ekim 2023, 22:57:15
ASM'yi bırakalı çok oldu. Zamanında garip garip şeylerle uğraşmışım demek :)

Konu hakkındaki güncel görüşüm şu: Gömülü sistemlerde işlemci donanımına bağlı şeylerin kütüphanesi yazmak pek mümkün değil. Bu ancak işlemciniz belli ve sabit ise, veya altta STM32 HAL veya Arduino gibi ek bir donanım soyutlama katmanı varsa yapılabilir. Onu da zaten bir yerden diğerine taşıyamazsınız. Yani mesela Arduino için yazılmış MCP4922 DAC çipi kütüphanesi STM32 HAL altyapısı üzerinde çalışmayacak, çünkü SPI'ya erişim tamamen farklı.

Kaldı ki ben artık tüm gömülü sistem projelerimi olay tabanlı düşündüğüm ve inşaa ettiğim için kütüphanelerde alışık olduğumuz fonksiyon çağrısı mantığı işimi görmüyor. Bu tür sistemlerde fonksiyon çağrılarının yerini, bir "olay" (event) oluşturup bunu ilgili state machine'e atmak alıyor.

Bu arada bence üreticiler de sadece kendi işlemcileri için bile her derde deva kütüphane oluşturamıyorlar çünkü tek bir firmanın işlemcileri bile kendi içlerinde aileden aileye epey değişiklik gösterebiliyor. CubeMX gibi sistemlerin çıkmasının sebebi de bu bence: Parametrelere göre kütüphane sentezlemek. Ben sevemedim bir türlü bu tür şeyleri. İşe yararlıkları da tartışılır.

Donanımdan bağımsız şeylerin kütüphanesi olabilir tabi. Örneğin bir JSON string'i içinden belirli bir parametreyi falan çekmek veya CRC hesaplama gibi işler, donanımdan bağımsız fonksiyon çağrıları şeklinde ifade edilebilir.
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 04 Ekim 2023, 23:02:04
Alıntı yapılan: Tagli - 04 Ekim 2023, 22:57:15ASM'yi bırakalı çok oldu. Zamanında garip garip şeylerle uğraşmışım demek :)

Konu hakkındaki güncel görüşüm şu: Gömülü sistemlerde işlemci donanımına bağlı şeylerin kütüphanesi yazmak pek mümkün değil. Bu ancak işlemciniz belli ve sabit ise, veya altta STM32 HAL veya Arduino gibi ek bir donanım soyutlama katmanı varsa yapılabilir. Onu da zaten bir yerden diğerine taşıyamazsınız. Yani mesela Arduino için yazılmış MCP4922 DAC çipi kütüphanesi STM32 HAL altyapısı üzerinde çalışmayacak, çünkü SPI'ya erişim tamamen farklı.

Kaldı ki ben artık tüm gömülü sistem projelerimi olay tabanlı düşündüğüm ve inşaa ettiğim için kütüphanelerde alışık olduğumuz fonksiyon çağrısı mantığı işimi görmüyor. Bu tür sistemlerde fonksiyon çağrılarının yerini, bir "olay" (event) oluşturup bunu ilgili state machine'e atmak alıyor.

Bu arada bence üreticiler de sadece kendi işlemcileri için bile her derde deva kütüphane oluşturamıyorlar çünkü tek bir firmanın işlemcileri bile kendi içlerinde aileden aileye epey değişiklik gösterebiliyor. CubeMX gibi sistemlerin çıkmasının sebebi de bu bence: Parametrelere göre kütüphane sentezlemek. Ben sevemedim bir türlü bu tür şeyleri. İşe yararlıkları da tartışılır.

Donanımdan bağımsız şeylerin kütüphanesi olabilir tabi. Örneğin bir JSON string'i içinden belirli bir parametreyi falan çekmek veya CRC hesaplama gibi işler, donanımdan bağımsız fonksiyon çağrıları şeklinde ifade edilebilir.
Bir alanda ilerlemek gerekli ileri seviye olmaliyiz.
Başlık: Ynt: Kütüphane yazma
Gönderen: X-Fi - 05 Ekim 2023, 11:17:26
Alıntı yapılan: Tagli - 04 Ekim 2023, 22:57:15ASM'yi bırakalı çok oldu. Zamanında garip garip şeylerle uğraşmışım demek :)

Konu hakkındaki güncel görüşüm şu: Gömülü sistemlerde işlemci donanımına bağlı şeylerin kütüphanesi yazmak pek mümkün değil. Bu ancak işlemciniz belli ve sabit ise, veya altta STM32 HAL veya Arduino gibi ek bir donanım soyutlama katmanı varsa yapılabilir. Onu da zaten bir yerden diğerine taşıyamazsınız. Yani mesela Arduino için yazılmış MCP4922 DAC çipi kütüphanesi STM32 HAL altyapısı üzerinde çalışmayacak, çünkü SPI'ya erişim tamamen farklı.

Kaldı ki ben artık tüm gömülü sistem projelerimi olay tabanlı düşündüğüm ve inşaa ettiğim için kütüphanelerde alışık olduğumuz fonksiyon çağrısı mantığı işimi görmüyor. Bu tür sistemlerde fonksiyon çağrılarının yerini, bir "olay" (event) oluşturup bunu ilgili state machine'e atmak alıyor.

Bu arada bence üreticiler de sadece kendi işlemcileri için bile her derde deva kütüphane oluşturamıyorlar çünkü tek bir firmanın işlemcileri bile kendi içlerinde aileden aileye epey değişiklik gösterebiliyor. CubeMX gibi sistemlerin çıkmasının sebebi de bu bence: Parametrelere göre kütüphane sentezlemek. Ben sevemedim bir türlü bu tür şeyleri. İşe yararlıkları da tartışılır.

Donanımdan bağımsız şeylerin kütüphanesi olabilir tabi. Örneğin bir JSON string'i içinden belirli bir parametreyi falan çekmek veya CRC hesaplama gibi işler, donanımdan bağımsız fonksiyon çağrıları şeklinde ifade edilebilir.


Hocam bu kadar karamsar olmanıza gerek yoktu  :)  donanım bağımsız kütüphane yazma konusunu gömülü sistemlerde ZephyrRTOS çözdü diyebiliriz. Devicetree Overlays ön işlem katmanı sayesinde gerekli donanım makroları üretlip soyutlanmış kütüphane koduna derleme zamanında bağlanabiliyor.

Hiçbir kod değiştirmeden derleme yapabildiğimiz aşağıdaki supported board listesine bir göz atmanızı öneririm.

https://docs.zephyrproject.org/latest/boards/index.html

Zephyr, linux büyük geldiye bunu kullanın mottosuyla birkaç yıl önce çıktı ve çok tutuldu. Resmi olarak üreticilerinde desteğini alıyor.(NXP,Nordic vs.)

Artık işlemciye özel IDE kullanıp, mimariye özel kod yazmayı bırakmak lazım.

Yeni arkadaşlara kütüphane yazmak yerine Makefile gibi bağımsız derleme araçlarını iyice anlayıp öğrenmelerini tavsiye ediyorum.






Başlık: Ynt: Kütüphane yazma
Gönderen: MCansız - 05 Ekim 2023, 11:18:17
Merhaba,
Genel bir kütüphane yazımı için yazılacak c fonksiyonları tüm c derleyicilerinde derlenir burada problem platformda dolanımın ve haberleşmenin farklı olmasıdır.  Bunun için kütüphane yazarken haberleşme vb. durumlarda bu olayı gerçekleştiren fonksiyonun olay güdümlü çalışması beklenir (interrupt event).
Mikroe firması bunu yapıyor farklı platformları var ve tüm click bordları yazilim fonksiyonları aynı.

peki biz nasıl yapabiliriz ?

Evrensel kütüphaneler yazılırken fonksiyon pointerlardan yararlanılabilinir.

aşağıdaki linkte ads131m serisi 24 bit adc entegresinin kütüphanesine bakacak olursak

https://github.com/MahdaSystem/ADS131

biraz incelersek


typedef struct
ADS131_Handler_s {
  void (*ADC_CS_HIGH)(void);          // Must be initialized
  void (*ADC_CS_LOW)(void);          // Must be initialized
  void (*ADC_Transmit)(uint8_t Data); // Must be initialized
  uint8_t (*ADC_Receive)(void);      // Must be initialized
  void (*ADC_START_HIGH)(void);      // Can be initialized (If you don't want to use software start, the START pin must be pulled down then pass this as NULL)
  void (*ADC_START_LOW)(void);        // Can be initialized (If you don't want to use software start, the START pin must be pulled down then pass this as NULL)
  void (*ADC_RESET_HIGH)(void);      // Can be initialized (If you want to use software reset, the RESET pin must be pulled up then pass this as NULL)
  void (*ADC_RESET_LOW)(void);        // Can be initialized (If you want to use software reset, the RESET pin must be pulled up then pass this as NULL)
  uint8_t (*ADC_DRDY_Read)(void);    // Can be initialized
  void (*ADC_Delay_US)(uint32_t);    //! Must be initialized If You do not use Macro Delay (Place here your delay in MicroSecond)
  ADS131_OneSample ChannelsData[8];  // !!! DO NOT USE OR EDIT THIS !!!
} ADS131_Handler_t;


ADS131.h header dosyasında yükarıdaki struct tanımlanmış ve içerisinde function pointerlar var. Bunlar bu kütüphanenin donanım ile ilgili bölümlerin
GPIO SPI vb. olay kesmelarini(eventları) oluşturuyor.

kütüphanenin ADC_CS_HIGH bölümününü stm32 ile kullanmak için söyle bir kod yazabiliriz


#include "ADS131.h" // kütüphaneyi import ettim

ADS131_Handler_t myADS131; //kütüphane evetlarını almak için kendime struct oluşturuyorum.

void stm32_ADC_CS_HIGH_func()   // stm32 içi cs portunu high yapan fonksiyon tanımlıyorum. diğer IO durumlarını oluşturmadım oluşturdum varsayın.
{
    printf("cs_low");
    HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
   
}


void main()
{
  myADS131.ADC_CS_HIGH = stm32_ADC_CS_HIGH_func; //stm32 için yazmış olduğum fonksiyonu kendi struck fonksiyon pointer bölümüne kanalize ediyorum.
  myADS131.ADC_CS_LOW = .... // diger IO lar vs.
  .
  .

  ADS131_Init(myADS131,...) //şeklinde kendi struck ile parametrelerimi giriyorum.

  ADS131_ReadData(myADS131, ...) //şeklinde parametrelerimi girerek ilgili okumalarımı yapıyorum.
 
}



 Görüldüğü üzere kütüphane içeriği ile oynamadan kütüphane header dosyasını kullanarak ve ilgili işlemci ailesi için stm32_ADC_CS_HIGH_func() adında basit bir ara fonksiyonlar ile kütüphaneni benden istemiş olduğu fonksiyonları yazdım. Kütüphane içeriğinde bulunan ADC_Handler->ADC_CS_HIGH() fonksiyonu çağırıldığında artık burada benim stm32_ADC_CS_HIGH_func() fonksiyonum çağırılacak. Örnekte diğer fonksiyonları yazmadım tabi gerçekte yazmak gerek.

 Buda arduino, nuvoton, pic vb platromlarda bu fonksiyonları  yazabilirsiniz. Geriye kütüphaneyi init etmek ve dataları okumak kalıyor. Basit bir şekilde evrensel bir kütüphane nasıl yazılır anlatmaya çalıştım.  Bu yöntem windows ve linux işletim sistemlerinde bolca kullanılmaktadır. C struct yapıları ve fonksiyon pointer(callback function) gibi konulara çalışmak önem arzediyor.


 
 
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 26 Ekim 2023, 20:11:30
bmp180 örnek kütüphane yazma (https://www.youtube.com/watch?v=wUfSkmA9W9c)
Başlık: Ynt: Kütüphane yazma
Gönderen: papsukkal - 27 Ekim 2023, 21:46:29
https://youtu.be/DrjkF5n-pqY?si=oPhuGBnWdDuu2Zkm

Arduino için lcd kütüphanesi yazma aşamaları. Adım adım. İncele.
Başlık: Ynt: Kütüphane yazma
Gönderen: sifirzero - 28 Ekim 2023, 23:35:41
ccs c compiler kullaniyorum ardunio hic kullanmadim.Bilgi icin Tesekkur ederim.