भेजने मैं एक समस्या आ रही है, जहां वास्तव में शारीरिक रूप से ब्लूटूथ पैकेट भेजनेकोर ब्लूटूथ जब पैकेट
[peripheral writeValue:dataPacket forCharacteristic:writeChar type:CBCharacteristicWithResponse]
और iOS डिवाइस का उपयोग एक विशेषता के लिए एक मूल्य के लेखन के बीच का समय उत्तरोत्तर समय ले रहा है धीमा और लंबे समय तक।
यह डीबगर से निम्नलिखित उत्पादन में समझा जा सकता है:
2013-10-23 14:12:17.510 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:17.595 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:17.598 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:17.611 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:17.656 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:17.657 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:22.601 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:23.123 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:23.125 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:27.601 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:28.111 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:28.113 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:32.611 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:34.595 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:34.597 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:37.611 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:39.582 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:39.585 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:42.611 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:44.570 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:44.573 Test App iOS[1561:60b] Packet response received
2013-10-23 14:12:47.611 Test App iOS[1561:60b] Packet sent
2013-10-23 14:12:49.558 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:12:49.560 Test App iOS[1561:60b] Packet response received
// Several packets omitted...
2013-10-23 14:13:07.610 Test App iOS[1561:60b] Packet sent
2013-10-23 14:13:09.508 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:13:09.511 Test App iOS[1561:60b] Packet response received
2013-10-23 14:13:12.610 Test App iOS[1561:60b] Packet sent
2013-10-23 14:13:14.496 Test App iOS[1561:60b] Packet sent confirmation, error = (null)
2013-10-23 14:13:14.498 Test App iOS[1561:60b] Packet response received
// और इसी तरह ...
पैकेट भेजे गए संदेश को तुरंत writeValue आदेश के बाद लाइन पर उत्पादन होता है विशेषता के लिए डेटा के पैकेट लिखें।
पैकेट भेजा गया पुष्टिकरण didWriteValueForCharacteristic प्रतिनिधि विधि में पहली पंक्ति में आउटपुट है।
पैकेट प्रतिक्रिया प्राप्त संदेश किया गया थाडेटेड वैल्यू फॉर कैरेक्टीरिस्टिक में जिसे बीटीएलई डिवाइस मेरे भेजे गए पैकेट की प्राप्ति की पुष्टि करने के लिए प्रतिक्रिया पैकेट (द्वितीयक अधिसूचना विशेषता के माध्यम से) भेजता है।
जैसा कि शुरुआत में मेरे कॉलिंग के बीच लिखने के लिए समय देखा जा सकता है। वैल्यू फॉर कैरेक्टीस्टिक पद्धति और पैकेट की पुष्टि करने के लिए कॉलबैक को भेजा गया है, WRiteValueForCharacteristic प्रारंभ में 85ms (जो पहले से धीमा लेकिन सहनशील है) है। मैं इन पैकेट को लगभग हर 5 सेकंड भेजता हूं, और केवल कुछ ही पैकेट भेजे जाने के बाद यह ~ 2 सेकंड तक बढ़ जाता है जिसके बाद लगातार 2 सेकेंड में स्थैतिक लगता है। पैकेट की पुष्टि के बाद बीटीएलई डिवाइस से वापस भेजा गया प्रतिक्रिया पैकेट हमेशा ~ 2ms होता है।
मुझे समझ में नहीं आ रहा है कि मुझे कोरब्लूटूथ पुस्तकालयों में कॉलिंग लिखने के बीच क्यों देरी हो रही है और पुल कॉलबैक किया गया है WriteValueForCharacteristic।
अन्य सभी मामलों में कोड पूरी तरह से काम कर रहा है (बीटीएलई डिवाइस वही कर रहा है जो इसे करने का निर्देश दिया जा रहा है और कोई भी पैकेट गायब नहीं है)।
मेरे पास एक नमूना ऐप है जो बीटी 4.0 मॉड्यूल निर्माता (स्रोत समेत) द्वारा प्रदान किया जाता है जो इस बढ़ती देरी का अनुभव नहीं करता है - दुर्भाग्यवश नमूना ऐप मॉड्यूल के कार्यान्वयन की एक बड़ी श्रृंखला का सामना करने के लिए डिज़ाइन किया गया है, न कि केवल हमारे विशिष्ट कार्यान्वयन और इसलिए बड़े पैमाने पर जटिल है जिसमें हमारे कार्यान्वयन के लिए प्रासंगिक नहीं है - मैंने नमूना में प्रत्येक फ़ंक्शन में ब्रेकपॉइंट्स रखे हैं और मैन्युअल रूप से निर्धारित किए हैं कि वे कौन से आदेश जारी कर रहे हैं, और मुझे विश्वास है कि मैं हूं उन्हें पूरी तरह से कॉपी (लेकिन स्पष्ट रूप से नहीं)।
मैं कुछ भी नहीं देख सकता कि वे ऐसा कर रहे हैं जो मैं नहीं कर रहा हूं और इसके विपरीत। दो परियोजनाओं के बीच एकमात्र अंतर मैं देख सकता हूं कि मेरा एआरसी का उपयोग करता है और उनका मैनुअल संदर्भ गिनती का उपयोग करता है।
अन्य जानकारी: सब कुछ मुख्य थ्रेड पर चल रहा है (के रूप में यह मॉड्यूल निर्माता नमूना अनुप्रयोग के साथ है) मैं मुख्य कतार (इसी तरह मॉड्यूल निर्माता में नमूना एप्लिकेशन) iOS पर सीपीयू लोड का उपयोग कर सेंट्रल प्रबंधक बनाने डिवाइस केवल 3% पर है जबकि मेरा ऐप चल रहा है और सीपीयू लोड इत्यादि के कारण कुछ भी देरी नहीं हो रही है।
मैं इस के साथ अपने बालों को फाड़ रहा हूं, और यदि कोई इस समस्या के लिए किसी संभावित कारण या समाधान का सुझाव दे सकता है मैं हमेशा से आभारी रहूंगा!
धन्यवाद, रिच
यह सच में, सच दिलचस्प है कि उनके नमूना एप्लिकेशन इस देरी का प्रदर्शन नहीं करता लेकिन तुम्हारा है। मेरे पास कोई अच्छा कारण नहीं है कि वह क्यों है। यह वूडू है, लेकिन इसे रद्द करने के लिए, क्या आप एक साधारण मैनुअल को गिनती ऐप बनाए रखने का प्रयास कर सकते हैं यह देखने के लिए कि क्या एआरसी इसे प्रभावित कर रहा है? – cbowns
यह कुछ ऐसा है जो मैं विचार कर रहा था। मैंने कभी भी एआरसी के साथ किसी भी मुद्दे का अनुभव नहीं किया है, लेकिन जैसा कि मैं अन्य संभावनाओं से बाहर निकल रहा हूं, मैं इस निष्कर्ष पर आ रहा हूं कि मुझे यह साबित करना होगा कि यह एआरसी नहीं है और इस मुद्दे को आपके जैसा सुझाव देता है। –
मेरे पास इसके बारे में एक और विचार था: यह आपके कोरब्लूथूट ऐप और इंस्ट्रूमेंट्स के साथ नमूना ऐप दोनों को प्रोफाइल करने के लायक हो सकता है ताकि यह देखने के लिए कि कौन सी ऑब्जेक्ट्स बनाई जा रही हैं। यदि आपके ऐप में ऐसे संसाधन बनाने के लिए एक सूक्ष्म बग है जो इसे कभी रिलीज़ नहीं करता है, तो कोरब्लूटूथ उन ऑब्जेक्ट्स को अपडेट करने में अधिक समय व्यतीत कर सकता है जिनका उपयोग अब नहीं किया जा रहा है, और यह मंदी के कारण भी हो सकता है। – cbowns