böyle bir yazım şekli GCC 'de var mı ?

Başlatan magnetron, 01 Şubat 2019, 17:19:19

magnetron

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

brandice5

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.

OptimusPrime

if siz yapmis amcam. Mesela send_ack = i < (count - 1); de i < (count - 1) sartini saglarsa send_ack 1 oluyor.
https://donanimveyazilim.wordpress.com || Cihân-ârâ cihân içredir ârâyı bilmezler, O mâhîler ki deryâ içredir deryâyı bilmezler ||

tbt777

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.

apsis

Vay anasına  :o  ben de ilk kez böyle bir şey olduğunu öğreniyorum.
"Makineye Beyin" MEKATRONİK

Tagli

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ış.
Gökçe Tağlıoğlu

RaMu

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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

tekosis

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.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

MC_Skywalker

Kullanılan derleyicinin C/C++'nin hangi standardını desteklediği ile alakalı bir durum değil mi bu?

engerex

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)

Pyrodigy

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şı.
Persistance is the name of the game in this business....