▼ 고수들이 절대 가르쳐 주지 않는 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 라고 출력해줍니다.
// 이러면 사용자는 "아하.. 내가 번호값을 너무 크게 적었구나."라고 알수 있는거죠.
}