[原創] 干貨!最全的Linux應用開發案例分享,含關鍵代碼!(二)

別打牛牛 樓主
2021-9-1 16:33

目錄

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。感興趣的朋友,歡迎在評論區留言和我探討!

 

回復評論 (3)

沙發 freebsder

2021-9-1 17:32

這can界面仿的zlg的界面吧

默認摸魚

板凳 annysky2012

2021-9-2 08:36
總是覺得linux好難

4樓 okhxyyo

2021-9-2 09:14

謝謝分享~~果然是干貨

玩板看這里:

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

EEWorld測評頻道眾多好板等你來玩,還可以來頻道許愿樹許愿說說你想要玩的板子,我們都在努力為大家實現!

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 京公網安備 11010802033920號
    我也要說兩句
    發送
    評論
    萝卜大香蕉