项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
一、如何可以使参数动态变化(多线程操作)
(一)创建使图形显示线程:用来显示图形
1.在显示线程加入:lv_timer_create(timer_call,1000,NULL);
2.回调函数的创建:
if(guider_ui.screen_table_1 != NULL)
{
lv_table_set_cell_value(guider_ui.screen_table_1, 1, 1, buf); //动态参数显示在表格指定位子
}
(二)创建图形内参数变化线程:采集到的传感器动态数据
二、GDB调试
(一)配置设置
1.如果板子的编译工具链中存在gdbserver,将其复制到挂载的rootfs/bin目录下
2.如果没有在官网下载并移植到rootfs/bin目录下
(二)调试步骤
1.pc端Makefile编译中加入-g选项
2.arm端gdbserver :2000 ./demo
3.pc端用对于gdb编译工具 ./demo
4.pc端(gdb):target remote 192.168.1.100:2000使程序远端开始调试
(三)调试命令
0:where/bt:查看栈结构,函数调用关系
1.b+行号(函数名):设置断点
2.n:(步过)运行完此行
3.s:(步入)跟踪进入此函数
4.display/p:查看变量
5.info breakpoints:查看断点
6.delete:删除所有断点
7.c/r:代码运行
8.return:返回函数调用处
三、find ./ -iname 'vt.c' //查找指定文件
四、sqlite3移植到开发板
(一)sqlite官网下载压缩包
(二)复制到对应目录,解压文件
(三)进入解压后的sqlite文件
(四)创建新的文件夹
(五)指定编译器和主机:./configure --host=arm-linux-gnueabihf --prefix=/home/linux/nfs/imx6/rootfs/sqlite-3.7.3/sqlite_install
(六)此时生成了Makefile:修改Makefile文件
(七)make install:在新建的目录下生成需要移植的文件
(八)将sqlite3复制到 挂载目录的usr/bin下
(九)将新建的文件夹下的bin和lib文件里面的内容复制到挂载目录下的bin和lib里面
(十)写makefile //指定生成的lib和头文件位置
(十一)检测是否移植成功:在开发板创建数据库
五、MQTT协议
(一)消息队列遥测传输协议(基于TCP/IP协议):发布方给服务器的内容,服务器可以选择先存起来,等订阅方需要时可以直接给予。
(二)工作方式:发布者(客户端)-->代理(服务器)-->订阅者(客户端)
(三)三中消息发布的服务质量(QoS)
1.(0):只发送一次。智能设备推送消息时未联网,推送过去未收到,再次联网也不会收到
2.(1):确保消息到达,消息可能重复发送(无订阅者丢弃)
3.(2):确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。(无订阅者,服务器会存储数据(有限)。发布给订阅者后会告知服务端)
4.预留(11)
(四)消息结构
1.主题(topic):订阅者订阅该主题,就会接收到该主题的消息内容
2.负载(payload):可以理解为消息的内容,是指订阅者具体要使用的内容。
(五)数据报结构(2字节)
1.固定头(4~7bit):MQTT控制报文的类型,报文的数据流向
2.标志位(0~3bit):用于指定控制报文类型的标志位(QoS)
2.可变头和消息体(剩余bit位)
(六)优点
1.极简协议,开销小:固定头部最小仅2字节,消息载荷紧凑,无冗余信息。
2.发布/订阅模式,解耦彻底:消息发布者和订阅者不需要知道对方的存在,只需与代理通信。
3.支持不同服务质量(QoS)
4.具备遗言消息:客户端可预设一个“遗言”主题和消息。当客户端异常断开时,代理会自动发布此消息。
六、心跳包
(一)作用:维持客户端与服务器连接,并且检测连接的健康状态
1.检测连接是否断开:网络环境复杂,客户端可能会因为网络异常、程序崩溃、机器断电等原因“非正常”断开。服务器需要通过心跳来及时检测到这些“僵尸连接”并将其清理,释放资源。
2.维持连接不断开:许多网络设备(如NAT路由器、防火墙)会定期清理不活跃的连接映射表(NAT表老化)。如果一个连接长时间没有数据交互,就会被这些设备主动断开。心跳包可以“保活”连接,防止被中间设备误杀。
3.感知网络质量:通过计算心跳包往返时间,可以间接评估网络的延迟和稳定性。
(二)工作机制)(客户端与服务端建立TCP长连接,连接的空闲期)
1.客户端
①间隔一定时间(30~60s)向服务端发送心跳包
②固定时间内等待服务端发送的回应心跳包
③判定连接是否断开:固定时间内没接收到服务端的回应表示连接断开
2.服务端
①等待客户端心跳包,收到立刻回应
②未收到(设定超时机制,超时断开即可)