>>9
ありがとうございます!マクロですか、余り使ったことなかったのですが調べてみます!
仮にビットフィールドへのポインタが有りだとしたら以下の様にしたいです。
void led_toggle_switch(unsigned *led: 1, unsigned char before, unsigned char after) {
 if(before == 0 && after == 1)
  *led ^= 1;
}
led_toggle_switch(&p2->bit.b4, sw2_before, p1->bit.b7);
led_toggle_switch(&p2->bit.b5, sw3_before, p1->bit.b3);