C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

yldzelektronik

#1035
Sorularım güncel.

Ekleme: Ayrıca Keil de C/C++ sekmesinde alt tarafta Include Path altında Misc Control kısmı var. Orası nedir?

Hal lib ile yapılmış bazı projelerde -C99 yazıldığını gördüm o kısma.Halbuki az yukarıda C99 için check box konmuş.Oraya check koysa?Farklı bir trick mi var?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

mir_as82

Bir yerde tutulan string var ve ben yeni gelen string ile bu stringin karşılaştırılmasını istiyorum .
Örneğin referans olan string  A  olsun. A->1234.  Yeni gelen string ise 1 olursa negatif dönelim, 12 ise negatif dönelim, 123 ise negatif dönelim, 1234 ise yine negatif dönelim, 12345 ise yine negatif dönelim.
Ama eğer gelen string 1235 ise pozitif dönelim, 12346 ise pozitif dönelim. Veya ilk karakteri 1234 in ilk karakteri ile uyuşmazsa yani 1 den farklı ise[2-9] yine direkt pozitif dönelim.
Bu algoritmanın adını bilen veya implemente edilmiş halini verebilecek olan varmı?

yldzelektronik

Tamamını karşılamasa da şu ayarda bir şey

int my_strcmp(const char *s1, const char *s2){
	int i = 0;
	int result = 1;
	while(s1[i] != '\n' && s2[i] != '\0'){
		// s1 	 = 	"1234"	  s2 	 = "12345"
		//
		if(s1[i] == s2[i]){
			result = -1;
		}
		else{
			result = 1;
			break;
		}
		if(s2[i] == '\n')
			break;
        i++;
	}
	return result;
}
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.


vitruvius

Alıntı yapılan: mir_as82 - 28 Aralık 2016, 10:02:27
Bir yerde tutulan string var ve ben yeni gelen string ile bu stringin karşılaştırılmasını istiyorum .
Örneğin referans olan string  A  olsun. A->1234.  Yeni gelen string ise 1 olursa negatif dönelim, 12 ise negatif dönelim, 123 ise negatif dönelim, 1234 ise yine negatif dönelim, 12345 ise yine negatif dönelim.
Ama eğer gelen string 1235 ise pozitif dönelim, 12346 ise pozitif dönelim. Veya ilk karakteri 1234 in ilk karakteri ile uyuşmazsa yani 1 den farklı ise[2-9] yine direkt pozitif dönelim.
Bu algoritmanın adını bilen veya implemente edilmiş halini verebilecek olan varmı?

Bir şeyler yapılır ama sorgulama mantığını anlamadım. 12345 ise negatif dönüp 12346 ise neden pozitif dönülüyor?

mir_as82

O bölümü hatalı yazmışım hocam. 12345 ise yine pozitif dönmek lazım.

yldzelektronik

Alıntı yapılan: mir_as82 - 28 Aralık 2016, 13:56:57
O bölümü hatalı yazmışım hocam. 12345 ise yine pozitif dönmek lazım.

Verdiğim kodu test ettiniz mi?Kaldı ki @Zoroaster 'ın dediği gibi standart kütüphanede string fonksiyonları var.Kullanabilirsiniz.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

vitruvius

Aşağıdaki kod işinizi görmeli. Her ihtimali test ettim, gözümden bir şey kaçmadıysa sorun yok.

Ufak bir performans arttırıcı if var fonksiyonun içinde o da şartınızdan geliyor. Eğer test ettiğiniz string referans string'inden uzunsa zaten karakterler farklı olacaktır ve bu durumda cevabın pozitif olmasını istiyorsunuz. İlk başta önce buna bakıp boşu boşuna döngüye girmekten kurtulunabilir.

Eğer test ettiğiniz string daha kısa ise fonksiyon bu string'in karakterleri üzerinden kıyas yapıp fark bulduğu an positif değer döndürüyor.

#include <stdio.h>
#include <string.h>

typedef enum { myfalse = 0, mytrue = !myfalse } mybool;

mybool compareStrings(char base[], char test[])
{
    if (strlen(test) > strlen(base))
    {
        return mytrue;
    }
    else
    {
        int i =0;
        for (i; i<strlen(test); i++)
        {
            if (base[i] != test[i])
            {
                return mytrue;
            }
        }
        return myfalse;
    }
}

int main()
{
    char base[] = "1234";
    char myString[] = "1235";
    
    if (compareStrings(base, myString))
    {
        printf("Positive\n");
    }
    else
    {
        printf("Negative\n");
    }
    return 0;
}


yldzelektronik

#1043
Merhaba

Keil'da User sekmesinde "After Build/Rebuild" kısmında  komut textboxuna
$K\ARM\ARMCC\bin\fromelf.exe --bin --output=$l@L.bin !L
şeklinde bir tanımlama girilmiş ve "Run#1" check box check konumda.


Bu ifade nedir?Derleme esnasında bir sürü şeyi değiştiriyor.Başka .c ve .h dosyaları içindeki ve extern edilmiş aynı isimdeki fonksiyonları bile derleyebiliyorum bu tanım olunca.

Ekleme: Bu tanım derleme sırasında .bin dosyası üretebilmek içinmiş.

http://www.keil.com/support/docs/3213.htm
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Merhaba,

Yine ilginç bir durumla karşı karşıyayım.Nedense beni buluyor hep.Konu C'de fonksiyonların aşırı yüklenmesine benzer bir durum.

Bir BSP var.Yine ST'nin. Kütüphanede herşey struct içinde yapılmış.Bir motor sürücü entegrenin (powerstep01) kontrolünü sağlayan bütün fonksiyonlar struct içinde fonksiyon pointer şeklinde.Sözde vatandaş nesne oluşturmuş.Sıkıntılı kısmı ve structın kendisi şöyle:

Bahsettiğim structın tür tanımı;
typedef struct
{
  /// Function pointer to Init
  void (*Init)(void*);
  /// Function pointer to ReadID
  uint16_t (*ReadID)(void);
  /// Function pointer to AttachErrorHandler
  void(*AttachErrorHandler)(void (*callback)(uint16_t));
  /// Function pointer to AttachFlagInterrupt
  void (*AttachFlagInterrupt)(void (*callback)(void));
  /// Function pointer to AttachBusyInterrupt
  void (*AttachBusyInterrupt)(void (*callback)(void));
  /// Function pointer to FlagInterruptHandler
  void (*FlagInterruptHandler)(void);
  /// Function pointer to GetAcceleration
  uint16_t (*GetAcceleration)(uint8_t);
  /// Function pointer to GetCurrentSpeed
  uint16_t (*GetCurrentSpeed)(uint8_t);
  /// Function pointer to GetDeceleration
  uint16_t (*GetDeceleration)(uint8_t);
  /// Function pointer to GetDeviceState
  motorState_t(*GetDeviceState)(uint8_t);
  /// Function pointer to GetFwVersion
  uint32_t (*GetFwVersion)(void);
  /// Function pointer to GetMark
  int32_t (*GetMark)(uint8_t);
  /// Function pointer to GetMaxSpeed
  uint16_t (*GetMaxSpeed)(uint8_t);
  /// Function pointer to GetMinSpeed
  uint16_t (*GetMinSpeed)(uint8_t);
  /// Function pointer to GetPosition
  int32_t (*GetPosition)(uint8_t);
  /// Function pointer to GoHome
  void (*GoHome)(uint8_t);
  /// Function pointer to GoMark
  void (*GoMark)(uint8_t);
  /// Function pointer to GoTo
  void (*GoTo)(uint8_t, int32_t);
  /// Function pointer to HardStop
  void (*HardStop)(uint8_t);
  /// Function pointer to Move
  void (*Move)(uint8_t, motorDir_t, uint32_t );
  /// Function pointer to ResetAllDevices
  void (*ResetAllDevices)(void);
  /// Function pointer to Run
  void (*Run)(uint8_t, motorDir_t);
  /// Function pointer to SetAcceleration
  bool(*SetAcceleration)(uint8_t ,uint16_t );
  /// Function pointer to SetDeceleration
  bool(*SetDeceleration)(uint8_t , uint16_t );
  /// Function pointer to SetHome
  void (*SetHome)(uint8_t);
  /// Function pointer to SetMark
  void (*SetMark)(uint8_t);
  /// Function pointer to SetMaxSpeed
  bool (*SetMaxSpeed)(uint8_t, uint16_t );
  /// Function pointer to SetMinSpeed
  bool (*SetMinSpeed)(uint8_t, uint16_t );
  /// Function pointer to SoftStop
  bool (*SoftStop)(uint8_t);
  /// Function pointer to StepClockHandler
  void (*StepClockHandler)(uint8_t deviceId);
  /// Function pointer to WaitWhileActive
  void (*WaitWhileActive)(uint8_t);
  /// Function pointer to CmdDisable
  void (*CmdDisable)(uint8_t);
  /// Function pointer to CmdEnable
  void (*CmdEnable)(uint8_t);
  /// Function pointer to CmdGetParam
  uint32_t (*CmdGetParam)(uint8_t, uint32_t);
  /// Function pointer to CmdGetStatus
  uint16_t (*CmdGetStatus)(uint8_t);
  /// Function pointer to CmdNop
  void (*CmdNop)(uint8_t);
  /// Function pointer to CmdSetParam
  void (*CmdSetParam)(uint8_t, uint32_t, uint32_t);
  /// Function pointer to ReadStatusRegister
  uint16_t (*ReadStatusRegister)(uint8_t);
  /// Function pointer to ReleaseReset
[font=courier][color=red][b][i][u]  void (*ReleaseReset)(uint8_t);[/u][/i][/b][/color][/font]
  /// Function pointer to Reset
[font=courier][color=red][b][i][u]  void (*Reset)(uint8_t);[/u][/i][/b][/color][/font]
  /// Function pointer to SelectStepMode
  bool (*SelectStepMode)(uint8_t deviceId, motorStepMode_t);
  /// Function pointer to SetDirection
  void (*SetDirection)(uint8_t, motorDir_t);
  /// Function pointer to CmdGoToDir
  void (*CmdGoToDir)(uint8_t, motorDir_t, int32_t);
  /// Function pointer to CheckBusyHw
  uint8_t (*CheckBusyHw)(void);
  /// Function pointer to CheckStatusHw
  uint8_t (*CheckStatusHw)(void);
  /// Function pointer to CmdGoUntil
  void (*CmdGoUntil)(uint8_t, motorAction_t, motorDir_t, uint32_t);
  /// Function pointer to CmdHardHiZ
  void (*CmdHardHiZ)(uint8_t);
  /// Function pointer to CmdReleaseSw
  void (*CmdReleaseSw)(uint8_t, motorAction_t, motorDir_t);
  /// Function pointer to CmdResetDevice
  void (*CmdResetDevice)(uint8_t);
  /// Function pointer to CmdResetPos
  void (*CmdResetPos)(uint8_t);
  /// Function pointer to CmdRun
  void (*CmdRun)(uint8_t, motorDir_t, uint32_t);
  /// Function pointer to CmdSoftHiZ
  void (*CmdSoftHiZ)(uint8_t);
  /// Function pointer to CmdStepClock
  void (*CmdStepClock)(uint8_t, motorDir_t);
  /// Function pointer to FetchAndClearAllStatus
  void (*FetchAndClearAllStatus)(void);
  /// Function pointer to GetFetchedStatus
  uint16_t (*GetFetchedStatus)(uint8_t);
  /// Function pointer to GetNbDevices
  uint8_t (*GetNbDevices)(void);
  /// Function pointer to IsDeviceBusy
  bool (*IsDeviceBusy)(uint8_t);
  /// Function pointer to SendQueuedCommands
  void (*SendQueuedCommands)(void);
  /// Function pointer to QueueCommands
  void (*QueueCommands)(uint8_t, uint8_t, int32_t);
  /// Function pointer to WaitForAllDevicesNotBusy
  void (*WaitForAllDevicesNotBusy)(void);
  /// Function pointer to ErrorHandler
  void (*ErrorHandler)(uint16_t);
  /// Function pointer to BusyInterruptHandler
  void (*BusyInterruptHandler)(void);
  /// Function pointer to CmdSoftStop
  void (*CmdSoftStop)(uint8_t);
  /// Function pointer to StartStepClock
  void (*StartStepClock)(uint16_t);
  /// Function pointer to StopStepClock
  void (*StopStepClock)(void);
  /// Function pointer to SetDualFullBridgeConfig
  void (*SetDualFullBridgeConfig)(uint8_t);
  /// Function pointer to GetBridgeInputPwmFreq
  uint32_t (*GetBridgeInputPwmFreq)(uint8_t);
  /// Function pointer to SetBridgeInputPwmFreq
  void (*SetBridgeInputPwmFreq)(uint8_t, uint32_t);
  /// Function pointer to SetStopMode
  void (*SetStopMode)(uint8_t, motorStopMode_t);
  /// Function pointer to GetStopMode
  motorStopMode_t (*GetStopMode)(uint8_t);
  /// Function pointer to SetDecayMode
  void (*SetDecayMode)(uint8_t, motorDecayMode_t);
  /// Function pointer to GetDecayMode
  motorDecayMode_t (*GetDecayMode)(uint8_t);
  /// Function pointer to GetStepMode
  motorStepMode_t (*GetStepMode)(uint8_t);
  /// Function pointer to GetDirection
  motorDir_t (*GetDirection)(uint8_t);
  /// Function pointer to ExitDeviceFromReset
  void (*ExitDeviceFromReset)(uint8_t);
  /// Function pointer to SetTorque
  void (*SetTorque)(uint8_t, motorTorqueMode_t, uint8_t);
  /// Function pointer to GetTorque
  uint8_t (*GetTorque)(uint8_t, motorTorqueMode_t);
  /// Function pointer to SetVRefFreq
  void (*SetRefFreq)(uint8_t, uint32_t);
  /// Function pointer to GetVRefFreq
  uint32_t (*GetRefFreq)(uint8_t);
  /// Function pointer to SetVRefDc
  void (*SetRefDc)(uint8_t, uint8_t);
  /// Function pointer to GetVRefDc
  uint8_t (*GetRefDc)(uint8_t);
  /// Function pointer to SetNbDevices
  bool (*SetNbDevices)(uint8_t);
  /// Function pointer to SetAnalogValue
  bool (*SetAnalogValue)(uint8_t, uint32_t, float);
  /// Function pointer to GetAnalogValue
  float (*GetAnalogValue)(uint8_t, uint32_t);
  /// Function pointer to SetTorqueBoostEnable
  void (*SetTorqueBoostEnable) (uint8_t, bool);
  /// Function pointer to GetTorqueBoostEnable
  bool (*GetTorqueBoostEnable) (uint8_t);
  /// Function pointer to SetTorqueBoostThreshold
  void (*SetTorqueBoostThreshold) (uint8_t, uint16_t);
  /// Function pointer to GetTorqueBoostThreshold
  uint16_t (*GetTorqueBoostThreshold) (uint8_t);
  /// Function pointer to GetDualFullBridgeConfig
  uint8_t (*GetDualFullBridgeConfig) (void);  
}motorDrv_t;

Aşağıda bahsi geçen elemanı kırmızıyla işaretledim, eğik, altı çizik, kalın diye işaretledim.Ama code tagi içinde belli olur mu bilmem. Yukarıdaki yapıda isimler "ReleaseReset" ve "Reset", aşağıda ise "Powerstep01_Board_ReleaseReset" ve "Powerstep01_Board_Reset" fonksiyonları.

Bu da bu türden oluşturulan değişken:

motorDrv_t   powerstep01Drv= 
{
  Powerstep01_Init,                    //void (*Init)(void*);
  Powerstep01_ReadId,                  //uint16_t (*ReadID)(void);
  Powerstep01_AttachErrorHandler,      //void (*AttachErrorHandler)(void (*callback)(uint16_t));
  Powerstep01_AttachFlagInterrupt,     //void (*AttachFlagInterrupt)(void (*callback)(void));
  Powerstep01_AttachBusyInterrupt,     //void (*AttachBusyInterrupt)(void (*callback)(void));
  Powerstep01_FlagInterruptHandler,    //void (*FlagInterruptHandler)(void);
  0,                                   //uint16_t (*GetAcceleration)(uint8_t);
  0,                                   //uint16_t (*GetCurrentSpeed)(uint8_t);
  0,                                   //uint16_t (*GetDeceleration)(uint8_t);
  0,                                   //motorState_t(*GetDeviceState)(uint8_t);
  Powerstep01_GetFwVersion,            //uint32_t (*GetFwVersion)(void);
  Powerstep01_GetMark,                 //int32_t (*GetMark)(uint8_t);
  0,                                   //uint16_t (*GetMaxSpeed)(uint8_t);
  0,                                   //uint16_t (*GetMinSpeed)(uint8_t);
  Powerstep01_GetPosition,             //int32_t (*GetPosition)(uint8_t);
  Powerstep01_CmdGoHome,               //void (*GoHome)(uint8_t);
  Powerstep01_CmdGoMark,               //void (*GoMark)(uint8_t);
  Powerstep01_CmdGoTo,                 //void (*GoTo)(uint8_t, int32_t);
  Powerstep01_CmdHardStop,             //void (*HardStop)(uint8_t);
  Powerstep01_CmdMove,                 //void (*Move)(uint8_t, motorDir_t, uint32_t );
  0,                                   //void (*ResetAllDevices)(void);
  0,                                   //void (*Run)(uint8_t, motorDir_t);
  0,                                   //bool(*SetAcceleration)(uint8_t ,uint16_t );
  0,                                   //bool(*SetDeceleration)(uint8_t , uint16_t );
  Powerstep01_SetHome,                 //void (*SetHome)(uint8_t);
  Powerstep01_SetMark,                 //void (*SetMark)(uint8_t);
  0,                                   //bool (*SetMaxSpeed)(uint8_t, uint16_t );
  0,                                   //bool (*SetMinSpeed)(uint8_t, uint16_t );
  0,                                   //bool (*SoftStop)(uint8_t);
  0,                                   //void (*StepClockHandler)(uint8_t deviceId);
  Powerstep01_WaitWhileActive,         //void (*WaitWhileActive)(uint8_t);
  0,                                   //void (*CmdDisable)(uint8_t);
  0,                                   //void (*CmdEnable)(uint8_t);
  Powerstep01_CmdGetParam,             //uint32_t (*CmdGetParam)(uint8_t, uint32_t);
  Powerstep01_CmdGetStatus,            //uint16_t (*CmdGetStatus)(uint8_t);
  Powerstep01_CmdNop,                  //void (*CmdNop)(uint8_t);
  Powerstep01_CmdSetParam,             //void (*CmdSetParam)(uint8_t, uint32_t, uint32_t);
  Powerstep01_ReadStatusRegister,      //uint16_t (*ReadStatusRegister)(uint8_t);
  Powerstep01_ReleaseReset,            //void (*ReleaseReset)(uint8_t);
  Powerstep01_Reset,                   //void (*Reset)(uint8_t);
  Powerstep01_SelectStepMode,          //bool (*SelectStepMode)(uint8_t deviceId, motorStepMode_t);
  0,                                   //void (*SetDirection)(uint8_t, motorDir_t);
  Powerstep01_CmdGoToDir,              //void (*CmdGoToDir)(uint8_t, motorDir_t, int32_t);
  Powerstep01_CheckBusyHw,             //uint8_t (*CheckBusyHw)(void);
  Powerstep01_CheckStatusHw,           //uint8_t (*CheckStatusHw)(void);
  Powerstep01_CmdGoUntil,              //void (*CmdGoUntil)(uint8_t, motorAction_t, motorDir_t, uint32_t);
  Powerstep01_CmdHardHiZ,              //void (*CmdHardHiZ)(uint8_t);
  Powerstep01_CmdReleaseSw,            //void (*CmdReleaseSw)(uint8_t, motorAction_t, motorDir_t);
  Powerstep01_CmdResetDevice,          //void (*CmdResetDevice)(uint8_t);
  Powerstep01_CmdResetPos,             //void (*CmdResetPos)(uint8_t);
  Powerstep01_CmdRun,                  //void (*CmdRun)(uint8_t, motorDir_t, uint32_t);
  Powerstep01_CmdSoftHiZ,              //void (*CmdSoftHiZ)(uint8_t);
  Powerstep01_CmdStepClock,            //void (*CmdStepClock)(uint8_t, motorDir_t);
  Powerstep01_FetchAndClearAllStatus,  //void (*FetchAndClearAllStatus)(void);  
  Powerstep01_GetFetchedStatus,        //uint16_t (*GetFetchedStatus)(uint8_t);
  Powerstep01_GetNbDevices,            //uint8_t (*GetNbDevices)(void);
  Powerstep01_IsDeviceBusy,            //bool (*IsDeviceBusy)(uint8_t);
  Powerstep01_SendQueuedCommands,      //void (*SendQueuedCommands)(void);
  Powerstep01_QueueCommands,           //void (*QueueCommands)(uint8_t, uint8_t, int32_t);
  Powerstep01_WaitForAllDevicesNotBusy,//void (*WaitForAllDevicesNotBusy)(void);
  Powerstep01_ErrorHandler,            //void (*ErrorHandler)(uint16_t);
  Powerstep01_BusyInterruptHandler,    //void (*BusyInterruptHandler)(void);
  Powerstep01_CmdSoftStop,             //void (*CmdSoftStop)(uint8_t);
  Powerstep01_StartStepClock,          //void (*StartStepClock)(uint16_t);
  Powerstep01_StopStepClock,           //void (*StopStepClock)(void);
  0,                                   //void (*SetDualFullBridgeConfig)(uint8_t);
  0,                                   //uint32_t (*GetBridgeInputPwmFreq)(uint8_t);
  0,                                   //void (*SetBridgeInputPwmFreq)(uint8_t, uint32_t);
  0,                                   //void (*SetStopMode)(uint8_t, motorStopMode_t);
  0,                                   //motorStopMode_t (*GetStopMode)(uint8_t);
  0,                                   //void (*SetDecayMode)(uint8_t, motorDecayMode_t);
  0,                                   //motorDecayMode_t (*GetDecayMode)(uint8_t);
  0,                                   //motorStepMode_t (*GetStepMode)(uint8_t);
  0,                                   //motorDir_t (*GetDirection)(uint8_t);
  0,                                   //void (*ExitDeviceFromReset)(uint8_t);
  0,                                   //void (*SetTorque)(uint8_t, motorTorqueMode_t, uint8_t);
  0,                                   //uint8_t (*GetTorque)(uint8_t, motorTorqueMode_t);
  0,                                   //void (*SetRefFreq)(uint8_t, uint32_t);
  0,                                   //uint32_t (*GetRefFreq)(uint8_t);
  0,                                   //void (*SetRefDc)(uint8_t, uint8_t);
  0,                                   //uint8_t (*GetRefDc)(uint8_t);
  Powerstep01_SetNbDevices,            //bool (*SetNbDevices)(uint8_t);
  Powerstep01_SetAnalogValue,            //bool (*SetAnalogValue)(uint8_t, uint32_t, float);
  Powerstep01_GetAnalogValue             //float (*GetAnalogValue)(uint8_t, uint32_t);
};


Bu da yapı içinde adresi gösterilen fonksiyonların kendisi:

/******************************************************//**
 * @brief  Releases the powerSTEP01 reset (pin set to High) of all devices
 * @retval None
 **********************************************************/
void Powerstep01_Board_ReleaseReset(void)
{
  HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_STBY_RESET_PORT, BSP_MOTOR_CONTROL_BOARD_STBY_RESET_PIN, GPIO_PIN_SET); 
}

/******************************************************//**
 * @brief  Resets the powerSTEP01 (reset pin set to low) of all devices
 * @retval None
 **********************************************************/
void Powerstep01_Board_Reset(void)
{
  HAL_GPIO_WritePin(BSP_MOTOR_CONTROL_BOARD_STBY_RESET_PORT, BSP_MOTOR_CONTROL_BOARD_STBY_RESET_PIN, GPIO_PIN_RESET); 
}


Bu fonksiyonların bulunduğu .c dosyasındaki fonksiyon tanımlamaları şöyle:

void Powerstep01_Board_ReleaseReset(void);               //Reset the powerSTEP01 reset pin 
void Powerstep01_Board_Reset(void);                      //Set the powerSTEP01 reset pin


Bu da başka bir isimdeki .h dosyası içinde aynı fonksiyonlara ait tanımlama:

extern void Powerstep01_Board_ReleaseReset(uint8_t deviceId);   //Reset the powerSTEP01 reset pin 
extern void Powerstep01_Board_Reset(uint8_t deviceId);          //Set the powerSTEP01 reset pin


Dikkat ettiyseniz iki farklı tanımlama mevcut.Tanımların birinde fonksiyonlar void iken diğerinde parametre alıyor. Oysa struct tür tanımı içinde de .h dosyasında tanımlandığı gibi parametre alıyor. Ancak fonksiyonun kendisinden bir tane var ve o da parametre almıyor. Void.

Peki nasıl oluyor da bu adam bu proje dosyasını derlediğinde hiçbir hata almıyor da ben derlediğimde bana kızıp bu fonksiyondan falan dosyada da var ve tanımlar birbiriyle uyuşmuyor deyip hata veriyor.Şöyleki:

..\BSP\STM32L0xx_Nucleo\stm32f103_stepper.c(93): error:  #147-D: declaration is incompatible with "void Powerstep01_Board_ReleaseReset(uint8_t)" (declared at line 988 of "..\BSP\Components\powerstep01\powerstep01.h")
  void Powerstep01_Board_ReleaseReset(void);               //Reset the powerSTEP01 reset pin 
..\BSP\STM32L0xx_Nucleo\stm32f103_stepper.c(94): error:  #147-D: declaration is incompatible with "void Powerstep01_Board_Reset(uint8_t)" (declared at line 989 of "..\BSP\Components\powerstep01\powerstep01.h")
  void Powerstep01_Board_Reset(void);                      //Set the powerSTEP01 reset pin
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Konu gücenlliğini koruyor. Halen bir cevap bulabilmiş değilim.Konuyla ilgili dikkatimi çeken bir durum var.

Keil IDE üzerinden "Options For Target altında, C/C++ sekmesinde "Misc Controls" kısmında "--C99" tanımı var.Bu da keil yardım dosyasından anladığım kadarıyla derleyiciye C99 moduyla derleme yapmasını söylüyor. Bir de "Linker" sekmesinde yine "Misc Controls" kısmındaki "--diag_suppress=L6329" tanımı var.Bu ise linkere bazı warningleri bastırmasını söylüyor. Aslında tam anlamadım ama söylediği Compiler 5 için:

L6329W: Pattern <module>(<section>) only matches removed unused sections.
All sections matching this pattern have been removed from the image because they were unused. For more information, use --info unused.
See the following in the armlink User Guide:
Elimination of unused sections.
--info=topic[,topic,...].


Compiler 6 için ise:

L6329W: Pattern <module>(<section>) only matches removed unused sections.
All sections matching this pattern have been removed from the image because they were unused. For more information, use --info unused.
See the following in the armlink User Guide:
Elimination of unused sections.
--info=topic[,topic,...]. 


Bir de benim bahsettiğim projedeki kod L6329 ancak burada bulduğum ise L6329W. Bütün bunlardan sonra, nasıl oluyor da bu hatayı örnek aldığım proje dosyasında derleme yaptığımda almıyorum da ben farklı bir mcu ile stdlib kullanarak ve bütün bu mesajda bahsettiklerimi de eklememe rağmen ben alıyorum.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

crazy

Hocam linkteki  örneği http://www.wolinlabs.com/blog/stm32f4.adc.dsp.dac.html   
Embitz 1.1 ile derlendiğinde  hatasız uyarı  vermeden derliyor.

Keil ile derlendiğinde ;
1- C mode 99 seçili değil  diğer c dosyaları ekli  ise  9 Error, 3 Warning veriyor.


2- C mode 99 seçili değil   diğer c dosyaları  ekli değil ise 1 Error ,1 Waring veriyor.


3-C mode 99 seçili  diğer c dosyaları  ekli değil ise 8 Error ,2 Warning  veriyor.


4-C mode 99 seçili ,diğer c dosyaları ekli  ise   0 Error, 3 Warning veriyor. Kite yüklendiğinde hatasız çalışıyor.

C mode 99  önemli bir özellikmiş.

yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

unknownperson

Merhabalar, C'nin hangi türüne mutaassıp olduğunu bilmiyorum ama şu tür bir yazım ile karşılaştım ne anlama geliyor, ne amaçla kullanılıyor bilmiyorum. Aşağıda buluna kod parçasında parantezler ne bir if ne de herhangi bir döngü için kullanılmış bu süslü parantezlerin kullanım amacı nedir ?

int16_t data; 
{
int16_t data;    
data = 3; 	
}

foseydon

Alıntı yapılan: unknownperson - 29 Eylül 2017, 14:09:31
Merhabalar, C'nin hangi türüne mutaassıp olduğunu bilmiyorum ama şu tür bir yazım ile karşılaştım ne anlama geliyor, ne amaçla kullanılıyor bilmiyorum. Aşağıda buluna kod parçasında parantezler ne bir if ne de herhangi bir döngü için kullanılmış bu süslü parantezlerin kullanım amacı nedir ?

int16_t data; 
{
int16_t data;    
data = 3; 	
}


Yanlış yazılmış. Belki bir if statement vardı fakat onu silip braketleri silmeyi unutmuş olabilir. Braketleri öyle bir kullanımı yok yani.