655|3

22

帖子

0

资源

一粒金砂(中级)

干货!最全的Linux应用开发案例分享,含关键代码!(二) [复制链接]

目录

4.tl_can_echo案例

4.1 案例功能

4.2 操作说明

4.3 关键代码

5 tl_devmem_rw案例

5.1 案例功能

5.2 操作说明

5.3 关键代码

6 tcp_udp_demos案例

6.1 案例功能

6.2 操作说明

6.3 关键代码

本篇文章,咱们继续分享几个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

  1. 将从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客户端

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。感兴趣的朋友,欢迎在评论区留言和我探讨!

 

此帖出自ARM技术论坛

回复

4498

帖子

1

资源

五彩晶圆(初级)

这can界面仿的zlg的界面吧

个人签名

默认摸鱼


回复

831

帖子

3

资源

版主

总是觉得linux好难

回复

1万

帖子

2853

资源

管理员

谢谢分享~~果然是干货

个人签名

玩板看这里:

http://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表