XC8 Free Versiyon sınırı nedir ?

Başlatan elektroacemi, 12 Şubat 2022, 20:40:19

elektroacemi

Merhabalar.

Uzun zamandır Proton Basic kullanıyorum. Bazı projelerde yetersiz geldiği için başka platformlara yöneldim. (modbus gibi)
XC8 in free versiyonundaki kısıtlar nelerdir ?

power20

Optimizasyon yoktur. Kod şişer. Yavaş çalışır. Hatta bazı bloglarda bunun kasıtlı olarak yapıldığı, free versiyonda araya gereksiz işlemlerin doldurulduğu ispatlanmıştı.

Erol YILMAZ


Tagli

#3
Yakın zamanda kısıtlamaların çoğunu kaldırdılar. -O1 ve -O2 optimizasyonları açık ve kod boyutunu epey azaltıyor ve muhtemelen hızı da arttırıyor. -O3 ve -Os optimizasyonları ücretsiz versiyonda kapalı. Assembly optimizasyonları da anladığım kadarıyla kapalı olan bu son seviyelerden birine giriyor ve buna bağlı olarak fonksiyonları inline yapmayı es geçiyor. Bazı durumlarda macro'lar ile bunun çevresinden dolanmak mümkün. Ayrıca MISRA-C denetleyicisi ve sanırım "functional safety" (ne olduğunu bilmiyorum) için ayrıca lisans almak gerekiyor.
Gökçe Tağlıoğlu

Erol YILMAZ

Alıntı yapılan: elektroacemi - 12 Şubat 2022, 20:40:19Merhabalar.

Uzun zamandır Proton Basic kullanıyorum. Bazı projelerde yetersiz geldiği için başka platformlara yöneldim. (modbus gibi)
XC8 in free versiyonundaki kısıtlar nelerdir ?

Ilac buldun mu, işi çözdü mü?

ex_machina

Alıntı yapılan: Kılıç - 12 Şubat 2022, 20:56:16Optimizasyon yoktur. Kod şişer. Yavaş çalışır. Hatta bazı bloglarda bunun kasıtlı olarak yapıldığı, free versiyonda araya gereksiz işlemlerin doldurulduğu ispatlanmıştı.
Bunu zamanında ben de üşenmeden free ve kürekli versiyonda denedim ve karşılaştırdım. Kesinlikle doğru. Free versiyonda kod kasıtlı olarak şişiriliyor.
Bunu farkettikten sonra direkt stm'ye geçtim. Şimdi mecbur kalmadıkça pic kullanmıyorum.

Adamlar ICD debugger'ı fahiş fiyata satıyor, yetmiyor kendi derleyicilerini bile parayla satıyorlar. Eğer zamanında Atmel'i satın almasaydılar bence şimdiye batmıştılar.

Tagli

#6
Önceki mesajımda da belirttiğim gibi, şu anda ücretsiz versiyonda -O1 ve -O2 optimizasyon seviyeleri açık ve bunlar kodu oldukça iyi bir hale getiriyorlar. Yani XC8 ücretsiz versiyonu son derece kullanılabilir durumda. İlaçlamaya falan gerek de yok bence.

Öte yandan, 8-bit PIC'lerin donanımlarından kaynaklanan epey bir kısıtları var:

Donanımsal register'ların çok az olması (sadece bir veya iki tane W ve modele göre bir veya iki tane pointer register'ı var sanırım) ve genel amaçlı bir stack desteğinin olmaması, özellikle fonksiyon çağrılarında kodu çok şişiriyor. Bol miktarda $$$ bayılıp Pro versiyonu alsanız bile, derleyicinin bu konuda yapabilecekleri oldukça sınırlı.

Bence bir başka önemli kısıt da flash'ın normal adres uzayında olmaması ve erişim için ek komutlar gerektirmesi. Bildiğim kadarıyla bazı modellerde PSV (program space visibility) ile bu sorun bir derece çözülmüş, ancak çoğu modelde bu özellik yok diye biliyorum. Normalde sabitleri (tablolar mesela) mümkün olduğunca flash'a saklamak isteriz ki RAM'den yemeyelim. Ama bunu PIC'te yapmaya çalışınca, bu sabitlere erişmek yavaş olduğu gibi kod boyutunu da şişiriyor. (benzer sorunun AVR'lerde de olduğunu hatırlatmadan geçmeyelim)

İşlemcinin donanımsal kısıtları ve farklı adres uzaylarının olması pointer işlerini de karıştırıyor. XC8'de pointer'ların sabit boyutları yok. Mesela bir uint8_t* pointer'ı 1 byte olabileceği gibi 3 byte da olabilir. Yani sizeof(uint8_t*) yazarsanız üzülürsünüz (evet, başıma geldi).

Konudan biraz uzaklaşmış olacağız ama debug cihazlarının da tam bir çöp olduğunu belirtmeden geçemeyeceğim. Bende orijinal PicKit3 ve ICD3 var. Al birini vur ötekine. Linux üzerinde MPLAB X'in son versiyonunu kullanıyorum. ICD3 bağlantısı durup dururken zırt pırt kopuyor. Çoğu zaman MPLAB'i kapatıp tekrar açmak gerekiyor. Mesela önce MPLAB'ı açıp sonra ICD3'ü bilgisayarınıza taktınız. Geçmiş olsun... MPLAB görmüyor bunu. Önce ICD3'ü takıp sonra MPLAB'i açmak gerekiyor. İstisnasız her seferinde farklı bir şekilde saç baş yolduran bir eziyet...

Ha bir de neden debug sırasında işlemciyi durdurduğumuzda EEPROM veya flash'ı okuyamıyoruz? Kalıcı bellekle ilgili kütüphane yazmaya çalışıyorum şu sıralarda ve bu durum beni körlemesine çalışmaya zorluyor.
Gökçe Tağlıoğlu

mr.engineer

Alıntı yapılan: Tagli - 13 Şubat 2022, 19:32:28 [Genişlet]Önceki mesajımda da belirttiğim gibi, şu anda ücretsiz versiyonda -O1 ve -O2 optimizasyon seviyeleri açık ve bunlar kodu oldukça iyi bir hale getiriyorlar. Yani XC8 ücretsiz versiyonu son derece kullanılabilir durumda. İlaçlamaya falan gerek de yok bence.

Öte yandan, 8-bit PIC'lerin donanımlarından kaynaklanan epey bir kısıtları var:

Donanımsal register'ların çok az olması (sadece bir veya iki tane W ve modele göre bir veya iki tane pointer register'ı var sanırım) ve genel amaçlı bir stack desteğinin olmaması, özellikle fonksiyon çağrılarında kodu çok şişiriyor. Bol miktarda $$$ bayılıp Pro versiyonu alsanız bile, derleyicinin bu konuda yapabilecekleri oldukça sınırlı.

Bence bir başka önemli kısıt da flash'ın normal adres uzayında olmaması ve erişim için ek komutlar gerektirmesi. Bildiğim kadarıyla bazı modellerde PSV (program space visibility) ile bu sorun bir derece çözülmüş, ancak çoğu modelde bu özellik yok diye biliyorum. Normalde sabitleri (tablolar mesela) mümkün olduğunca flash'a saklamak isteriz ki RAM'den yemeyelim. Ama bunu PIC'te yapmaya çalışınca, bu sabitlere erişmek yavaş olduğu gibi kod boyutunu da şişiriyor.

İşlemcinin donanımsal kısıtları ve farklı adres uzaylarının olması pointer işlerini de karıştırıyor. XC8'de pointer'ların sabit boyutları yok. Mesela bir uint8_t* pointer'ı 1 byte olabileceği gibi 3 byte da olabilir. Yani sizeof(uint8_t*) yazarsanız üzülürsünüz (evet, başıma geldi).

Konudan biraz uzaklaşmış olacağız ama debug cihazlarının da tam bir çöp olduğunu belirtmeden geçemeyeceğim. Bende orijinal PicKit3 ve ICD3 var. Al birini vur ötekine. Linux üzerinde MPLAB X'in son versiyonunu kullanıyorum. ICD3 bağlantısı durup dururken zırt pırt kopuyor. Çoğu zaman MPLAB'i kapatıp tekrar açmak gerekiyor. Mesela önce MPLAB'ı açıp sonra ICD3'ü bilgisayarınıza taktınız. Geçmiş olsun... MPLAB görmüyor bunu. Önce ICD3'ü takıp sonra MPLAB'i açmak gerekiyor. İstisnasız her seferinde farklı bir şekilde saç baş yolduran bir eziyet...

Ha bir de neden debug sırasında işlemciyi durdurduğumuzda EEPROM veya flash'ı okuyamıyoruz? Kalıcı bellekle ilgili kütüphane yazmaya çalışıyorum şu sıralarda ve bu durum benim körlemesine çalışmaya zorluyor.


Hocam, bu pointer size işini ilk defa duydum. Pointer boyutunun 1 byte olması RAM'in 255 byte olması demek değil mi?

Bu arada ICD4'ü denediniz mi bilmiyorum ama önceki şirkette kullanıyordum sorunsuzdu. Pickit3 ise tam bir çöp.

Tagli

XC8 zaten çok az olan RAM'i mümkün olduğunca verimli kullanmak için zahmetli bir işe giriyor ve bir pointer'a yapılan tüm atamaları takip ediyor, ki bunlar flash adresleri de olabilir. Nasıl bir algoritma kullandığını bilmiyorum, ancak adreslenen verinin bellekteki konumuna göre bunu bir şekilde 1 byte'a da sığdırabiliyor. Belki bir çeşit bağıl adresleme yapıyordur. XC8 dokümanında bu durumdan bahsediyor.

Bu arada dokümanda şuna benzer bir örnek vermiş:
uint8_t a = 5;
uint8_t* a_ptr = &a;
Burada sizeof(uint8_t*) hatalı sonuç verebiliyor. Ancak sizeof(a_ptr) ifadesi doğru sonuç veriyor.

Benzer bir durum pointer içeren struct'lar için de geçerli. Mesela:
struct Link {
    uint8_t val;
    struct Link* next;
};
Burada sizeof(struct Link) ifadesinin ne olacağı belli değil. Yakın zamanda blok tabanlı bir memory allocation kodu yazmaya çalışıyordum. Bu durum elimi kolumu bağladı gibi. Sanırım şansa çalıştırmayı başardım ama içime sinmedi. Ham bellek adresinden böyle bir struct pointer'ına cast edip kullanıyorum. Ama aynı struct programın iki farklı yerinde iki farklı boyuta sahipse bu durumda işin içinden çıkmak mümkün olmaz.

Maalesef elime ICD4 hiç geçmedi. Fiyatı $300 civarında sanırım, benim bütçemi aşıyor. ICD3'ü de zamanında şirketimize TÜBİTAK proje desteği ile almıştık, sonra şirket batınca alet bana kaldı. Yoksa o da olmayacaktı. Gerçi bu kadar sorunlu bir cihaza bu parayı vermezdim. Yine de PicKit3'te olmayan debug özellikleri var, sınırsız breakpoint koyabilme gibi.

ICD3 ile yaşadığım sorunlar belki Linux ile ilgili olabilir. Windows'ta ne kadar sorunsuz çalışıyor bir fikrim yok. Kullanan arkadaşlar varsa deneyimlerini duymak isterim.

Teşekkür: Yeni forum güncellemesi ile kod blokları epey güzel olmuş. Eline sağlık @gevv hocam.
Gökçe Tağlıoğlu

temha

iyi günler xc8 hala ücretsiz kullanılabiliyor mu? mplab yeni  yükledim 60 günlük deneme lisansı verdi. bittikten sonra ne tür kısıtlamalar yapıyor. kul hakkına girmemek için arayıştayım. yoksa pbp 2,44 işimi fazlası ile görüyor aslında. yada süreli lisans üçretleri ne kadar acaba. bir de birkaç kişi ortak lisans alınsa internet üzerinden any desk veya benzer programla kullanılsa nasıl olur.
teşekkürler iyi çaışmalar.

Tagli

#10
Yakın zamanda denemek için bir kurdum ama ayrıntılarını hatırlamıyorum yine de. Sanırım "Next, next" deyip geçmiştim. Durumda bir değişiklik yok. XC8 -O2 optimizasyon seviyesine kadar ücretsiz olarak ve süresiz kullanılabiliyor. Daha ileri optimizasyon seviyeleri için lisans almak gerekiyor ama bence -O1 bile gayet yeterli. XC8 v3.0'da yazılımsal kesme vektörü tanımlama özelliği gelmiş. Bu durum projenin daha modüler yazılabilmesine olanak sağlıyor.

Dikkat edilmesi gereken bir nokta var ama: MPLAB X version 6.25'ten itibaren PicKit3 ve ICD3 desteğini sonlandırmış. Bu cihazların desteklendiği son MPLAB X versiyonu 6.20.

Microchip'e gıcık olmamak elde değil. Ortalama 5 yılda bir yeni nesil programlayıcılar çıkarıyorlar ve eskilerinin desteğini kaldırıyorlar. Elimdeki toplam $400 değerinde cihaz çöp oldu - gerçi ST-LINK ile karşılaştırınca zaten çöptüler bence. PicKit'ler $100 civarında. İçine bluetooth falan koymuşlar, artık ne işe yarayacaksa... Bir de PicKit Basic diye bir şey çıkarmışlar yeni, $35 civarında ancak eski nesil PIC'leri programlayamıyor çünkü yüksek voltaj üretemiyor (eski nesil PIC'ler 12 V civarında Vpp istiyor). MPLAB X desen zaten çağın çok gerisinde kalmış. İnsan Eclipse'i bile mumla arıyor bunu görünce. Bir VS Code extension'ı geliştirmeye çalışıyorlar - ki çok mantıklı bir karar - ama henüz emekleme aşamasında. Profesyonel hayatta PIC kullanmak gibi bir niyetim yok ama bugünlerde tamamen meraktan eski bir PIC18F252'yi kurcalayayım dedim, süreç bir drama dönüştü... 15 yıl önce modern gözüken MPLAB X artık bende tarih öncesi hissi doğuruyor.
Gökçe Tağlıoğlu

power20

#11
Mplabx 4.05 kullanıyorum. Belki yılda bir yeni sürümleri kurup bakarım. Yeni sürümleri bir türlü beğenmedim.  hep 4.05 kullanırım. Yenisi şuan aklıma gelmeyen bazı sorunlar çıkarmış, bezdirmiştir.  Neyse ki bilgisayar yedeğinden windows geri yükleme yaparak 4.05 ile devam edebiliyorum

Sonuçta yeni bir şey yapmıyorsak niçin yeni versiyonu kuralım ki. Eski projeler için 4.05  yetiyor.

Tagli

Microchip eski versiyonları da sitesinde veriyor zaten. Yani dilenirse v1.0 bile indirilip kurulabilir.
Gökçe Tağlıoğlu