1. 程式人生 > >AliOS-Things--linkkitapp (5)看原始碼筆記

AliOS-Things--linkkitapp (5)看原始碼筆記

一、主函式解析

1、工程入口函式:application_start()

int application_start(int argc, char **argv)
{
#ifdef CONFIG_PRINT_HEAP
    print_heap();
    aos_post_delayed_action(5000, duration_work, NULL);
#endif

#ifdef CSP_LINUXHOST
    signal(SIGPIPE, SIG_IGN);
#endif

#if AOS_ATCMD
    at.set_mode(ASYN);
    at.
init(AT_RECV_PREFIX, AT_RECV_SUCCESS_POSTFIX, AT_RECV_FAIL_POSTFIX, AT_SEND_DELIMITER, 1000); #endif #ifdef WITH_SAL sal_init(); #endif aos_set_log_level(AOS_LL_NONE); netmgr_init(); aos_register_event_filter(EV_KEY, linkkit_key_process, NULL); aos_register_event_filter
(EV_WIFI, wifi_service_event, NULL); aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL); #ifdef CONFIG_AOS_CLI aos_cli_register_command(&resetcmd); aos_cli_register_command(&ncmd); #endif set_iotx_info(); aos_task_new("netmgr", start_netmgr, NULL, 4096); aos_loop_run
(); return 0; }

2、條件編譯是個啥?

 在入口函式中一共有5個條件編譯

3、純粹的程式碼

int application_start(int argc, char **argv)
{
    aos_set_log_level(AOS_LL_NONE);
    netmgr_init();
    aos_register_event_filter(EV_KEY, linkkit_key_process, NULL);
    aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);
    aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL);
    
    set_iotx_info();
    aos_task_new("netmgr", start_netmgr, NULL, 4096);
    aos_loop_run();

    return 0;
}
  • aos_set_log_level(AOS_LL_NONE):設定AOS的日誌列印水平
    • AOS_LL_NONE:關閉日誌
    • AOS_LL_FATAL:輸出致命日誌
    • AOS_LL_ERROR:輸出致命日誌加錯誤日誌
    • AOS_LL_WARN:輸出致命日誌、錯誤和警告的日誌 (預設日誌水平)
    • AOS_LL_INFO:輸出資訊、警告和錯誤日誌
    • AOS_LL_DEBUG:輸出除錯、資訊、警告、錯誤、致命日誌
  • netmgr_init():這裡其實也是個條件編譯,編譯條件是:NET_WITH_WIFI
  • aos_register_event_filter(EV_KEY, linkkit_key_process, NULL):按鍵點選事件,處理程序,事件過濾器
  • aos_register_event_filter(EV_WIFI, wifi_service_event, NULL):WiFi連線事件,處理程序,事件過濾
  • aos_register_event_filter(EV_YUNIO, cloud_service_event, NULL):雲平臺連線事件,處理程序,事件過濾
  • set_iotx_info():設定產品的四元組:PK、PS、DN、DS
  • aos_task_new("netmgr", start_netmgr, NULL, 4096):建立一個任務“netmgr”
  • aos_loop_run():進入loop迴圈

二、函式解析

1、aos_register_event_filter

宣告:

/**
 * Register system event filter callback.
 *
 * @param[in]  type  event type interested.
 * @param[in]  cb    system event callback.
 * @param[in]  priv  private data past to cb.
 *
 * @return  the operation status, 0 is OK, others is error.
 */
int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv);

定義:

int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv)
{
    return SYS_CALL3(SYS_REGISTER_EVENT_FILTER, int, uint16_t, type,
                     aos_event_cb, cb, void *, priv);
}

2、aos_task_new

3、aos_loop_run