以下のコードは、MCUでのRTCの初期化に関連しています。MCUでのRTCの初期化 - グローバルコールバックを使用する理由
NULL
をrtc_init()
に渡した後、グローバルコールバックglobal_rtc_cb
をそれに等しいとする合理的な人はいないでしょうか。
rtc_callback
という別の関数が定義され、構造体のコールバックとして使用されている場合、なぜグローバルコールバックを使用するのでしょうか。
int main() {
rtc_init(NULL);
}
//-----------------------------------------------------------------
void (* global_rtc_cb)(void *);
int rtc_init(void (*cb)(void *)) {
rtc_config_t cfg;
cfg.init_val = 0;
cfg.alarm_en = true;
cfg.alarm_val = ALARM;
cfg.callback = rtc_callback;
cfg.callback_data = NULL;
global_rtc_cb = cb;
irq_request(IRQ_RTC_0, rtc_isr_0);
clk_periph_enable(CLK_PERIPH_RTC_REGISTER | CLK_PERIPH_CLK);
rtc_set_config(QM_RTC_0, &cfg);
return 0;
}
//---------------------------------------------------------------------
/**
* RTC configuration type.
*/
typedef struct {
uint32_t init_val; /**< Initial value in RTC clocks. */
bool alarm_en; /**< Alarm enable. */
uint32_t alarm_val; /**< Alarm value in RTC clocks. */
/**
* User callback.
*
* @param[in] data User defined data.
*/
void (*callback)(void *data);
void *callback_data; /**< Callback user data. */
} rtc_config_t;
'global_rtc_cb'と' rtc_callback'を検索して、それぞれが呼び出された場所を正確に追跡しないのはなぜですか? ( 'rtc_callback'の場合は、関数' rtc_set_config'のコードに行き、 'cfg-> callback'の値がどこに格納されているのかを見なければなりません)。 –