LoRa点对点系统5 数据结构与算法
1 Comm2Trm进程
1.1处理UART数据帧
为节省内存,接收与处理UART数据“复用”了缓冲区,如下图所示:
UART驱动:
#1:一个接一个将接收的UART数据存储到缓冲区;
#2:接收一完整UART帧后,发消息给进程通知处理;
Comm2Trm进程:
#3:给缓冲区加锁,解析UAR帧;
#4:组织UART回应帧;
#5:通过UART发送回应帧,给缓冲区解锁。
为什么要给缓冲区加锁和解锁呢?如下图的时序逻辑所示:进程“锁定”缓冲区期间UART驱动无法向缓冲区中写数据,因此也不会“竞态打扰”进程处理该数据帧。
1.2 发送RF数据包
#1:UART一个接一个输入数据到缓冲区COMM_TRM_DATA;
#2:当接收一完整帧结束后,UART_ISR给进程poll消息;
#3:进程解析和处理该UART数据帧;
#4:进程拷贝用户数据到缓冲区TxDataBuf;
#5:Network进程从缓冲区TxDataBuf提取数据,通过RF发送。
1.3 接收RF数据包
#1:Network进程存储接收数据到缓冲区RxDataBuf;
#2:Network进程post消息给Comm2Trm进程;
#3:Comm2Trm进程组织该数据为UART帧;
#4:进程通过UART口发送该数据帧。
2 Network进程
2.1发送RF数据包
#1:从Comm2Trm进程提取发送数据到packetbuf;
#2:基于packetbuf组织RF数据包;
#3:通过RF发送packetbuf中的RF数据包;
2.2接收RF数据包
#1:RF接收的数据包存入RadioBuf,并poll进程;
#2:进程从RadioBuf拷贝数据包到ParseRFBuf;
#3:进程解析该RF数据包;
#4:提取用户数据,交付给Comm2Trm进程;
2.3 逻辑流程
3 SystSettings模块
为简化设计,定义了NetSettings_t数据结构,它的“主本”存储在SystSettings模块的EEPROM中,Comm2Trm和Network这2个进程各自拥有一个“副本”。
1. 上电时,Comm2Trm和Network这2个进程各自从“主本”拷贝“副本”;
2. 任意一方修改“NetSettings_t”的副本数据,必须:①存储到“主本”之中;②通知“另一方”同步更新副本数据。
您的留言或需求: