1
sourcesight的Window可以切换已打开的界面
2
别人写的代码能在各种平台上使用,别人已经把平台相关的函数 抽象出来了
client = mqtt_lease();->c = (mqtt_client_t *)platform_memory_alloc(sizeof(mqtt_client_t));
平台相关的 内存 分配函数,对于rt-thread / freertos / linux /
腾讯物联网终端操作系统(TencentOS tiny)它们有自己的malloc函数
3
client = mqtt_lease();分配一个结构体
mqtt_client_t *mqtt_lease(void) { int rc; mqtt_client_t* c; 分配一个结构体
c = (mqtt_client_t *)platform_memory_alloc(sizeof(mqtt_client_t)); if (NULL == c) return NULL;
memset(c, 0, sizeof(mqtt_client_t));
rc = mqtt_init(c); 初始化相关信息 if (MQTT_SUCCESS_ERROR != rc) return NULL; return c; }
rc = mqtt_init(c); ->
c-mqtt_keep_alive_interval = MQTT_KEEP_ALIVE_INTERVAL;保持活着的间隔
c-mqtt_version=MQTT_VERSION;版本
mqtt_read_buf_malloc(c, MQTT_DEFAULT_BUF_SIZE);读buff
mqtt_write_buf_malloc(c, MQTT_DEFAULT_BUF_SIZE);写buff
4
mqtt_set_port(client, "1883");连接到服务器的哪个端口
mqtt_set_host(client, "www.jiejie01.top");设置服务器IP
mqtt_connect(client);连接
5
网口,WIFI集成在板子上,直接使用socket编程,一套API的代码
怎么连接服务器(平台相关的)client端,客户端
mqtt_connect(client);->return mqtt_connect_with_results(c);
->rc = network_init()网络初始化,没做硬件相关的操作
->rc = network_connect(c->mqtt_network);网络连接,连接服务器,建立TCP连接 ->return nettype_tls_connect(n);//tls网络传输安全性 ->return nettype_tcp_connect(n);
->n->socket = platform_net_socket_connect 平台相关的 网络socket连接(移植时注意)
对linux:无事可做;对FreeRtos:AT命令通过串口发给esp8266
-> /* send connect packet */发出一个连接的packet,要连接MQTT服务器连接请求if ((rc = mqtt_send_packet())(客户端连接服务器)回应信号if (mqtt_wait_packet(c, CONNACK, &connect_timer) == CONNACK) //CONNACK客户端等别人的回应
->/* connect success, and need init mqtt thread */ c->mqtt_thread= platform_thread_init("mqtt_yield_thread", mqtt_yield_thread, c, MQTT_THREAD_STACK_SIZE, MQTT_THREAD_PRIO, MQTT_THREAD_TICK);
}//mqtt_yield_thread创建的线程
6
核心线程和发布线程
main
mqtt_connect(client);//mqtt_yield_thread创建的核心线程 res = pthread_create(&thread1, NULL, mqtt_publish_thread, client); //mqtt_publish_thread发布
线程
7
解析 发布线程
mqtt_publish_thread->mqtt_message_t msg;构造一个消息结构体
-> size_t payloadlen;指定下面buff多长,但没设置 msg.payloadlen=xxx;
->void *payload;指针指向一个buff,保存要上报的数据msg.payload=(void *)buf;
设置完后发布消息
mqtt_publish(client, "topic1", &msg);根据他的协议构造一些数据包
/* serialize publish packet and send it */
->len = MQTTSerialize_publish()数据按某些格式打包在一起
->if ((rc = mqtt_send_packet(c, len, &timer))发送数据->len = network_write()
->return nettype_tcp_write(n, buf, len, timeout); ->
return platform_net_socket_write_timeout平台提供的函数(这个函数发AT命令,通过串口发给WIFI模块)
8
mcu不能用这套代码
mcu里面资源有限,没有实现一套统一的接口
RT-Thread基本上实现了统一的接口
FreeRtos基本上没什么生态,没统一的接口
9
发送数据很多都是JSON格式,任何数据格式都可以
评论前必须登录!
注册