Openharmony南向研究—Linux驱动框架-串口( 四 )

< FRAME_LEN; i++) {ret = read(fd1, &buf, 1);// 读取一个字节if (ret == ERR) {perror("read errorn");exit(0);}recv[i] = buf;// 保存读取到的字节}// 处理接收到的数据ret = data_proce(recv);if (ret == ERR) {perror("data process errorn");exit(0);}}}int main(int argc, char **argv){char *uart_dev ="ttyUSB1";// 串口设备文件路径char *uart_dev_t = "ttyUSB2";// 串口设备文件路径int ret1 = ERR;// 函数返回值// 打开串口设备文件fd1 = open(uart_dev, O_RDWR);fd2= open(uart_dev_t,O_RDWR);if (fd2== ERR) {perror("open file failn");return ERR;}if (fd1 == ERR) {perror("open file failn");return ERR;}// 初始化串口ret1 = uart_init(fd1, 9600L);ret2 = uart_init(fd2,9600L);if (ret1 == ERR) {perror("uart init errorn");return ERR;}if (ret2 == ERR) {perror("uart_t init errorn");return ERR;}// 创建线程,一直执行读串口的操作pthread_t pid_t;pthread_create(&pid_t, NULL, (void *)_serial_input_task, 0);pthread_create(&pid_t, NULL, (void *)_serial_output_task, 0);while (1) {sleep(10L);// 主线程等待}close(fd1);// 关闭串口设备文件return 0;}在上述代码中实现了接收端对于发送端发送信息的校验,主要流程为通过接受线程收取到来自ttyUSB1的数据后进入recv_proc()函数进行判断,如果收到的数据是“helloworld"则将需要发出的值send_data 设置未1,若不是则设置为0,最后通过发送线程发送出去 。
在整个流程中核心操作为对文件操作符fd的操作 。
总结和一些思考串口驱动开发是嵌入式系统开发中的一个基本任务,需要掌握底层硬件编程和Linux内核编程知识,硬件配置,驱动框架的选择,设备树的配置,内核模块的开发,都是其中的重要任务,需要每一个步骤都充分了解仔细设计,才能得到最终的有效结果 。
在串口操作中需要进行复杂配置,而对于大部分的设备开发而言,有不同类型的接口,接口又有着不同的型号和数据协议,给开发以及使用带来了非常多的不便捷性,开源鸿蒙以及鸿蒙操作系统带来的可能性之一是分布式软总线,在之后的设备中只需要部署分布式软总线子系统,只需要专注于本地算法和设备驱动的开发,对于多个数据接口的适配不需要那么关注,这对于硬件和设备开发是一大变革 。我们都将对此拭目以待,对鸿蒙系统的研究是十分值得的 。从长远来看,分布式软总线将进一步促进设备开发的进步和发展 。未来,随着物联网和智能制造等领域的不断发展,越来越多的设备将需要互相连接和通信,分布式软总线将成为设备之间通信的主要方式之一 。甚至期待有一天可以取代传统的串口开发等工作,只需要适配分布式软总线子系统即可 。

【Openharmony南向研究—Linux驱动框架-串口】


推荐阅读