linkkit app 作为一个设备联网与阿里云数据交互的实例,是学习AliOS物联网开发的入门示例:
它的代码调用顺序大概如下。
@esp8266是以8266soc为例
1. //platform/mcu/esp8266/bsp/entry.c user_init(void)
2. //kernel/init/aos_init.c aos_kernel_init()
3. //app/example/linkkitapp/app_entry.c application_start()
4. //app/example/linkkitapp/linkkit_example_solo.c linkkit_main()
application_start()函数里有许多是被宏定义包含的方法调用,把这些去除后,剩下的对我们有用的功能就如下几条了。
- 日志级别设置
- 网络功能初始化?
- 注册按键事件处理回调函数
- 注册wifi服务回调函数
- 注册云服务回调
- 开启一个任务--netmgr ,注册了linkkit_event_monitor回调函数
int application_start(int argc, char **argv)
{
aos_set_log_level(AOS_LL_DEBUG); //设置日志打印级别
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); //开启一个任务 start_netmgr
aos_loop_run(); //循环不退出?
return 0;
}
linkkit_event_monitor 不能别阻塞,且应该快速完成。如果有需要比较复杂、耗时的处理应该新开启另一个任务去完成
/*
* Note:
* the linkkit_event_monitor must not block and should run to complete fast
* if user wants to do complex operation with much time,
* user should post one task to do this, not implement complex operation in
* linkkit_event_monitor
*/
static void linkkit_event_monitor(int event)
{
switch (event) {
case IOTX_AWSS_START: // AWSS start without enbale, just supports device
// discover
// operate led to indicate user
LOG("IOTX_AWSS_START");
break;
}
// .......
//..........
}