Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: magnetron - 01 Şubat 2019, 17:19:19

Başlık: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: magnetron - 01 Şubat 2019, 17:19:19
merhaba forum,

bir CO2 sensörüne STM32 ile bağlanmak istiyorum

firmanın kendi github sayfasında STM32 örneği var ama
bir türlü çalıştıramadım

ben GCC ile derlemeye çalışıyorum
ama bazı satırları anlayamadım

bunlar GCC de geçerli mi ? burda if cümlesi mi yazmaya çalışıyor ? karşılaştırma operatörünün ne işi var bu cümlelerde
----------------------------------
nack = (sensirion_SDA_read() != 0);
----------------------------------
send_ack = i < (count - 1);
----------------------------------
bir de HAL de şöyle bir satır yazmış bu ne demek ? gene if cümlesi mi bu da
-------------------------------------
return (u8)HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET;
-------------------------------------

teşekkür
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: brandice5 - 01 Şubat 2019, 17:29:03
Evet hepsi C için geçerlidir.
Eşitliğin sağ tarafındaki doğru ise 1 değil ise 0 değeri eşitiliğin sol tarafındaki değişkene atanır.

return da aynı şekilde çalışıyor.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: OptimusPrime - 01 Şubat 2019, 17:29:44
if siz yapmis amcam. Mesela send_ack = i < (count - 1); de i < (count - 1) sartini saglarsa send_ack 1 oluyor.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: tbt777 - 01 Şubat 2019, 17:36:30
nack = (sensirion_SDA_read() != 0);
sensirion_SDA_read() fonksiyonundan dönen değer "0" dan farklı ise nack değişkenine "1" atıyor, "0" a eşit ise "0" atıyor.

send_ack = i < (count - 1);[/b]
count-1 değeri, i değerinden büyük ise send_act değişkenine 1 atıyor, küçük ise 0 atıyor.

return (u8)HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET;
PB8'den okunan değer GPIO_PIN_SET değerine eşit ise 1 döndürüyor, değilse 0 döndürüyor.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: apsis - 01 Şubat 2019, 17:41:33
Vay anasına  :o  ben de ilk kez böyle bir şey olduğunu öğreniyorum.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: Tagli - 01 Şubat 2019, 18:20:39
Eşitlik sorgulaması sonucu olarak çıkacak doğru ve yanlış ifadeleri C'de tam sayı olan 1 ve 0'a denk geliyor ve bunlar doğrudan kullanılmış.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: RaMu - 02 Şubat 2019, 01:12:30
Kullandığın ide ye göre derleyici özelliklerini ayarlayıp hata verme bunlara deniyor.
Benzer olarak keil da for içerisinde değişken tanımlayıp kullanacağım:
for(uint16_t i=0;i<100;i++) gibi
derleyici standart olarak hata veriyor,
şuradan derleyiciyi ayarlayıp kullanabiliyoruz...
şeklinde bir video derste görmüştüm,
ayarların nereden yapıldığını hatırlamıyorum.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: tekosis - 02 Şubat 2019, 08:38:59
Alıntı yapılan: RaMu - 02 Şubat 2019, 01:12:30for(uint16_t i=0;i<100;i++) gibi
Hocam bu kullanım java'da standart olarak mevcut. çok güzel ve işleyişi kolaylaştıran bir yöntem.
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: MC_Skywalker - 02 Şubat 2019, 10:26:59
Kullanılan derleyicinin C/C++'nin hangi standardını desteklediği ile alakalı bir durum değil mi bu?
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: engerex - 02 Şubat 2019, 13:28:26
Alıntı yapılan: RaMu - 02 Şubat 2019, 01:12:30Kullandığın ide ye göre derleyici özelliklerini ayarlayıp hata verme bunlara deniyor.
Benzer olarak keil da for içerisinde değişken tanımlayıp kullanacağım:
for(uint16_t i=0;i<100;i++) gibi
derleyici standart olarak hata veriyor,
şuradan derleyiciyi ayarlayıp kullanabiliyoruz...
şeklinde bir video derste görmüştüm,
ayarların nereden yapıldığını hatırlamıyorum.

Bu C99 ile geldi. Derleyici ayarlarından C99 seçilmeli yada komut satırına "-std=c99" eklenmeli. (Tırnaklar yok)
Başlık: Ynt: böyle bir yazım şekli GCC 'de var mı ?
Gönderen: Pyrodigy - 03 Şubat 2019, 15:27:34
Sevgili Forumdaşlar;
10 Yıldır ASM ile PIC Programladım. Sayfalarca, binlerce satır kod arasında boğuştum durdum.
C diline geçtikten sonra Mantıksal operatörlere hayran kaldım. Bazı Basit mantıksal operatörleri onlarca ASm kodu yazmak gerekir ki page ler, banklar arasında takibi ve debug yapması çok zordur.

Uzun asm kod yazmış birisi olarak en önemli konu anlaşılabilir kodlar yazmak, yanına güzel açıklamalar belirtmek gerekir. Çünkü onlarca sayfa kod yazdıktan sonra 1 ay sonra projeye baktığımda bunu kim yazdı dediğim oldu.

Ben şahsen takıldığım, C dilinde uzun ve karmaşık kod yapısında mutlaka disassembly list ine bakıyorum. Kodu karmaşık yazanın aslında orada ne yapmak istediğini anlıyorum. Burada kodu yazanın nekadar karmaşık yazdığı değil aslında ne yapmak istediği daha çok önemli.
Zamanın hassas olduğu yerlerde karmaşık MCU yu yoran mantıksal hesaplama belkide fonksiyon un patlamasına sebep verecek. Bunu kim öngörebilir ?

OP un belirttiği gibi C dilnde Bu tarz mantıksal fonksiyonlar ASM den gelme bir C kullanıcısının incelemesi için çok zevkli ama okunabilir olmadığı için tercih edilmez diye düşünüyorum.

Sözün özü: Yeni başlayanlara Doğrudan C Dilinden başlatmak nekadar doğru bence tartışılır. ASM mutlaka bir programcının temelini süslemeli. Çünkü MCU nun Temelini bilmek ve anlaşılır kod yazmak programcılığın ana yapı taşı.