研一下学期第十三周周记

TSN技术研究与进展
本文回顾了作者在时间敏感网络(TSN)领域的研究进展,包括对关键论文的梳理及遇到的问题。通过导师的指导和个人反思,明确了未来的研究方向集中在联合路由与调度,并将重点关注QB(QoS Bus)等协议。


前言

昨天开组会的时候做了汇报:
1、因为最近要交专业写作的大作业,所以看的也是文献综述性质的论文,所以汇报时的内容覆盖面太广太浅,没有深入到我研究的小方向的深入研究;
2、另因为和我们小组的博士师兄交流很少,所以没有人可以解答我关于阅读论文后的一些问题,所以我汇报完之后提出了这些问题;
3、PPT上内容太少,大部分要靠听演讲内容才能理解。
以上三点被导师批评了,以后要改进。

本周六软件开发工程实践就要开课了;距离6月24日提交专业写作大作业综述论文还有29天。


一、复盘以及总结

目前收集了以下几篇论文:
[1] Libing Deng, Guoqi Xie, Hong Liu, Yunbo Han, Renfa Li, and Keqin Li. 2022. A Survey of Real-Time Ethernet Modeling and Design Methodologies: From AVB to TSN. ACM Comput. Surv.55, 2, Article 31 (March 2023), 36 pages. https://doi.org/10.1145/3487330

[2] Sune Mølgaard Laursen, Paul Pop, and Wilfried Steiner. 2016. Routing optimization of AVB streams in TSN networks. SIGBED Rev. 13, 4 (September 2016), 43–48. https://doi.org/10.1145/3015037.3015044(ACM的)

[3] Yang Wang, Jidong Chen, Wei Ning, Hao Yu, Shimei Lin, Zhidong Wang, Guanshi Pang, Chao Chen,A time-sensitive network scheduling algorithm based on improved ant colony optimization,Alexandria Engineering Journal,Volume 60, Issue 1,2021,Pages 107-114,ISSN 1110-0168, https://doi.org/10.1016/j.aej.2020.06.013.

[4] A. Nasrallah et al., “Ultra-Low Latency (ULL) Networks: The IEEE TSN and IETF DetNet Standards and Related 5G ULL Research,” in IEEE Communications Surveys & Tutorials, vol. 21, no. 1, pp. 88-145, Firstquarter 2019, doi: 10.1109/COMST.2018.2869350.

[5] 徐骁麟.时间敏感网络技术及其在工业互联网中的应用[J].电信网技术,2018(05):1-5.(这个主要是从图书馆借的书里面TSN部分借鉴比较多的一篇论文,书是人民邮电出版社的《工业互联网网络技术与应用》)

第1篇和第4篇是综述论文,第2篇和第3篇是我看第1篇论文里面调度方面提到的。

二、目前阶段目标

昨天组会汇报完之后,确实感觉自己现在有点偏离研究方向了,把时间花在了非重点研究区域,很不值得。问了以下组里的师姐,师姐给的建议是:

从具体的调度论文入手的,因为一般非综述的论文只会涉及到TSN协议的一部分,比较容易理解。如果有不懂的方法的话,文章里有参考文献就直接看参考文献,没有的话你可以再去综述里找或者去网上谷歌学术之类的搜论文的网页搜索。
你如果研究联合路由与调度的话,时间同步机制了解原理就可以了,其他安全性方面的协议可以暂时不看,重点是qbu,qbv这样的协议,别人的路由选择算法也要细看。

现在的小目标如下:

找相关论文,写专业写作的大作业文献综述。


总结

扶摇应借力,桃李愿成阴。

在嵌入式开发实习的第十八,可以从多个维度对工作内容进行总结,包括项目进展、技术挑战、文档整理以及个人成长等方面。 ### 项目进展 本主要完成了某个嵌入式项目的初步版本交付。该项目涉及基于 Modbus 协议的串口通信功能开发,通过与硬件团队的紧密合作,确保了软件部分与硬件设备之间的数据交互正常运行。此外,还完成了与上位机软件的数据对接,实现了数据的实时监控和调试功能[^1]。 ### 技术挑战 在开发过程中,遇到了一些技术难题。例如,在处理 Modbus 协议时,需要理解其通信机制和数据格式,以确保数据的正确解析和发送。为了提高系统的稳定性,采用了自旋锁(spinlock)来保护共享资源,防止并发访问导致的数据不一致问题[^4]。同时,针对 UART 通信中的数据校验问题,引入了奇偶校验和CRC校验机制,确保了数据传输的可靠性[^3]。 ### 文档整理 为了便于后续的维护和团队协作,本还重点进行了开发文档的整理工作。文档内容涵盖了项目的需求分析、架构设计、模块划分、接口定义以及测试用例等。通过详细的文档记录,不仅提高了项目的可追溯性,也为新成员的加入提供了良好的参考资料[^1]。 ### 个人成长 通过这一的工作,不仅加深了对嵌入式开发的理解,还在实践中掌握了更多的技术细节。特别是在处理复杂协议和多线程编程方面有了显著的进步。此外,还学会了如何高效地进行问题排查和调试,提升了实际解决问题的能力。面对技术上的挑战,保持持续学习的态度,积极查阅资料并向经验丰富的同事请教,使得问题得以顺利解决[^2]。 ### 代码示例 以下是一个简单的 Modbus 协议解析示例,展示了如何从串口读取数据并解析为 Modbus 报文: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> // Modbus 报文结构体 typedef struct { uint8_t slave_id; uint8_t function_code; uint16_t starting_address; uint16_t quantity_of_registers; uint8_t byte_count; uint16_t *registers; } ModbusRequest; // 解析 Modbus 请求报文 int parse_modbus_request(const uint8_t *buffer, size_t length, ModbusRequest *request) { if (length < 8) { return -1; // 数据长度不足 } request->slave_id = buffer[0]; request->function_code = buffer[1]; request->starting_address = (buffer[2] << 8) | buffer[3]; request->quantity_of_registers = (buffer[4] << 8) | buffer[5]; request->byte_count = buffer[6]; if (request->byte_count != (buffer[7] * 2)) { return -2; // 数据长度不匹配 } request->registers = (uint16_t *)malloc(request->byte_count); if (!request->registers) { return -3; // 内存分配失败 } for (int i = 0; i < request->byte_count / 2; i++) { request->registers[i] = (buffer[7 + i * 2] << 8) | buffer[8 + i * 2]; } return 0; } int main() { int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_SYNC); if (fd < 0) { perror("无法打开串口"); return 1; } struct termios tty; memset(&tty, 0, sizeof tty); if (tcgetattr(fd, &tty) != 0) { perror("获取串口属性失败"); return 1; } cfsetospeed(&tty, B9600); cfsetispeed(&tty, B9600); tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars tty.c_iflag &= ~IGNBRK; // disable break processing tty.c_lflag = 0; // no signaling chars, no echo, no canonical processing tty.c_oflag = 0; // no remapping, no delays tty.c_cc[VMIN] = 0; // read doesn't block tty.c_cc[VTIME] = 10; // 0.5 seconds read timeout tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl tty.c_cflag |= (CLOCAL | CREAD); // ignore modem controls, enable reading tty.c_cflag &= ~(PARENB | PARODD); // shut off parity tty.c_cflag &= ~CSTOPB; // only need 1 stop bit tty.c_cflag &= ~CRTSCTS; // no hardware flowcontrol if (tcsetattr(fd, TCSANOW, &tty) != 0) { perror("设置串口属性失败"); return 1; } uint8_t buffer[256]; ssize_t n = read(fd, buffer, sizeof(buffer)); if (n > 0) { ModbusRequest request; int result = parse_modbus_request(buffer, n, &request); if (result == 0) { printf("从站ID: %d\n", request.slave_id); printf("功能码: %d\n", request.function_code); printf("起始地址: %d\n", request.starting_address); printf("寄存器数量: %d\n", request.quantity_of_registers); printf("数据长度: %d\n", request.byte_count); for (int i = 0; i < request.quantity_of_registers; i++) { printf("寄存器[%d]: %d\n", i, request.registers[i]); } free(request.registers); } else { printf("解析Modbus请求失败: %d\n", result); } } else { printf("没有读取到数据\n"); } close(fd); return 0; } ``` ### 相关问题 1. 如何在嵌入式系统中实现Modbus协议的通信? 2. 在嵌入式开发中,如何处理多线程环境下的资源共享问题? 3. 如何编写高效的嵌入式驱动程序? 4. 嵌入式系统中常用的调试工具和技术有哪些? 5. 如何评估嵌入式系统的性能和稳定性?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值