从零开始的激光通讯(软件篇 第1章 协议栈)——回环测试(1-4节)

从零开始的激光通讯(软件篇 第1章 协议栈)——回环测试(1-4节)

github

https://github.com/HaHaHaHaHaGe/mynetstack

简介

在这里插入图片描述
实际上第一章的前四小节部分,已经实现了红色框框的全部功能(时间戳不在内)

接收

从最原始的数据流经过环形数组进行缓存(ringbuffer文件中的write函数)

从缓存中提取数据并尝试进行数据包提取(从ringbuffer中的read函数读取数据,经过unpacking函数)

在提取过程中进行crc32的校验(校验步骤在unpacking函数中)

将正确的数据进行译码(7bit->8bit)并分配内存进行保存(译码被封装成函数。在unpacking函数中被调用)

增加到recv_data_list单链中等待上层处理

发送

将上层提供好的数据进行编码(8bit->7bit)(trans_8to7b_64bytes_fast函数)

增加包头与crc32校验(packing函数)

增加到send_data_list单链中等待底层发送

测试代码

这个测试代码不是最后的版本,是中途测测调调测测调调的产物,所以有很多漏洞

u8 ____packing_unpackeg___(u32 loop)
{
	u8 *src = basic_malloc(896);
	u8 *dst = basic_malloc(2048);
	u8 *l1, *l2, stop;
	u32 e1, e2;
	u32 i,j;
	LIST_DATA *recv;
	ringbuffer ring;

	u32 lop2 = 100;
	u32 lop3 = loop;

	u32 rrr;
	while (lop2--)
	{
		loop = lop3;
		rrr = (rand() % 1024*10) + 3108 ;
		initial_buffer(&ring, YES, 2072);		//测试数组,即使使用rrr动态数组大小也不会有问题
		while (loop--)
		{
			for (j = 0; j < 3; j++)			//生成测试数据
			{
				for (i = 0; i < 896; i++)
				{
					src[i] = rand() % 256;
				}
				dst = packing(src, 896);						//将原始数据进行封包
				write_buffer_data(&ring, dst, 1024 + 12);		//将测试数据写入环形数组
			}
			if (loop == 0x3d5)
				i = 0;

			get_unread_ptr(&ring, &l1, &l2, &e1, &e2, NO);	//读取数据
			stop = unpacking(l1, l2, e1, e2);					//尝试解析读取的数据
			recv = recv_data_list.end;
			for (i = 0; i < 896; i++)							//判断解析的内容与原始数据是否相同
			{
				if (src[i] != recv->data[i])
					return NO;
			}
		}
		recv = recv_data_list.start;
		while (recv)
		{
			basic_free(recv->data);
			Delete_List(&recv_data_list, recv);
			recv = recv_data_list.start;
		}

		recv = send_data_list.start;
		while (recv)
		{
			basic_free(recv->data);
			Delete_List(&send_data_list, recv);
			recv = send_data_list.start;
		}
		deinitial_buffer(&ring);

	}

	return YES;
}

在这里插入图片描述
实际测试的代码还挺多的,虽然尽力把所有可能都考虑到了,但是难免可能会有些遗漏,遇到的时候在修复把

目前来说就是这样了

结尾

代码还在更新,还是要以github为准,这几天也修复了不少的bug,也增加了些新的文件与函数,具体可看GitHub

PS:准备弄弄硬件了,先不考虑红外头了,虽然红外头便宜,但是看不到光路感觉不够酷啊哈哈

打算弄个5.5w 450nm 激光管、配上扩束镜、驱动板估计要自己做了,接收方面先考虑,滤光片和APD雪崩二极管把,到手之手难免又是一堆的测试,主要测试一些激光管的速度响应时间,和电流/电压与光强的关系把。非线性相关就麻烦了,差的不多还好,差太多可能要考虑做个非线性转线性的函数塞到里面了。关于数字调制方面有点思路了,毕竟激光的抗干扰啥的比无线电强的不是一丁半点,所以有关使用在无线通讯里的内容可能不是很适合在这个小项目了,不过还是有很大的参考价值的,就不说太多了,具体的话就放到硬件篇吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值