Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: magnetron - 29 Eylül 2022, 21:27:16

Başlık: struct kullanımı doğru mu ?
Gönderen: magnetron - 29 Eylül 2022, 21:27:16
merhaba forum,

diyelim bir step motor hareket fonksiyonu oluşturacağım
mesela JOG fonksiyonu 3 eksen için aynı olacak sadece değişkenlerin ismi değişecek

yani 3 eksen için aynı fonksiyonu 3 kez çağıracağım

fonksiyonun kullandığı değişkenleri struct olarak tanımladım

şimdi bu struct yapı ile örnek X ekseni için bir pointer tanımlıyorum

ve fonksiyonu çağırırken argumanlarından birisi bu pointer olacak

typedef struct{

uint8_t motionbefore;
uint8_t MOTION;
uint8_t VSF;
uint8_t DIR;
uint8_t RPLUS;
uint8_t RMINUS;
uint8_t CONST;
int32_t speed;
int32_t FEED;
volatile int32_t TARGET;
} axesmotion;


fonksiyonu çağırırken bu pointeri arguman olarak geçersem istediğim olur mu

burası fonskiyonun tanımlanması
void feedaxesJOG(axesmotion *Axes,/*   */){

Axes->Motionbefore =Axes->MOTION;


if (vsf && JOGs & 0x30)) Axes->MOTION=1;
else Axes->MOTION=0;

if (DIRs&0x10) {Axes->DIR=-1;}
if (DIRs&0x20) {Axes->DIR= 1;}

burası da X ekseni için fonskiyonun çağırılması

axesmotion *XAxes={0}*,YAxes={0},*ZAxes={0};
while (1){
feedaxesJOG(&XAxes,/*  */ );

biraz kafam karıştı doğru mu yapıyorum ?

teşekkür
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: devrecii - 29 Eylül 2022, 23:28:22

axesmotion *XAxes={0}*,YAxes={0},*ZAxes={0};

burada * ile tanımladığın zaman o pointer olur yani sadece adres gösterir, * ile tanımlamazsan fiziksel bir hafızada yer eder. Yani baştaki yıldızları kaldırırsan olur,  bazı derleyiciler bunu tanımaz -> { 0 }.

feedaxesJOG(&XAxes,/*  */ );

Burada derleyici hata verektir  burası /* */ bu açıklama işaretleri,   ama virgulden sonrası boş.
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: magnetron - 30 Eylül 2022, 11:53:44
hocam teşekkür

yani
axesmotion *XAxes
olarak değil

axesmotion XAxes
olarak tanımlıycam

fonksiyonu çağırırken de

while (1) {
feedaxesJOG(&XAxes) olacak

peki fonksiyon gövdesinde

void feedaxesJOG(axesmotion *Axes){
    Axes->Motionbefore =Axes->MOTION;

şeklinde "->" kullanım mümkün olacak mı bu durumda

Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: MCansız - 30 Eylül 2022, 13:43:48
Alıntı yapılan: magnetron - 30 Eylül 2022, 11:53:44peki fonksiyon gövdesinde

void feedaxesJOG(axesmotion *Axes){
    Axes->Motionbefore =Axes->MOTION;

şeklinde "->" kullanım mümkün olacak mı bu durumda

fonksiyon parametresi pointer olduğundan "->" şeklinde alt parametreye ulaşabilirsiniz. yani evet mümkün
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: magnetron - 04 Ekim 2022, 20:55:29
hocam bir soru daha sorayım

eğer struct içindeki bir eleman işaretçi ise

bunun gösterdiği değişkene nasıl erişim sağlanır (Kaan Aslan'nın kitabına baktım tam anlayamadım )

mesela yukardaki struct içinde bir
uint8_t * bits işaretçi olsun

axesmotion XAxes olarak bu yapı cinsinden değişken tanımlıyorum

şimdi XAxes.*bits olarak mı bu işaretçinin gösterdiği değişkene erişeceğim ?

aynı şekilde

axesmotion *Axes olarak bu yapı cinsinden işaretçi tanımlarsam
bahsettiğim değişkene erişmek için

Axes->*bits mi olucak ?

teşekkür
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: devrecii - 04 Ekim 2022, 21:59:03
axesmotion XAxes  böyle ise  *XAxes.bits=10   yada  XAxes.bits[0]=10    kodlar bits[0] a 10 değeri verir.   


axesmotion *XAxes  böyle ise  *XAxes->bits=10   yada  XAxes->bits[0]=10  yada  XAxes[0].bits[0]=10    kodlar bits[0] a 10 değeri verir.   
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: magnetron - 10 Ekim 2022, 22:40:38
herkese yardımları için teşekkür

zorluklarla karşılaştıkça yeni sorular ortaya çıkıyor

yukarda verdiğim örnekte

void feedaxesJOG(axesmotion *Axes){

fonksiyonunda struct elemanlarına -> operatoruyle erişmek için
her seferinde elemanın önüne Axes-> yazmak gerekiyor

acaba Axes pointerini bir kere göstersek başka bir operatörle
->eleman ismi şeklinde ulaşmak C de mümkün mü

Kaan Aslan'ın kitabına baktım bulamadım

aslında bu struct sayesinde, C++ neden ortaya çıktı anlamaya başladım  ::ok

bir de Kaan Aslan C++ kitabı yazacağım demiş aradım internette bulamadım yazdı mı acaba
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: devrecii - 11 Ekim 2022, 18:48:52
int *dugme=&XAxes->dugme;

Bu şekilde dışarı çekip kullnabilirsin,  bu kodda axis içindeki dugme değişkeninin adresi alındı eğer dugme[0]=10  yada *dugme=10 dersen axis içindeki int değişkenine göndermiş olursun.

Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: magnetron - 11 Ekim 2022, 20:36:36
teşekkür hocam bu bilgi de iyiymiş

benim sormak istediğim şuydu

mesela fonksiyon gövdesi içinde

void fonksiyon (yapıismi  * Ayapı){

with Ayapı

-> DIR = 1;
-> Speed = 100 ;
-> MOTION = 0;


burada with kelimesini başka bir metinde gördüğümü hatırlıyorum
yani her seferinde

Ayapı-> DIR = 1;
Ayapı-> Speed = 100 ;
Ayapı-> MOTION = 0;

yazmadan demek istiyorum

C de böyle bir imkan var mı ?

inşallah siz forum üyelerini bıktırmadım sorularımla  :)
Başlık: Ynt: struct kullanımı doğru mu ?
Gönderen: devrecii - 11 Ekim 2022, 21:17:58
O bahsettiğin özelliği ben de bilmiyorum ama #define kullanabilirsin.