Hallo zusammen,
ich habe hier ein Macro und weiß leider nicht ganz, wie ich es richtig lesen muss:
Angewendet wird es später folgendermaßen:
Dazu habe ich auch noch folgenden struct:
Meine hauptsächliche Frage ist, warum man das ganze überhaupt als Marco gemacht hat. Wo liegt hier der Vorteil? Warum kann ich den struct nicht einfach verwenden?
Danke, Gruß Flo
ich habe hier ein Macro und weiß leider nicht ganz, wie ich es richtig lesen muss:
Code:
#define CYG_DEVS_SPI_CORTEXM_STM32_DEVICE( \
_name_, _bus_, _csnum_, _16bit_, _clpol_, _clpha_, _brate_, _csup_dly_, _csdw_dly_, _trbt_dly_\
) \
cyg_spi_cortexm_stm32_device_t _name_ ##_stm32 CYG_SPI_DEVICE_ON_BUS(_bus_) = { \
{ .spi_bus = (cyg_spi_bus*) &cyg_spi_stm32_bus## _bus_ }, \
.dev_num = _csnum_, \
.bus_16bit = _16bit_ ? 1 : 0, \
.cl_pol = _clpol_, \
.cl_pha = _clpha_, \
.cl_brate = _brate_, \
.cs_up_udly = _csup_dly_, \
.cs_dw_udly = _csdw_dly_, \
.tr_bt_udly = _trbt_dly_, \
.spi_cr1_val = 0, \
}; \
extern cyg_spi_device _name_ __attribute__((alias ( #_name_ "_stm32" )));
Angewendet wird es später folgendermaßen:
Code:
cyg_spi_cortexm_stm32_device_t loopback_device = {
.spi_device.spi_bus = &cyg_spi_stm32_bus1.spi_bus,
.dev_num = 0 , // Only 1 device.
.cl_pol = 0,
.cl_pha = 0,
.cl_brate = 8000000, // Nominal 8Mhz.
.cs_up_udly = 1,
.cs_dw_udly = 1,
.tr_bt_udly = 1,
.bus_16bit = false,
};
Dazu habe ich auch noch folgenden struct:
Code:
typedef struct cyg_spi_cortexm_stm32_device_s
{
// ---- Upper layer data ----
cyg_spi_device spi_device; // Upper layer SPI device data.
// ---- Device setup (user configurable) ----
cyg_uint8 dev_num; // Device number.
cyg_uint8 bus_16bit; // Use 16 bit (1) or 8 bit (0) transfers.
cyg_uint8 cl_pol; // Clock polarity (0 or 1).
cyg_uint8 cl_pha; // Clock phase (0 or 1).
cyg_uint32 cl_brate; // Clock baud rate.
cyg_uint16 cs_up_udly; // Minimum delay in us between CS up and transfer start.
cyg_uint16 cs_dw_udly; // Minimum delay in us between transfer end and CS down.
cyg_uint16 tr_bt_udly; // Minimum delay in us between two transfers.
// ---- Device state (private) ----
cyg_uint32 spi_cr1_val; // SPI configuration register (initialised to 0).
} cyg_spi_cortexm_stm32_device_t;
Meine hauptsächliche Frage ist, warum man das ganze überhaupt als Marco gemacht hat. Wo liegt hier der Vorteil? Warum kann ich den struct nicht einfach verwenden?
Danke, Gruß Flo