下位机如何组装数据,下位机先从flash中读到数据,数据长度为多少呢?显然,数据长度必须作为一个参数写入才行。这样,第一个字节就是数据长度。我们每次写时都是写128个字节,而读时就读128个字节,其中第一个字节就是长度值。 读写都用同一个数组。
上电时,我们就读一次,如果它的值是正确的,则将长度保存在config_len中。注意长度在128个字节中的最后一个数中。这样以后就不用再去读了。如果刚写过,则这个数组本来就是最新的。不需要更新了。
读时,先组好包,然后按次序读回去。读时有一个次序问题。先读第一帧,这个帧计数在连接时会清0的。
我们的读格式先将BCC保存好,然后再将有关的数据拚好。最后计算出BCC。每次发一次复位指令,会重新进行AD转换。这样便于上位机可以多次的读。
上位机的按键部分修改一下,按一下键,表示将数据发下去一次。而且是一次发送总的长度。 下位机在写时会检查的,如果是相同的写,它是不会写的。
而以后每按一次,就读其中一帧,直到读完。然后又可以开始读了。
现在改一下上位机的程序,上位机原先是按一下读,再按一下写的。来回交替的。 现在还是这样做,多写几次也不要紧,因为下位机看到重复写是不会执行的。
怎么知道下位机有多少要读呢?这个当然知道,读上来的帧号大于128,则表示这是最后一帧,就可以不再读了。写只写第1帧,读也只读第1帧,其它的在回调函数中继续读或写。
重新修改后,发现没反应了,先看读两个特征句柄就没有反应。后来将从机的发AD读改了一下,从机显示有读特征值6的提示,但主机却没有读到。再改主机部分的程序。
原来发现这个读子句柄时,也会到读simpleProfileReadConfig()这个函数中去。
发现如果读char6后,延长的时间改为200ms,则char6将读不到,读到的是char5.
但后来又好了,奇怪。延时200确实有问题?后来试着又没问题。现改为200以后再看。好象又没问题了。
今天基本上返工了一把,没有多少进展。
现在调试从机,发现有些字节丢掉了。
从机中FLASH中的最后一个字节保存的是配置的长度。这个长度很有用。
否则,下位机上电时,读出来多少配置字节没法知道。当然要知道也是可以的,可以扫描得到字节长度,但是如果直接得到更好。
后来发现字节之所以丢掉,是因为打印的东西太多了。打印太多会溢出。 除非我们将DMA的缓冲区加大。但是加大内存会减少。
31
现在已经基本调通。读定都成功了。
下面就是要读温度和湿度。还有NOTI没有调通。
再来看一下NOTI的调试,发现将打开对方的NOTI移到连接处后,下位机可以收到这个命令了,而以前是收不到的(断点)但是将这个移到连接事件后立即调用,却发现传数据时造成下位机死机。注掉该段上位机,就正常了。
为此,我们还是想看一下char4是否可以读到句柄,结果发现不行。读不到。 暂时放弃,等以后再说。
我将char4的部分打开看一下,还真打开了。于是我们通过char4来进行传输看一下。 终于通过char4 我们可以双向通讯了。
原先我们通过char6 总是不能通讯,原因可能是因为char6我们用于它作value的通讯。而CCC通讯两者不可以同时用?终于解决了一个大问题。尽管眼下好象用不着。
现在调试这个温湿度。
程序写完,等板子出来调试。
将串口部分写一下。如果是命令串,则在连接时,将发送一个事件,即读串口事件。我们先将串口发送,然后,等100ms. 将读到的数据保存起来。并检查数据长度是否正确。如果正确,则将串口命令串设置好,等以后要发数据时,将串口拚接好。如果不正确,或没收到数据。有两种情况,一种是没收到,则全部置为0,如果收到但长度不正确,则全部?
问题是串口读怎么读的呢?可以先用这个函数:
Hal_UART_RxBufLen( uint8 port )返回串口数数的长度。这样可以等100ms,,然后看这个数据长度,如果和我们希望的相等,则读取相关的数据
uint16 NPI_ReadTransport( uint8 *buf, uint16 len ) 如果没数据,将缓冲区清0,如果有数据但是数据长度不对,则如果长度比这个短,则将错误的收到的数据仍会返回上位机,未尾置0。长度域为仍为正确的长度。如果长度过长,则长度域仍为下载的值,将读到的数读完后还有多的,将这些多余的也读出来且丢掉它。总之,长度域确保是正确的。
串口暂时放一放,将下载的数据将这个广播信息改一下。改为下载的数据了。即广播的头部为RE00001这样的形式。全部为ASCII码。
到目前为止,程序已经应用自如。可双向通讯,也可以NOTI发送。但为什么char4不能获得句柄,而char5却可以获得?这个问题一直是心尖上的痛。我们最后再试一下,修改中心代码,读char4的句柄看一下。还是不行。不知道为什么不能读char4的句柄。 全部看了一遍,就是char3和char4不能读,不知为什么?主从部分都看了。没发现这个char3与char2有什么不同的地方。
这个程序基本上调完了,还有些部分还需继续调试,比如耗电之类。暂时到这里吧。
32
33
34
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库OSAL解读笔记(7)在线全文阅读。
相关推荐: