聯系我們
Contact Us公司總機:020-8998-6280
技術熱線:020-3893-9734
技術郵箱: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。各程序功能簡述如下:
- canconfig:用于配置CAN接口參數,比如波特率、模式等。
- candump:從CAN接口接收數據并以十六進制形式打印到標準輸出,亦可輸出到指定文件。
- canecho:從CAN接口接收數據,并將接收到的數據對外發送。
- cansend:向指定CAN接口發送數據。
- 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的數據,并將內容打?。ㄏ聢D對應的值為十六進制符號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個程序:
- tl_tcp_server:TCP服務端測試程序。
- tl_tcp_client:TCP客戶端測試程序。
- tl_udp_server:UDP服務端測試程序。
- 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。感興趣的朋友,歡迎在評論區留言和我探討!

服務熱線

























