当前位置: 首页 > news >正文

【gdb/sqlite3移植/mqtt】

gdb:

基础命令:

  • r    (run) : 代码直接运行
  • where  bt  :显示栈结构,函数的调用关系
    • gdb和c语言中,是函数来回调的过程,栈结构就是记录了函数的调用过程,谁调谁。比如,最开始一定是main函数,main函数中调用了哪个函数。
    • 栈是先入后出
  • b  :设置断点     b  行号  main.c(写上在哪个.c文件里的)/   b  函数名
  • n  : next 下一步,步过,直接执行
  • s  :setp  下一步,步入,进入函数里,还没执行,只是先进去,(一定得是自定义函数,不能是系统函数,比如strcpy之类的)
  • p  :printf 显示变量,指针。  p  a(显示变量), p *a(显示指针)
  • c  :continue跳出循环,可以在循环后面设置断点,然后按c,就直接执行循环部分
  • return :返回调用处。和s有关,进到函数里,函数没有问题执行完了,可以return回到上一级函数中去

gdb移植:

在虚拟机终端里,echo $PATH

进入目录里,ls

将gdbserver文件拷贝到 ~/nfs/rootfs/bin目录下

进到开发板终端中,进入/bin目录,有gdbserver

进入代码mylvgl目录里, 执行gdbserver :2000 ./demo

在虚拟机终端里:

在代码mylvgl目录下:

arm-linux-gnueabihf-gdb ./demo

target remote 192.168.1.100:2000

开始调试:

  • b  time_all  设置断点
  • c   运行代码
  • n  下一步
  • p buf  查看变量     p guider_ui.screen_table_1查看是否为空,为空就是错误的位置
  • info breakpoints   查看程序中有几个断点
  • delete删除所有断点

sqlite3数据库移植:

修改imx6ull不熄屏:

在当前目录下,根据文件名找文件

打开vt.c

make 编译

zImage复制到tftpboot目录下

创建install目录:

修改makefile:

make编译“:

make install : 

进入__install目录下,出现新的目录bin   include等等

在__install/bin目录下拷贝:

cp sqlite3 ~/nfs/rootfs/usr/bin

复制lib:

将sqlite的测试文件拷贝到rootfs:

写makefile_sqlite:

编译:

将a.out复制到rootfs目录下:

mqtt:

报文格式:基于二进制的

2个字节的固定头,数据长度变化的可变头,

payload可选,不能太长,三个总体不超过64k

传感器连接服务器,服务器应答传感器

传感器发送数据,服务器应答

客户端订阅

客户端取消订阅

心跳包(keep alive):保证传感器和服务器都在线

心跳包的触发:

  • 当客户端 在一个 KeepAlive 周期内未发送任何数据 时,会自动发送 PINGREQ

  • 如果应用层有发布消息(Publish / Subscribe),就不需要额外发心跳,因为数据包本身也会刷新计时。

Q1:什么是 MQTT 心跳包?心跳包是 MQTT 客户端与 Broker 之间周期性发送的 PINGREQ/PINGRESP 控制报文,用于维持 TCP 长连接与检测在线状态。
Q2:Keep Alive 参数的含义?客户端在 CONNECT 报文中指定 Keep Alive 秒数,表示两个报文之间的最大允许空闲时间。超时后 Broker 断开连接。
Q3:如果设置 Keep Alive=0 会怎样?表示禁用心跳,Broker 不会主动断开,但 TCP 连接可能被中间设备关闭。
Q4:为什么需要心跳?因为很多 NAT、防火墙会在连接空闲超过一定时间后强制关闭 TCP 连接,心跳可以防止掉线。
Q5:如果长时间没收到 PINGRESP 怎么办?客户端认为连接失效,执行自动重连逻辑。
Q6:心跳包是应用层还是传输层?心跳是 应用层(MQTT 协议) 报文,底层依然基于 TCP。

固定报头:

类型有0-15个,一共16个类型

http://www.dtcms.com/a/464851.html

相关文章:

  • 2025年渗透测试面试题总结-106(题目+回答)
  • 使用verdaccio搭建轻量的npm私有仓库
  • react + ant 封装Crud-根据配置生成对应的页面
  • 10-支持向量机(SVM):讲解基于最大间隔原则的分类算法
  • 微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术
  • 【Qt开发】输入类控件(六)-> QDial
  • 在JavaScript / HTML中,Chrome报错此服务器无法证实它就是xxxxx - 它的安全证书没有指定主题备用名称
  • 如何建一个免费的网站流量对网站排名的影响因素
  • PawSQL宣布支持DB2数据库SQL审核和性能优化
  • 在JavaScript / HTML中,div容器在内容过多时不显示超出的部分
  • webrtc弱网-RobustThroughputEstimator源码分析与算法原理
  • WPF依赖属性
  • 数据可视化 ECharts
  • javascript 性能优化实例一则
  • mapbox基础,使用矢量切片服务(pbf)加载line线图层
  • LLVM(Low Level Virtual Machine)介绍
  • Docker 一键部署指南:GitLab、Nacos、Redis、MySQL 与 MinIO 全解析
  • HDLBit 个人记录
  • 基于Jetson+FPGA+GMSL+AI的自动驾驶数据采集解决方案
  • 0006.C#学习笔记3-- HTML和CSS
  • 基于X86+FPGA+GPU的自动驾驶数据回灌测试解决方案
  • 在JavaScript / HTML中,Chrome报错Refused to execute inline script
  • 自动驾驶的“虚拟驾校”如何炼成?
  • 自动驾驶传感器数据录制过程中的五大系统性挑战
  • 学校网站建设开题报告书wordpress 发布说说
  • 企业如何减少由于数据不一致带来的运营成本?
  • 安卓开发APP应用程序和苹果iOS开发APP应用程序有什么区别?
  • Mac 上用 Homebrew 安装 JDK 8(适配 zsh 终端)完整教程
  • 利用小偷程序做网站企业网站开发建设
  • K8S基本命令操作