SBC‑TLT153 嵌入式 Linux 应用开发,交叉编译与 GDB 调试实践(下)
3.3.3关键代码(1)解析传递参数。https://file1.elecfans.com/web3/M00/7E/53/wKgZO2rMdBOAdeyZAACbjW6BR3A082.png
(2)初始化CAN FD接口。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdByAHkwtAADIT0QyY3M419.png
(3)发送端。
https://file1.elecfans.com/web3/M00/7E/53/wKgZO2rMdCaALqIkAAE3ikmxQAI321.png
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdCaAPCjmAAD0gHDPnXA166.png
(4)接收端。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdDaAN0rQAADW340PsCo711.png
https://file1.elecfans.com/web3/M00/7E/53/wKgZO2rMdDaAWEGLAAD2NqFX7Io175.png
(5)校验接收到的数据信息。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdEKASrMTAABwOl5EyoQ604.png
(6)打印接收到的数据信息。
https://file1.elecfans.com/web3/M00/7E/53/wKgZO2rMdEqAFC_VAABTHJndKXQ636.png
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客户端测试程序。程序流程如下图所示。
https://file1.elecfans.com/web3/M00/20/9A/wKgZO2hbowmAV9fqAACs2vWYWh4443.png
https://file1.elecfans.com/web3/M00/20/9A/wKgZO2hbowmAV9fqAACs2vWYWh4443.png
服务端和客户端程序均可在单板机、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地址,请根据实际情况修改
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdGuAZSXEAADwVXFgjho990.png
(1)TCP通信测试在可执行程序所在目录执行如下命令,分别在单板机运行TCP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。Target# ./tcp_server 2233 //TCP服务端命令Host# ./tcp_client 127.0.0.1 2233 //TCP客户端命令程序执行后,客户端将会连接服务端。在服务端(Target)输入字符串"Tronlong",按下回车键即可在客户端显示对应内容。在客户端(Host)输入字符串"Hello Tronlong",按下回车键即可在服务端显示对应内容,如下图所示。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdIWAP_zPAAARZrIG4aY393.png
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdIWAMxw9AAAlz3kMqI0023.png
(2)UDP通信测试在可执行程序所在目录执行如下命令,分别在单板机运行UDP服务端和客户端程序。2233为服务端程序指定的端口号,客户端程序端口号参数需与服务端程序一致。Target# ./udp_server 2233 //UDP服务端命令Host# ./udp_client 127.0.0.1 2233 //UDP客户端命令程序执行后,客户端将不会自动连接服务端。服务端在收到客户端信息前无法得知客户端的存在,因此需要客户端先向服务端发送信息。在客户端(Host)输入字符串"Tronlong",按下回车键即可在服务端显示对应内容。在服务端(Target)输入字符串"Hello Tronlong",按下回车键即可在客户端显示对应内容,如下图所示。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdJSALxLKAAAOVGE4ZZw293.png
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdJSAZdO6AAAkr_7Xow4498.png
如需在PC机Ubuntu系统运行服务端或客户端程序,请将案例src源码目录拷贝至Ubuntu工作目录。进入源码目录后执行make命令,即可在当前目录下生成x86端可执行程序。在不同终端运行服务端或客户端程序的命令类似,但127.0.0.1需使用服务器IP地址替代。Host# make cleanHost# make CC=gcc
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdKCATtIwAADwpMjvZdU460.png
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/"目录下。 https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdK2ALz7sAAC7TgLLhy8700.png
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdK2AFTvIAAA6vdYsNNM496.png
4.2 led_flash案例4.2.1 案例功能本案例通过向单板机用户可编程指示灯LED设备节点反复交替写入1、0数值,实现LED闪烁效果。LED点亮与熄灭时间均为0.5s。程序流程如下图所示。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdL2Ab-DqAAB3sddVRgw997.png
LED设备节点为"/sys/class/leds/user-ledX/"目录下的brightness。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdMaAa3QRAAAXtnI9eUc647.png
4.2.2 操作说明将案例目录下的led_flash.py脚本文件拷贝至单板机文件系统,并在脚本文件所在目录执行如下命令查看程序参数信息。Target# ./led_flash.py -h
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdM-AZA7sAAARf-1FhuU037.png
执行如下命令运行脚本程序,即可看到单板机上的LED进行闪烁。Target# ./led_flash.py
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdNiAFdbuAAAduAGfN1Q008.png
可按下"Ctrl + C"终止程序。4.2.3 关键代码(1)查找所有LED设备。
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdOKAYIyjAACDarZXlgU378.png
(2)控制LED亮灭。
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdOyAN_kgAACVTqB4r0o761.png
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是轻量、简单、开放和易于实现的,同时作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
https://file1.elecfans.com/web3/M00/20/B7/wKgZO2hcrPmAI011AABoX9YS1-k398.png
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
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdQiAWBDeAAB68RiNPrc472.png
5.4 mqtt_client案例5.4.1 案例说明本案例使用libmosquitto的API与MQTT**服务器通信。基于MQTT通信协议,实现发布和订阅消息功能。程序流程图如下图所示。
https://file1.elecfans.com/web3/M00/20/A7/wKgZPGhcrReAeokiABSyIp1uNXM235.png
5.4.2 案例测试本案例使用公网MQTT服务器与上位机Ubuntu Mosquitto工具通信。请通过网线将单板机千兆网口LAN1和上位机连接至公网,确保可正常访问互联网。下表提供了可用的在线公共MQTT服务器,可根据需要自行切换。
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdRuAUIDQAAAobSvl_oo292.png
单板机启动,将案例bin目录下mqtt_client可执行文件拷贝至单板机系统的任意目录下,执行如下命令查看程序参数说明。Target# ./mqtt_client --help
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdSiAHb1PAABDfrmhucA698.png
(1)单板机发布/上位机订阅在上位机执行如下命令,使用mosquitto_sub工具订阅MQTT主题。Host# mosquitto_sub -h broker-cn.emqx.io -p 1883 -t test/data参数解析:-h:指定MQTT服务器-p:指定MQTT服务器端口-t:定义MQTT主题,可自定义命名
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdTGAKcfGAAAccRRZB_k503.png
在单板机系统执行如下命令发布消息至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消息
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdT6AcE1LAAAbwHx0a6g699.png
消息发布成功后,上位机将从MQTT服务器接收到对应的消息。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdUeANNSaAAAmM9-qWO0386.png
(2)单板机订阅/上位机发布在单板机文件系统执行如下命令订阅MQTT主题。Target# ./mqtt_client -h broker-cn.emqx.io -p 1883 -M subscribe -t test/data
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdU-AQRfiAAANscLLyW0690.png
在上位机执行如下命令发布消息至MQTT服务器。Host# mosquitto_pub -h broker-cn.emqx.io -p 1883 -t test/data -m www.tronlong.com
https://file1.elecfans.com/web3/M00/7E/54/wKgZO2rMdVmAXXh0AAAxtwydU4k430.png
消息发布成功后,单板机将从MQTT服务器接收到对应消息。
https://file1.elecfans.com/web3/M00/7E/4C/wKgZPGrMdWOAfiZqAAASXZkPp5c043.png
由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注创龙科技,或者评论区留言,感谢您的支持!
页:
[1]