網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
通過前面這篇文章Android串口通訊SerialPort的使用詳情已經(jīng)基本掌握了串口的使用,那么不經(jīng)想問自己,到底什么才是串口通訊呢?串口通訊(Serial Communication),設(shè)備與設(shè)備之間,通過輸入線(RXD),輸出線(TXD),地線(GND),按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。CPU 和串行設(shè)備間的編碼轉(zhuǎn)換器(轉(zhuǎn)換器(converter)是指將一種信號(hào)轉(zhuǎn)換成另一種信號(hào)的裝置。信號(hào)是信息存在的形式或載體。在自動(dòng)化儀表設(shè)備和自動(dòng)控制系統(tǒng)中,常將一種信號(hào)轉(zhuǎn)換成另一種與標(biāo)準(zhǔn)量或參考量比較后的信號(hào),以便將兩類儀表聯(lián)接起來,因此,轉(zhuǎn)換器常常是兩個(gè)儀表(或裝置)間的中間環(huán)節(jié)。)。當(dāng)數(shù)據(jù)從 CPU 經(jīng)過串行端口發(fā)送出去時(shí),字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位;在接收數(shù)據(jù)時(shí),串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通行的端口,這些參數(shù)必須匹;
一、名詞解釋
- 1.波特率:用來表示通信速度的參數(shù),它表示每秒鐘傳送的 bit 的個(gè)數(shù);
- 2.數(shù)據(jù)位:通信中數(shù)據(jù)位的參數(shù);
- 3.停止位:表示單個(gè)包的最后一位,停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供上位機(jī)正時(shí)鐘同步的機(jī)會(huì);
- 4.校驗(yàn)位:串口通信中一種簡(jiǎn)單的檢錯(cuò)方式(偶校驗(yàn)[2]、奇校驗(yàn)[1]、無(wú)校驗(yàn)[0]);
二、SerialPort的函數(shù)分析
谷歌為開發(fā)者提供了一個(gè)串口通訊的工具類SerialPort,其中SerialPort中有8個(gè)函數(shù),其中有7個(gè)是公共方法提供給使用者調(diào)用;
1)public static void setSuPath(String suPath)用于設(shè)置 su 路徑 默認(rèn)的路徑 /system/bin/su,(一般不會(huì)使用)
2)static String getSuPath()用于獲取su路徑(一般不會(huì)使用)
3)public InputStream getInputStream()獲取輸入流;通過此方法可以獲取設(shè)備向上位機(jī)發(fā)送過來的數(shù)據(jù)。
4)public OutputStream getOutputStream()獲取輸出流;通過此方法可以向設(shè)備發(fā)送操作指令。
5)public native void close();?關(guān)閉串口;通過此方法關(guān)閉串口。
6)public static Builder newBuilder(File device, int baudrate)
7)public static Builder newBuilder(String devicePath, int baudrate)用于構(gòu)建串口對(duì)象。
8) private native FileDescriptor open(String absolutePath, int baudrate, int dataBits, int parity, int stopBits, int flags);用于開啟串口通訊,私有的方法,開發(fā)者只需創(chuàng)建一個(gè)SerialPort對(duì)象,函數(shù)會(huì)自動(dòng)調(diào)用。
三、SerialPort打開串口的流程
- 1.通過Runtime,獲取當(dāng)串口進(jìn)程。
- 2.向Linux內(nèi)核發(fā)送一個(gè)"chmod 666 "指令設(shè)置串口進(jìn)程的權(quán)限。
- 3.通過JNI方法獲取文件描述符對(duì)象。
- 4.通過文件描述符對(duì)象獲取輸入輸出流。
四、疑惑
在上述的加載流程中,不禁有一個(gè)疑問,為什么SerialPort中的open()、close()函數(shù)都用native去修飾,不用不行么?
于是我從open()入手,open返回一個(gè)對(duì)象叫FileDescriptor(文件描述符),那么這個(gè)類有什么作用呢?
于是我打開了FileDescriptor,注釋是這么描述的:文件描述符類的實(shí)例充當(dāng)?shù)讓犹囟ㄓ跈C(jī)器的結(jié)構(gòu)的不透明句柄,該結(jié)構(gòu)表示打開的文件、打開的套接字或另一個(gè)字節(jié)源或匯。文件描述符的主要實(shí)際用途是創(chuàng)建一個(gè)FileInputStream或FileOutputStream來包含它。應(yīng)用程序不應(yīng)該創(chuàng)建自己的文件描述符。
?結(jié)合《JNI編程指南》推薦使用場(chǎng)景
?既然串口通訊使用到了JNI,那么也將繼承JNI編程的缺點(diǎn),APP的兼容性將會(huì)變差。
五、總結(jié)
雖然串口通訊使用到進(jìn)程、Linux指令、JNI...,但拋開現(xiàn)象看本質(zhì),最終目標(biāo)還是獲得一個(gè)輸入輸出流去進(jìn)行讀寫操作。
原文鏈接:https://blog.csdn.net/qq_42111674/article/details/123737732
相關(guān)推薦
- 2022-10-20 C#?Winform消息通知系統(tǒng)托盤氣泡提示框ToolTip控件_C#教程
- 2022-04-16 Python?import自己的模塊報(bào)錯(cuò)問題及解決_python
- 2022-04-11 Python - logging.Formatter 的常用格式字符串
- 2023-03-20 C#中如何生成安裝包_C#教程
- 2022-12-23 C++?Boost?Exception超詳細(xì)講解_C 語(yǔ)言
- 2023-10-17 css標(biāo)簽畫圓形進(jìn)度條
- 2024-01-10 CloneNotSupportedException的解決方案 + Object的clone方法分析
- 2022-12-23 一文帶你搞懂Python中的文件操作_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支