zigbee ZIGBEE_FRAGMENTATION
生活随笔
收集整理的這篇文章主要介紹了
zigbee ZIGBEE_FRAGMENTATION
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不切片傳輸,每個應用層包最大可以傳輸99字節
切片傳輸,沒個應用層包最大可以傳輸431字節
在SampleApp.c中實驗,協調器使用pro,enddev也使用pro。這樣就不用在配置中預定義ZIGBEE_FRAGMENTATION了。否則要預定義。在項目中,如果發現已經預編譯了ZIGBEE_FRAGMENTATION,但是仍然發不出長數據,很可能的原因是
1.應用層的內存開辟的多了,導致協議棧所需內存不足,osal_mem_alloc失敗,而發送失敗。協議幀內部發送大幀需要的內存也多。
2.當然,乙方在接收大幀的時候,協議棧也需要較大的可以osal_mem_alloc的內存。如果乙方內存不足,即使甲方發送成功,乙方應用層也收不到消息。
經過試驗,協議棧正常進行發送 ? 或者 ? 接收的時候,系統應該剩余512B內存,供協議棧使用。
終端發給協調器:
? ?if ( keys & HAL_KEY_SW_3 )
? ? {
? ? ? SampleApp_Flash_DstAddr.addrMode = afAddr16Bit;
? ? ? SampleApp_Flash_DstAddr.addr.shortAddr = 0;
? ? ? SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
? ? ? SendTheMessage();
? ? }
static int32 num=0; void SendTheMessage( void ) {uint8 *theMessageData = osal_mem_alloc(500);if (theMessageData != NULL){const char constMessageData[] = "Hello World";osal_memcpy(theMessageData, constMessageData, sizeof(constMessageData));if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,1,400,theMessageData,&SampleApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){int8 str[6];num++;_itoa(num,str,10);//str="19232",10進制HalLcdWriteString(str,1);// Successfully requested to be sent.}else{ int8 str[6];num++;_itoa(num,str,10);//str="19232",10進制HalLcdWriteString(str,2);// Error occurred in request to send.}}osal_mem_free(theMessageData);}
實驗中發現使用廣播地址將無法切片發送長幀,只能發送短幀。
? ? ? SampleApp_Flash_DstAddr.addrMode = AddrBroadcast;
? ? ? SampleApp_Flash_DstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;
? ? ? SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
切片傳輸,沒個應用層包最大可以傳輸431字節
在SampleApp.c中實驗,協調器使用pro,enddev也使用pro。這樣就不用在配置中預定義ZIGBEE_FRAGMENTATION了。否則要預定義。在項目中,如果發現已經預編譯了ZIGBEE_FRAGMENTATION,但是仍然發不出長數據,很可能的原因是
1.應用層的內存開辟的多了,導致協議棧所需內存不足,osal_mem_alloc失敗,而發送失敗。協議幀內部發送大幀需要的內存也多。
2.當然,乙方在接收大幀的時候,協議棧也需要較大的可以osal_mem_alloc的內存。如果乙方內存不足,即使甲方發送成功,乙方應用層也收不到消息。
經過試驗,協議棧正常進行發送 ? 或者 ? 接收的時候,系統應該剩余512B內存,供協議棧使用。
終端發給協調器:
? ?if ( keys & HAL_KEY_SW_3 )
? ? {
? ? ? SampleApp_Flash_DstAddr.addrMode = afAddr16Bit;
? ? ? SampleApp_Flash_DstAddr.addr.shortAddr = 0;
? ? ? SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
? ? ? SendTheMessage();
? ? }
static int32 num=0; void SendTheMessage( void ) {uint8 *theMessageData = osal_mem_alloc(500);if (theMessageData != NULL){const char constMessageData[] = "Hello World";osal_memcpy(theMessageData, constMessageData, sizeof(constMessageData));if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,1,400,theMessageData,&SampleApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){int8 str[6];num++;_itoa(num,str,10);//str="19232",10進制HalLcdWriteString(str,1);// Successfully requested to be sent.}else{ int8 str[6];num++;_itoa(num,str,10);//str="19232",10進制HalLcdWriteString(str,2);// Error occurred in request to send.}}osal_mem_free(theMessageData);}
實驗中發現使用廣播地址將無法切片發送長幀,只能發送短幀。
? ? ? SampleApp_Flash_DstAddr.addrMode = AddrBroadcast;
? ? ? SampleApp_Flash_DstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;
? ? ? SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
轉載于:https://www.cnblogs.com/-song/archive/2013/05/11/3331810.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的zigbee ZIGBEE_FRAGMENTATION的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的进化(目前还看不懂)
- 下一篇: 软件设计中的抽象层次