首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(下)

SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(下)

原创
作者头像
创龙科技Tronlong
发布于 2026-10-15 08:46:17
发布于 2026-10-15 08:46:17
70
举报
3.3.3关键代码

(1)解析传递参数。

(2)初始化CAN FD接口。

(3)发送端。

(4)接收端。

(5)校验接收到的数据信息。

(6)打印接收到的数据信息。

3.4 tcp_udp案例

3.4.1案例功能

本案例主要实现客户端(client)与服务端(server)的文本数据相互收发功能。本案例包含4个程序:

(1)tcp_server:TCP服务端测试程序。

(2)tcp_client:TCP客户端测试程序。

(3)udp_server:UDP服务端测试程序。

(4)udp_client:UDP客户端测试程序。

程序流程如下图所示。

服务端和客户端程序均可在单板机、PC机Ubuntu系统上运行。本章节采用单板机本地回环测试,即服务端与客户端程序均在单板机上运行,通过127.0.0.1进行本地回环测试,无需经过路由器。案例bin目录下的4个文件均为ARM端可执行程序。

3.4.2 操作说明

将本案例bin目录下的4个可执行程序拷贝至单板机文件系统。

在Ubuntu中执行如下命令使用OpenSSH登录单板机文件系统,如下图所示。

Host# sudo ssh root@192.168.12.9 //192.168.12.9为单板机IP地址,请根据实际情况修改

(1)TCP通信测试

在可执行程序所在目录执行如下命令,分别在单板机运行TCP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。

Target# ./tcp_server 2233 //TCP服务端命令

Host# ./tcp_client 127.0.0.1 2233 //TCP客户端命令

程序执行后,客户端将会连接服务端。在服务端(Target)输入字符串"Tronlong",按下回车键即可在客户端显示对应内容。在客户端(Host)输入字符串"Hello Tronlong",按下回车键即可在服务端显示对应内容,如下图所示。

(2)UDP通信测试

在可执行程序所在目录执行如下命令,分别在单板机运行UDP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。

Target# ./udp_server 2233 //UDP服务端命令

Host# ./udp_client 127.0.0.1 2233 //UDP客户端命令

程序执行后,客户端将不会自动连接服务端。服务端在收到客户端信息前无法得知客户端的存在,因此需要客户端先向服务端发送信息。

在客户端(Host)输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端(Target)输入字符串"Hello Tronlong",按下回车键即可在客户端显示对应内容,如下图所示。

如需在PC机Ubuntu系统运行服务端或客户端程序,请将案例src源码目录拷贝至Ubuntu工作目录。进入源码目录后执行make命令,即可在当前目录下生成x86端可执行程序。在不同终端运行服务端或客户端程序的命令类似,但127.0.0.1需使用服务器IP地址替代。

Host# make clean

Host# make CC=gcc

3.4.3 关键代码

以TCP通信程序为例。

(1)tcp_client.c

注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv等数据结构和系统调用的使用。

(2)tcp_server.c

注意源码中的struct sockaddr_in、socket、connect、fgets、send、recv、bind、listen、accept等数据结构和系统调用的使用。

4 Python开发案例

我司提供的Python开发案例位于产品资料“4-软件资料\Demo\”路径下的python-demos目录下。案例脚本文件无需编译,可基于我司提供的系统直接运行。

4.1 Python开发案例

本章节以简单案例演示Python的使用方法。系统支持Python3.10,相关库位于文件系统"/usr/lib/python3.10/"目录下。

4.2 led_flash案例

4.2.1 案例功能

本案例通过向单板机用户可编程指示灯LED设备节点反复交替写入1、0数值,实现LED闪烁效果。LED点亮与熄灭时间均为0.5s。

程序流程如下图所示。

LED设备节点为"/sys/class/leds/user-ledX/"目录下的brightness。

4.2.2 操作说明

将案例目录下的led_flash.py脚本文件拷贝至单板机文件系统,并在脚本文件所在目录执行如下命令查看程序参数信息。

Target# ./led_flash.py -h

执行如下命令运行脚本程序,即可看到单板机上的LED进行闪烁。

Target# ./led_flash.py

可按下"Ctrl + C"终止程序。

4.2.3 关键代码

(1)查找所有LED设备。

(2)控制LED亮灭。

5 MQTT通信案例

我司提供的MQTT通信协议开发案例主要包括mqtt_client和mqtt_sinewave_pub,位于产品资料“4-软件资料\Demo\mqtt-demos\”目录下。

5.1 MQTT概述

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

MQTT是轻量、简单、开放和易于实现的,同时作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT具有如下特点:

(1)轻量可靠:MQTT的报文格式精简、紧凑,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。

(2)发布/订阅模式(Publish/Subscribe):发布/订阅模式的优点在于发布者与订阅者的解耦,实现异步协议。即订阅者与发布者无需建立直接连接,亦无需同时在线。

(3)为物联网而生:提供心跳机制、遗嘱消息、QoS质量等级 + 离线消息、主题和安全管理等全面的物联网应用特性。

(4)生态更完善:覆盖范围广,已成为众多云厂商物联网平台的标准通信协议。

5.2 应用场景

MQTT作为一种低开销,低带宽占用的即时通讯协议,可以极少的代码和带宽为联网设备提供实时可靠的消息服务,适用于硬件资源有限的设备及带宽有限的网络环境。常见的应用场景如下:

(1)物联网M2M通信,物联网大数据采集。

(2)移动即时消息及消息推送。

(3)智能硬件、智能家居、智能电器。

(4)车联网通信,电动车站桩采集。

(5)智慧城市、远程医疗、远程教育。

(6)电力能源、石油能源。

5.3 Mosquitto工具安装

Mosquitto是一款开源的MQTT消息代理(服务器)软件,提供轻量级的、支持可发布/可订阅的的消息推送模式。我司提供的单板机文件系统已支持Mosquitto工具,本文mqtt_client案例采用Mosquitto工具演示MQTT通信协议的通信功能。由于上位机Ubuntu系统作为通信对象,因此需在Ubuntu终端执行如下命令安装Mosquitto工具,出现提示时输入"Y"并按下回车即可。

Host# sudo apt-get install mosquitto-clients

5.4 mqtt_client案例

5.4.1 案例说明

本案例使用libmosquitto的API与MQTT代理服务器通信。基于MQTT通信协议,实现发布和订阅消息功能。

程序流程图如下图所示。

5.4.2 案例测试

本案例使用公网MQTT服务器与上位机Ubuntu Mosquitto工具通信。请通过网线将单板机千兆网口LAN1和上位机连接至公网,确保可正常访问互联网。

下表提供了可用的在线公共MQTT服务器,可根据需要自行切换。

单板机启动,将案例bin目录下mqtt_client可执行文件拷贝至单板机系统的任意目录下,执行如下命令查看程序参数说明。

Target# ./mqtt_client --help

(1)单板机发布/上位机订阅

在上位机执行如下命令,使用mosquitto_sub工具订阅MQTT主题。

Host# mosquitto_sub -h broker-cn.emqx.io -p 1883 -t test/data

参数解析:

-h:指定MQTT服务器

-p:指定MQTT服务器端口

-t:定义MQTT主题,可自定义命名

在单板机系统执行如下命令发布消息至MQTT服务器。

Target# ./mqtt_client -h mosquitto_sub -h broker-cn.emqx.io -p 1883 -t test/data -p 1883 -M publish -t test/data -m 'www.tronlong.com'

参数解析:

-h:MQTT服务器

-p:MQTT服务器端口

-M:模式,publish为发布,subscribe为订阅

-t:MQTT主题,可自定义命名

-m:发布的MQTT消息

消息发布成功后,上位机将从MQTT服务器接收到对应的消息。

(2)单板机订阅/上位机发布

在单板机文件系统执行如下命令订阅MQTT主题。

Target# ./mqtt_client -h broker-cn.emqx.io -p 1883 -M subscribe -t test/data

在上位机执行如下命令发布消息至MQTT服务器。

Host# mosquitto_pub -h broker-cn.emqx.io -p 1883 -t test/data -m www.tronlong.com

消息发布成功后,单板机将从MQTT服务器接收到对应消息。

由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注创龙科技,或者评论区留言,感谢您的支持!

​

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 3.3.3关键代码
  • 3.4 tcp_udp案例
    • 3.4.1案例功能
    • 3.4.2 操作说明
    • 3.4.3 关键代码
  • 4 Python开发案例
  • 4.1 Python开发案例
  • 4.2 led_flash案例
    • 4.2.1 案例功能
    • 4.2.2 操作说明
    • 4.2.3 关键代码
  • 5 MQTT通信案例
  • 5.1 MQTT概述
  • 5.2 应用场景
  • 5.3 Mosquitto工具安装
  • 5.4 mqtt_client案例
    • 5.4.1 案例说明
    • 5.4.2 案例测试
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档