【案例分享】linux应用开发中常用案例讲解(二)-pg直营网

    pg直营网-pg网赌游戏 >关于创龙 > 新闻资讯 > 技术文章

    联系pg直营网

    contact us

    公司总机:020-8998-6280

    技术热线:020-3893-9437

    技术邮箱:support@tronlong.com

    销售邮箱:sales@tronlong.com

    【案例分享】linux应用开发中常用案例讲解(二)

    2021/08/27

    本篇文章继续分享几个linux应用开发案例,分别是tl_can_echo案例、tl_devmem_rw案例、tcp_udp_demos案例这三个较为常见的linux开发案例,并配备关键代码,本次延续使用创龙科技的tl335x-evm(am3352/am3354/am3358/am3359)arm cortex-a8架构的一系列开发板,详细讲解linux的应用开发。

    4.tl_can_echo案例

    1.案例功能

    本案例使用canutils工具包的canecho程序,实现can接口数据接收并重发功能。

    canutils工具包内含5个独立的程序,分别为canconfig、candump、canecho、cansend、cansequence。各程序功能简述如下:

    1. canconfig:用于配置can接口参数,比如波特率、模式等。
    2. candump:从can接口接收数据并以十六进制形式打印到标准输出,亦可输出到指定文件。
    3. canecho:从can接口接收数据,并将接收到的数据对外发送。
    4. cansend:向指定can接口发送数据。
    5. cansequence:向指定can接口发送自动重复递增数字,或指定接收模式并校验接收的递增数字。

    本案例仅使用canecho功能,如需实现其他功能,可自行下载canutils工具包并从中获取对应功能程序源码。

    程序流程如下图所示:

    图 25

    2.操作说明

    使用usb转can模块连接评估板can0接口和pc机usb接口,如下图所示。

    图 26

    参照调试工具安装文档安装usb转can驱动和ecan tools调试软件,双击打开ecan tools软件,选择设备类型,然后点击“打开设备”。

    图 27

    打开ecan tools,界面如下图所示。

    图 28

    进入评估板文件系统,使用文件系统自带的canconfig工具设置波特率,并启动can0接口。

    target#canconfig can0 stop

    target#canconfig can0 bitrate 125000

    target#canconfig can0 start

    图 29

    将本案例bin目录下的可执行程序tl_can_echo复制到评估板文件系统,进入可执行程序所在目录,执行如下命令查看程序参数信息。

    target#./tl_can_echo -help

    图 30

    执行如下命令绑定can0接口,并接收由ecan tools发出的数据,然后将接收到的数据重新发送出去。在ecan tools中输入数据并点击发送按钮,可看到有两帧数据,一帧是发送数据,另一帧是接收数据。

    target#./tl_can_echo -v can0

    图 31

    图 32

    可按"ctrl z"暂停程序,并执行如下命令退出程序。

    target#killall -9 tl_can_echo

    图 33

    3.关键代码

    1.使用socket监听can接口。

    图 34

    2.将从can接口接收到的数据重新发送出去。

    图 35

    5.tl_devmem_rw案例

    1.案例功能

    本案例主要实现对内存设备进行数据读写操作,同时测试数据正确性和读写速度。

    程序支持test、read、write三种测试模式,使用mmap对物理地址进行转换,可根据指定的访问操作类型按字节(byte)、按半字(halfword)进行访问。

    2.操作说明

    将本案例bin目录下的可执行程序tl_devmem_rw复制到评估板文件系统,进入可执行程序所在目录,执行如下命令查看程序参数信息。

    target#./tl_devmem_rw -h

    图 36

    请执行如下命令进行读写测试。此命令写入1mbyte大小的随机数据到指定地址并将写入的数据重新读出,测试数据正确性和读写速度。

    target#./tl_devmem_rw -t -a 0x90000000 -s 1048576 -o halfword

    图 37

    请新建一个test.txt文件,并输入任意内容(比如十六进制符0到f),同时执行如下命令进行写测试。此命令将test.txt文件中的16byte数据写到指定地址。

    target#./tl_devmem_rw -w -a 0x90000000 -s 16 -o halfword -f test.txt

    图 38

    请执行如下命令进行读测试。此命令从指定地址读取16byte的数据,并将内容打印(下图对应的值为十六进制符号0到f的ascii码)。

    target#./tl_devmem_rw -r -a 0x90000000 -s 16 -o halfword

    图 39

    3.关键代码

    1.把设备物理地址映射到虚拟地址。

    图 40

    2.根据指定的操作方式进行数据读取。

    图 41

    3.根据指定的操作方式进行数据写入。

    图 42

    6.tcp_udp_demos案例

    1.案例功能

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

    1. tl_tcp_server:tcp服务端测试程序。
    2. tl_tcp_client:tcp客户端测试程序。
    3. tl_udp_server:udp服务端测试程序。
    4. tl_udp_client:udp客户端测试程序。

    程序流程如下图所示:

    图 43 tcp通信

    图 44 udp通信

    服务端和客户端程序均可在评估板、pc机ubuntu系统上运行。当服务端与客户端程序均在评估板上运行时,可通过127.0.0.1进行本地回环测试,无需经过路由器。为方便测试,本章节采用评估板本地回环测试,bin目录下的4个文件均为arm端可执行程序。

    2.操作说明

    将本案例bin目录下的4个可执行程序复制到评估板文件系统。

    在ubuntu中执行如下命令使用openssh登陆评估板文件系统,如下图所示。

    host#sudo ssh root@192.168.0.83 //192.168.0.83为评估板ip,请根据实际情况修改

    图 45

    1.tcp通信测试

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

    target#./tl_tcp_server 2233 //tcp服务端命令

    target#./tl_tcp_client 127.0.0.1 2233 //tcp客户端命令

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

    图 46 tcp服务端

    图 47 tcp客户端

    2.udp通信测试

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

    target# ./tl_udp_server 2233 //udp服务端命令

    target# ./tl_udp_client 127.0.0.1 2233 //udp客户端命令

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

    在客户端输入字符串"tronlong",按下回车键即可在服务端显示对应内容。在服务端输入字符串"hello tronlong",按下回车键即可在客户端显示对应内容,如下图所示。

    图 48 udp客户端

    图 49 udp服务端

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

    host# make

    图 50

    3.关键代码

    以tcp通信程序为例。

    1.tl_tcp_client.c

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

    2.tl_tcp_server.c

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

    由于开发案例篇幅过长,给大家分为多个版本,今天先讲tl_can_echo案例、tl_devmem_rw案例、tcp_udp_demos。感兴趣的朋友,欢迎在评论区留言和我探讨!


    联系创龙

    公司总机:020-8998-6280

    技术热线:020-3893-9734

    技术邮箱:support@tronlong.com

    销售邮箱:sales@tronlong.com



    创龙官方微信公众号

    pg直营网 copyright © 2013~2021 广州创龙电子科技有限公司 all rights reserved  |

    网站地图