Página 1 de 1

Macros em C

MensagemEnviado: 24 Mai 2014 18:06
por Maffeis
Senhores

Me deparei com as seguintes linhas de código em uma biblioteca gostaria de saber se alguém sabe me dizer oque elas fazem se são macros msm.

Código: Selecionar todos
#define HID_UsagePage(x)       0x05,x
#define HID_UsagePageVendor(x) 0x06,x,0xFF
#define HID_LogicalMin(x)      0x15,x
#define HID_LogicalMinS(x)     0x16,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMinL(x)     0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_LogicalMax(x)      0x25,x
#define HID_LogicalMaxS(x)     0x26,(x&0xFF),((x>>8)&0xFF)
#define HID_LogicalMaxL(x)     0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMin(x)     0x35,x
#define HID_PhysicalMinS(x)    0x36,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMinL(x)    0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_PhysicalMax(x)     0x45,x
#define HID_PhysicalMaxS(x)    0x46,(x&0xFF),((x>>8)&0xFF)
#define HID_PhysicalMaxL(x)    0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_UnitExponent(x)    0x55,x
#define HID_Unit(x)            0x65,x
#define HID_UnitS(x)           0x66,(x&0xFF),((x>>8)&0xFF)
#define HID_UnitL(x)           0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
#define HID_ReportSize(x)      0x75,x
#define HID_ReportID(x)        0x85,x
#define HID_ReportCount(x)     0x95,x
#define HID_Push               0xA0
#define HID_Pop                0xB0


tem esses : e ? também

Código: Selecionar todos
PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;


Obrigado.
Alexandre Maffeis

Re: Macros em C

MensagemEnviado: 24 Mai 2014 18:11
por andre_luis
Sim, a maioria dos compiladores atuais permitem a utilização de macros parametrizadas.
Já o ?: é apenas uma implementação compacta do if-else, padrão do C.




+++

Re: Macros em C

MensagemEnviado: 24 Mai 2014 18:14
por Maffeis
André Por exemplo essa

#define HID_UsagePageVendor(x) 0x06,x,0xFF

ele usa ela no código dessa forma

HID_UsagePageVendor(0x00)

qual seria o valor dela?

Re: Macros em C

MensagemEnviado: 24 Mai 2014 18:19
por andre_luis
Então, se na macro tá definida como:

Código: Selecionar todos
#define HID_UsagePageVendor(x) 0x06,x,0xFF


No caso, quando o compilador encontrar isso:

Código: Selecionar todos
HID_UsagePageVendor(0x00)


Vai substituir x por 0x00 no código compilado, resultando nisso:

Código: Selecionar todos
0x06,0x00,0xFF



+++

Re: Macros em C

MensagemEnviado: 24 Mai 2014 18:38
por Maffeis
Estava achando que ela fazia alguma conta com os valores

ou setava algum range tipo o valor vai de 0x06 até 0xFF

Vou tentando aqui

Re: Macros em C

MensagemEnviado: 24 Mai 2014 19:11
por cfreund
Maffeis escreveu:tem esses : e ? também

Código: Selecionar todos
PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;



http://pt.wikipedia.org/wiki/Opera%C3%A ... n%C3%A1ria

Re: Macros em C

MensagemEnviado: 24 Mai 2014 19:32
por Maffeis
Estou testando a USB do LPC1768

Comunicando ele com o C# usando HID

Estava dando zica do VID e PID agora eu achei aqui

O C# esta dando como conectado tiro o cabo desconecta coloca denovo conecta

vou tentar acender um led da placa pelo pc agora