por Maurício » 19 Set 2007 17:51
Olá, Jagger.
Não conheço o PICC, mas, acredito que o UL seja referente à UNSIGNED LONG, ou seja, a macro faz um "casting" no numeral 1 pra unsigned long, antes de fazer a operação, o que permite fazer operações com qualquer número inteiro até o limite do unsigned long ( 32 bits no seu caso? ).
Quando vc cria uma macro o compilador substitui o nome da macro pelo texto que está a direita da macro.
No caso dessas macros que vc citou, a macro substitui os valores que foram digitados pelos equivalentes na fórmula que está à direita da macro.
#define bitset(var,bitno) (var|=1UL<<(bitno))
No programa, a variavel var tem o valor de 0xA2, e queremos setar o bit 3 dessa variável (D2), então usamos a macro:
bitset (var, 2 );
Na compilação, quando o pré-processador encontrar essa macro, ele irá fazer as seguintes modificações:
bitset (var, 2 ); // local da chamada no programa
0xA2 |= 1UL << 2 // operação do pré-processador, sem esquecer que ANTES de fazer a operação de deslocamento no numeral 1, o número 1 é convertido para LONGO.
Espero que ajude.
[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"