开发背景:
1. 公司有一款RF低功耗产品,然后想在该产品上扩展一个RF(B端)的设备 。
由于B端设备的RF协议是旧版(二代),而现有的协议是新版(三代),两者之间的协议不兼容,协议帧格式不同,RF模块和软件不同 ,所以要做移植(迁移)
实施方案分析:
1. 方案A: 可以新建一个工程,在二代RF工程软件之上修改应用层,RF协议层不变。
2. 方案B: 可以在现有三代RF工程软件之上修改RF协议层,应用层不变。
最后分析讨论认为可以在同一版软件(工程)之上进行RF协议层修改和移植。
实施细则:
一开始我并不知道如何迁移协议层,后来大概清楚了怎么回事,要如何操作 。
总的说来就是:
1.将RF二代的协议文件 RF_B.c ,RF_B.h 加入到工程中,通过宏定义框起来,然后在串口收发函数中通过宏定义调用RF二代的串口收发处理函数(这里就是RF协议层的处理)。
2. 找到串口收发的入口后,剩下的就是跟应用层功能函数的对接和调试。
期间遇到一些疑问或问题,也一一解决,现将主要的罗列出来,以备后续查看
1. 串口中断函数是否需要修改?
主要是串口中断接收函数,该函数接口已经在用,直接调用RF二代的接收函数。
2. 对于按键中断和处理函数需要做变更吗?
一般该功能不涉及到协议层,不需要变更。
3. 协议层的核心是啥?
就RF协议层来说最主要的就是迁移RF串口接收函数,和发送函数接口。
在接收函数和发送函数中可能有些应用层的功能条件判断,这些应用层的功能可以删掉,只保留协议收发的部分 ,参照二代RF协议的收发机制,进行串口收发。
4. 当设置好串口收到函数接口后,接下来就是初步编译新软件,并确保可以编译成功。
5. 然后就是调试迁移过来的串口收发接口是否可以正常进行串口通讯。可以打开RF的串口收发debug, 确认Rfsend()的数据是否有ACK ? 如果有ACK说明muc跟RF模块串口通讯正常。
6 . 下一步则是根据协议功能进行逐个实现和验证 。
一般首先验证RF配对(配网)/退网操作 ,该功能正常才能进行进一步的功能验证 。
这里我发现退网操作不可用,原来B端不需要退网操作。
7. 接下来就是自检,联动测试,联动报警,静音等功能验证。
8. 关于应用层,尽管说是不需要变更,但应用层的polling 定时器功能函数有许多是在RF.c 也就是协议层文档中,所以需要一并从三代RF.c 迁移到二代RF_B.c 中 。
9. 最后说下重传功能函数,可能涉及到定时器使用,不一定用二代的定时器,用现在的即可。
综上,经过这一次协议迁移,对程序的理解更深了一步,对程序的操作也更加熟练了。
说实话,一开始感觉不知如何入手,但在同事的帮助下,和我自己的努力下,终于比较完美的实现协议的移植任务。软件成功送测。