▼ 고수들이 절대 가르쳐 주지 않는 C/C++ 프로그래밍 팁 #4 - C/C++ 로깅 Facility assert

https://yesarang.tistory.com/74

// 디버깅 할때 필요한 정보로 __DATE__, __TIME__,  __FILE__, __LINE__ 정보가 있으면 좋겠죠. 
//https://dojang.io/mod/page/view.php?id=663
#include <stdio.h>
#include <assert.h>

// LEDs definitions for PCA10040
// 이 보드의 LED 갯수는 총 4개.. 쉽죠 
#define LEDS_NUMBER    4

// LED와 연결된 GPIO 번호.. 회로도 봐야죠 
#define LED_1          17
#define LED_2          18
#define LED_3          19
#define LED_4          20

// 회로도 보기 귀찮으니까, 번호 매핑해놓아요
// led_on(LED_IDX_1); 
// 이런식으로 하는게 편하겠죠. 
#define LED_IDX_1  0
#define LED_IDX_2  1
#define LED_IDX_3  2
#define LED_IDX_4  3

#define LEDS_ACTIVE_STATE 0

#define LEDS_LIST { LED_1, LED_2, LED_3, LED_4 }

static const int m_board_led_list[LEDS_NUMBER] = LEDS_LIST;

void nrf_gpio_pin_write(int pin_number, int value) {
    if (value == 0) {
        //nrf_gpio_pin_clear(pin_number);
        printf("Pin #%d pin value is 0 (=low))\\n", pin_number);
    }
    else {
        //nrf_gpio_pin_set(pin_number);
        printf("Pin #%d pin value is 1 (=high))\\n", pin_number);
    }
}

//__STATIC_INLINE void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value)
//__STATIC_INLINE uint32_t nrf_gpio_pin_read(uint32_t pin_number)

void bsp_board_led_on(int led_idx) {
	assert(led_idx < LEDS_NUMBER);
	nrf_gpio_pin_write(m_board_led_list[led_idx], LEDS_ACTIVE_STATE ? 0 : 1);
}

void bsp_board_led_off(int led_idx) {
    assert(led_idx < LEDS_NUMBER);
    nrf_gpio_pin_write(m_board_led_list[led_idx], LEDS_ACTIVE_STATE ? 1 : 0);
}

int main(void) {
	//bsp_board_led_init(); // 원래 하드웨어는 초기화 해줘야 하지만, 코드만 늘어나니까 생략합니다. 
	bsp_board_led_on(LED_IDX_1); // 1번 켜주고 
	bsp_board_led_off(1); // 2번 꺼주고 
	bsp_board_led_on(2); // 3번 켜고 
	bsp_board_led_off(40); // 4번 켜려는건데 오타 쳐서 40이라고 잘못적었네요. 
	// 이런경우 Assertion failed! 에러가 나면서 프로그램이 멈추고
	// 친절하게 Expression: led_idx < LEDS_NUMVER 라고 출력해줍니다.
	// 이러면 사용자는 "아하.. 내가 번호값을 너무 크게 적었구나."라고 알수 있는거죠. 
}

실행결과.png