头文件定义部分:
#define HAL_LED_1 0x01
#define HAL_LED_2 0x02
#define HAL_LED_3 0x04
#define HAL_LED_4 0x08
#define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4 )
//add later: 回过头来看这里的宏定义也是有技巧的,为什么每一个位置1代表一个灯,这为后面的方面做了铺垫。
在函数调用时传入参数:
HalLedSet (HAL_LED_1, HAL_LED_MODE_ON); //这里还可以传入多个参数
例如:要使LED1和LED2同时点亮,那么在这里就可以传入两个参数,即HAL_LED_1和HAL_LED_2,如下:
HalLedSet (HAL_LED_1 ^ HAL_LED_2, HAL_LED_MODE_ON);
Tips:这也是一个技巧,用宏定义使传入参数更加灵活多变
在函数实现时检查参数:
uint8 HalLedSet (uint8 leds, uint8 mode)
{
......
led = HAL_LED_1;
leds &= HAL_LED_ALL; //这里可以达到检查参数的目的。这里还可以
......
while(leds)
{
......
leds ^= led; //返回未处理的事件,即在while循环中检测哪个灯还没有点亮。每次循环leds中处理的灯的位置0
led <<= 1;
}
}
--------------------------------------------------------------------------------------------------------------------------------------
在这样一小段代码里就有这么多有趣的知识。在以后的编程中尽量使用这些技巧,这对程序的健壮性有很重要的作用。