ما هو التجميع؟
يشير التجميع إلى التخزين المؤقت لأحداث المستشعر في محور مستشعر و / أو جهاز FIFO قبل الإبلاغ عن الأحداث من خلال Sensors HAL . يُشار إلى الموقع الذي يتم تخزين أحداث المستشعر فيه مؤقتًا (محور المستشعر و / أو FIFO) باسم "FIFO" في هذه الصفحة. عندما لا يكون تجميع حدث المستشعر نشطًا ، يتم إبلاغ Sensors HAL بأحداث المستشعر فورًا عند توفرها.
يمكن أن يؤدي التجميع إلى توفير كبير في الطاقة من خلال إيقاظ معالج التطبيقات الرئيسي (AP) فقط ، والذي يعمل بنظام Android ، عندما تكون العديد من أحداث المستشعر جاهزة للمعالجة ، بدلاً من إيقاظها لكل حدث فردي. ترتبط وفورات الطاقة المحتملة ارتباطًا مباشرًا بعدد الأحداث التي يمكن لمركز المستشعر و / أو FIFO تخزينها مؤقتًا: هناك احتمال أكبر لتوفير الطاقة إذا كان من الممكن تجميع المزيد من الأحداث. يعمل التجميع على تعزيز استخدام الذاكرة منخفضة الطاقة لتقليل عدد عمليات تنبيه AP عالية الطاقة.
يمكن أن يحدث التجميع فقط عندما يمتلك المستشعر جهاز FIFO و / أو يمكنه تخزين الأحداث مؤقتًا داخل محور مستشعر. في كلتا الحالتين ، يجب أن يبلغ المستشعر عن الحد الأقصى لعدد الأحداث التي يمكن تجميعها دفعة واحدة من خلال SensorInfo.fifoMaxEventCount
.
إذا كان جهاز الاستشعار يحتوي على مساحة محجوزة داخل FIFO ، فيجب على المستشعر الإبلاغ عن عدد الأحداث المحجوزة من خلال SensorInfo.fifoReservedEventCount
. إذا كان FIFO مخصصًا لجهاز الاستشعار ، فسيكون SensorInfo.fifoReservedEventCount
هو حجم FIFO. إذا تمت مشاركة FIFO بين عدة أجهزة استشعار ، فقد تكون هذه القيمة صفراً. حالة الاستخدام الشائعة هي السماح لجهاز الاستشعار باستخدام FIFO بالكامل إذا كان المستشعر النشط الوحيد. إذا كانت هناك عدة أجهزة استشعار نشطة ، فسيتم ضمان مساحة لكل جهاز استشعار على الأقل لأحداث SensorInfo.fifoReservedEventCount
في FIFO. إذا تم استخدام موزع مستشعر ، فقد يتم فرض الضمان من خلال البرنامج.
يتم تجميع أحداث المستشعر في المواقف التالية:
- الحد الأقصى لوقت استجابة تقرير المستشعر الحالي أكبر من الصفر ، مما يعني أنه يمكن تأخير أحداث المستشعر حتى الحد الأقصى لوقت استجابة التقرير قبل الإبلاغ عنها من خلال HAL.
- AP في وضع التعليق والمستشعر هو مستشعر غير مستيقظ. في هذه الحالة ، يجب ألا تقوم الأحداث بتنبيه AP ويجب تخزينها حتى تستيقظ AP.
إذا كان المستشعر لا يدعم التجميع وكانت نقطة الوصول نائمة ، فسيتم الإبلاغ عن أحداث مستشعر التنبيه فقط إلى نقطة الوصول ويجب عدم الإبلاغ عن الأحداث غير المرتبطة بالاستيقاظ إلى نقطة الوصول.
معلمات التجميع
المعلمتان اللتان تحكمان سلوك التجميع هما sampling_period_ns و max_report_latency_ns . sampling_period_ns
يحدد عدد المرات التي يتم فيها إنشاء حدث مستشعر جديد ، ويحدد max_report_latency_ns
المدة حتى يتم إبلاغ الحدث إلى Sensors HAL.
sampling_period_ns
يعتمد ما تعنيه معلمة sampling_period_ns
على وضع إعداد تقارير المستشعر المحدد:
- مستمر:
sampling_period_ns
هو معدل أخذ العينات ، مما يعني معدل إنشاء الأحداث. - عند التغيير:
sampling_period_ns
يحد من معدل أخذ العينات للأحداث ، مما يعني أن الأحداث لا يتم إنشاؤها أسرع من كل nanosecondssampling_period_ns
. يمكن أن تكون الفترات أطول منsampling_period_ns
إذا لم يتم إنشاء أي حدث ولم تتغير القيم المقاسة لفترات طويلة. لمزيد من التفاصيل ، راجع وضع الإبلاغ عند التغيير . - لقطة واحدة: يتم تجاهل
sampling_period_ns
. ليس له تأثير. - خاص: للحصول على تفاصيل حول كيفية استخدام
sampling_period_ns
لأجهزة الاستشعار الخاصة ، راجع أنواع المستشعرات .
لمزيد من المعلومات حول تأثير sampling_period_ns
في الأوضاع المختلفة ، راجع أوضاع إعداد التقارير .
بالنسبة لأجهزة الاستشعار المستمرة والمتغيرة:
- إذا كانت
sampling_period_ns
أقل منSensorInfo.minDelay
، فيجب أن يقوم تطبيق HAL بتثبيته بصمت إلىmax(SensorInfo.minDelay, 1ms)
. لا يدعم Android توليد الأحداث بأكثر من 1000 هرتز. - إذا كانت
sampling_period_ns
أكبر منSensorInfo.maxDelay
، فيجب عندئذٍ اقتطاع تطبيق HAL بصمت إلىSensorInfo.maxDelay
.
تحتوي أجهزة الاستشعار المادية أحيانًا على قيود على معدلات تشغيلها ودقة ساعاتها. لحساب ذلك ، يمكن أن يختلف تكرار أخذ العينات الفعلي عن التردد المطلوب طالما أنه يفي بالمتطلبات الواردة في الجدول أدناه.
إذا كان التردد المطلوب هو | ثم يجب أن يكون التردد الفعلي |
---|---|
تردد أقل من دقيقة (<1 / maxDelay) | بين 90٪ و 110٪ من الحد الأدنى من التردد |
بين الحد الأدنى والحد الأقصى للتردد | بين 90٪ و 220٪ من التردد المطلوب |
فوق الحد الأقصى للتردد (> 1 / دقيقة تأخير) | بين 90٪ و 110٪ من الحد الأقصى للتردد ، وأقل من 1100 هرتز |
max_report_latency_ns
يعيّن max_report_latency_ns
الحد الأقصى للوقت بالنانو ثانية ، والذي يمكن من خلاله تأخير الأحداث وتخزينها في الأجهزة FIFO قبل الإبلاغ عنها من خلال HAL أثناء تنبيه AP.
تشير القيمة صفر إلى أنه يجب الإبلاغ عن الأحداث بمجرد قياسها ، إما تخطي الوارد أولاً يصرف أولاً أو إفراغ ما يرد أولاً يصرف أولاً بمجرد وجود حدث واحد من المستشعر.
على سبيل المثال ، مقياس التسارع الذي يتم تنشيطه عند 50 هرتز مع max_report_latency_ns=0
سيؤدي إلى حدوث مقاطعات 50 مرة في الثانية عندما تكون نقطة الوصول مستيقظة.
عندما max_report_latency_ns>0
، لا يلزم الإبلاغ عن أحداث المستشعر بمجرد اكتشافها. يمكن تخزينها مؤقتًا في FIFO والإبلاغ عنها على دفعات ، طالما لم يتأخر أي حدث بأكثر من max_report_latency_ns
نانوثانية. هذا يعني أن جميع الأحداث منذ الدُفعة السابقة يتم تسجيلها وإعادتها مرة واحدة. هذا يقلل من كمية المقاطعات المرسلة إلى نقطة الوصول ويسمح لـ AP بالتبديل إلى وضع طاقة أقل (خامل) أثناء قيام المستشعر بالتقاط البيانات وتجميعها.
كل حدث له طابع زمني مرتبط به. لا يؤثر تأخير وقت الإبلاغ عن الحدث على الطابع الزمني للحدث. يجب أن يكون الطابع الزمني دقيقًا ويتوافق مع الوقت الذي وقع فيه الحدث فعليًا ، وليس وقت الإبلاغ عنه.
لا يؤدي السماح بتخزين أحداث المستشعر مؤقتًا في FIFO إلى تعديل سلوك إرسال الأحداث إلى HAL ؛ يمكن تشذير الأحداث من أجهزة استشعار مختلفة وترتيب جميع الأحداث من نفس المستشعر بترتيب زمني.
أحداث الاستيقاظ وعدم الاستيقاظ
يجب تخزين أحداث المستشعر من مستشعرات التنبيه في واحد أو أكثر من FIFOs للاستيقاظ. التصميم الشائع هو الحصول على FIFO واحد كبير ومشترك للاستيقاظ حيث يتم تشذير الأحداث من جميع مستشعرات التنبيه. بدلاً من ذلك ، يمكنك الحصول على FIFO واحد للاستيقاظ لكل مستشعر أو تخصيص FIFO لمستشعرات تنشيط معينة و FIFO مشترك لبقية مستشعرات التنبيه.
وبالمثل ، يجب تخزين أحداث المستشعر من مستشعرات عدم الاستيقاظ في واحد أو أكثر من FIFOs غير المستيقظين.
في جميع الحالات ، لا يمكن تشذير أحداث مستشعر الاستيقاظ وأحداث مستشعر الاستيقاظ في نفس FIFO. يجب تخزين أحداث الاستيقاظ في FIFO للتنبيه ، ويجب تخزين الأحداث غير المرتبطة بالتنبيه في FIFO بدون تنبيه.
بالنسبة للاستيقاظ FIFO ، يوفر تصميم FIFO الفردي الكبير والمشترك أفضل مزايا الطاقة. بالنسبة إلى FIFO غير المستيقظ ، فإن تصميمات FIFO الفردية الكبيرة المشتركة والعديد من تصميمات FIFO الصغيرة المحجوزة لها خصائص طاقة مماثلة. لمزيد من الاقتراحات حول كيفية تكوين كل ما يرد أولاً يصرف أولاً ، راجع أولوية تخصيص ما يرد أولاً يصرف أولاً.
السلوك خارج وضع الإيقاف المرحلي
عندما يكون AP مستيقظًا (ليس في وضع التوقف المرحلي) ، يتم تخزين الأحداث مؤقتًا في FIFOs طالما لم يتم تأخيرها بأكثر من max_report_latency
.
طالما أن نقطة الوصول لا تدخل في وضع الإيقاف المؤقت ، فلن يتم إسقاط أي حدث أو فقده. إذا امتلأت FIFOs الداخلية قبل انقضاء max_report_latency
، فسيتم الإبلاغ عن الأحداث في هذه المرحلة لضمان عدم فقدان أي حدث.
إذا كان هناك العديد من أجهزة الاستشعار تشترك في نفس الوارد أولاً يصرف أولاً max_report_latency
الحد الأقصى لتقرير واحد منهم ، فسيتم الإبلاغ عن جميع الأحداث الواردة في الوارد أولاً يصرف أولاً ، حتى إذا لم max_report_latency
الحد الأقصى لتقرير المستشعرات الأخرى بعد. هذا يقلل من عدد مرات الإبلاغ عن دفعات من الأحداث. عندما يجب الإبلاغ عن حدث واحد ، يتم الإبلاغ عن جميع الأحداث من جميع أجهزة الاستشعار.
على سبيل المثال ، إذا تم تنشيط أجهزة الاستشعار التالية:
- مقياس التسارع المجمّع مع
max_report_latency
= 20 ثانية - جيروسكوب مجمّع بـ
max_report_latency
= 5s
يتم الإبلاغ عن دفعات مقياس التسارع في نفس الوقت الذي يتم فيه الإبلاغ عن دفعات الجيروسكوب (كل 5 ثوانٍ) ، حتى إذا كان مقياس التسارع والجيروسكوب لا يشتركان في نفس الوارد أولاً يصرف أولاً.
السلوك في وضع الإيقاف المرحلي
يعد التجميع مفيدًا بشكل خاص لجمع بيانات المستشعر في الخلفية دون إبقاء نقطة الوصول في حالة تنبيه. نظرًا لعدم السماح لبرامج تشغيل أجهزة الاستشعار وتنفيذ HAL بالاحتفاظ بقفل التنبيه * ، يمكن لـ AP الدخول في وضع التعليق حتى أثناء جمع بيانات المستشعر.
يعتمد سلوك المستشعرات أثناء تعليق نقطة الوصول على ما إذا كان المستشعر عبارة عن مستشعر تنبيه. لمزيد من التفاصيل ، راجع مستشعرات التنبيه .
عندما تمتلئ FIFO غير المستيقظة ، يجب أن تلتف حولها وتتصرف مثل مخزن مؤقت دائري ، واستبدال الأحداث القديمة بالأحداث الجديدة التي تحل محل الأحداث القديمة. ليس max_report_latency
أي تأثير على FIFOs بدون تنبيه أثناء وضع التعليق.
عندما تمتلئ ميزة FIFO للاستيقاظ ، أو عندما max_report_latency
الحد الأقصى لتقرير أحد مستشعرات التنبيه ، يجب على الجهاز تنشيط نقطة الوصول والإبلاغ عن البيانات.
في كلتا الحالتين (الاستيقاظ وعدم الاستيقاظ) ، بمجرد أن يخرج AP من وضع الإيقاف المؤقت ، يتم إنتاج دفعة بمحتوى جميع max_report_latency
، حتى لو لم ينقض الحد الأقصى لتقرير بعض أجهزة الاستشعار بعد. هذا يقلل من خطر اضطرار AP إلى الاستيقاظ مرة أخرى بعد فترة وجيزة من عودتها إلى وضع الإيقاف المؤقت ، وبالتالي تقليل استهلاك الطاقة.
* أحد الاستثناءات الملحوظة لعدم السماح للسائقين بالاحتفاظ بقفل التنبيه هو عندما يتم تنشيط مستشعر تنبيه مع وضع الإبلاغ المستمر مع max_report_latency
<1 ثانية. في هذه الحالة ، يمكن للسائق الاحتفاظ بقفل التنبيه لأن نقطة الوصول ليس لديها الوقت للدخول في وضع التعليق ، حيث سيتم إيقاظها بواسطة حدث تنبيه قبل الوصول إلى وضع التوقف المرحلي.
الاحتياطات الواجب اتخاذها عند تجميع أجهزة استشعار التنبيه
اعتمادًا على الجهاز ، قد يستغرق الأمر بضع أجزاء من الثانية حتى تخرج نقطة الوصول من وضع التعليق تمامًا وتبدأ في مسح الوارد أولاً يصرف أولاً. يجب تخصيص مساحة رأس كافية في الوارد أولاً يصرف أولاً للسماح للجهاز بالخروج من وضع التعليق دون فائض FIFO للاستيقاظ. لن تضيع أي أحداث ، ويجب احترام max_report_latency
.
الاحتياطات الواجب اتخاذها عند تجميع أجهزة الاستشعار غير المستيقظة عند التغيير
لا تولد أجهزة الاستشعار عند التغيير إلا الأحداث عندما تتغير القيمة التي تقيسها. إذا تغيرت القيمة المقاسة أثناء وجود نقطة الوصول في وضع الإيقاف المؤقت ، تتوقع التطبيقات تلقي حدث بمجرد تنبيه AP. لهذا السبب ، يجب إجراء تجميع لأحداث مستشعر عدم الاستيقاظ عند التغيير بعناية إذا كان المستشعر يشارك FIFO مع أجهزة استشعار أخرى. يجب دائمًا حفظ الحدث الأخير الذي تم إنشاؤه بواسطة كل مستشعر عند التغيير خارج FIFO المشترك حتى لا يمكن أبدًا استبداله بأحداث أخرى. عندما يستيقظ AP ، بعد الإبلاغ عن جميع الأحداث من FIFO ، يجب الإبلاغ عن آخر حدث مستشعر عند التغيير.
إليك موقف يجب تجنبه:
- يسجل التطبيق في عداد خطوات عدم التنبيه (عند التغيير) ومقياس التسارع غير المستيقظ (مستمر) ، وكلاهما يشتركان في نفس FIFO.
- يتلقى التطبيق حدث عداد الخطوة
step_count=1000 steps
>. - تذهب AP للتعليق.
- يسير المستخدم 20 خطوة ، مما يؤدي إلى تشذير أحداث عداد الخطوات ومقياس التسارع ، ويكون آخر حدث عداد الخطوة
step_count = 1020 steps
. - لا يتحرك المستخدم لفترة طويلة ، مما يتسبب في استمرار تراكم أحداث مقياس التسارع في FIFO ، مما يؤدي في النهاية إلى الكتابة فوق كل حدث
step_count
في FIFO المشترك. - تستيقظ AP ويتم إرسال جميع الأحداث من FIFO إلى التطبيق.
- يتلقى التطبيق أحداث مقياس التسارع فقط ويعتقد أن المستخدم لم يمشي.
من خلال حفظ حدث عداد الخطوة الأخير خارج FIFO ، يمكن لـ HAL الإبلاغ عن هذا الحدث عند تنشيط AP ، حتى إذا تم الكتابة فوق جميع أحداث عداد الخطوات الأخرى بواسطة أحداث مقياس التسارع. بهذه الطريقة ، يتلقى التطبيق step_count = 1020 steps
عندما يستيقظ AP.
تنفيذ التجميع
لتوفير الطاقة ، يجب تنفيذ التجميع بدون مساعدة AP ، ويجب السماح لـ AP بالتعليق أثناء التجميع.
إذا تم إجراء التجميع في محور مستشعر ، فيجب تقليل استخدام محور المستشعر للطاقة.
يمكن تعديل الحد الأقصى لوقت استجابة التقرير في أي وقت ، لا سيما عندما يكون المستشعر المحدد ممكّنًا بالفعل ؛ ولا ينبغي أن يؤدي هذا إلى ضياع الأحداث.
أولوية تخصيص ما يرد أولاً يصرف أولاً
في الأنظمة الأساسية التي يكون فيها حجم المخزن المؤقت لمركز المستشعر و / أو FIFO محدودًا ، قد يتعين على مصممي النظام اختيار مقدار ما يرد أولاً يصرف أولاً (FIFO) المطلوب حجزه لكل مستشعر. للمساعدة في هذا الاختيار ، إليك قائمة بالتطبيقات المحتملة عند تنفيذ التجميع على أجهزة استشعار مختلفة.
قيمة عالية: حساب الموتى المشاة منخفض الطاقة
وقت التجميع المستهدف: من 1 إلى 10 دقائق
أجهزة الاستشعار للدُفعات:
- كاشف خطوة الإيقاظ
- متجه دوران لعبة الإيقاظ عند 5 هرتز
- بارومتر إيقاظ عند 5 هرتز
- استيقظ مقياس المغناطيسية غير المعاير عند 5 هرتز
يسمح تجميع هذه البيانات بإجراء الحساب الميت للمشاة مع السماح لـ AP بالانتقال إلى التعليق.
قيمة عالية: نشاط متقطع متوسط الطاقة / التعرف على الإيماءات
وقت التجميع المستهدف: 3 ثوان
أجهزة الاستشعار للتجميع: مقياس تسارع غير إيقاظ عند 50 هرتز
يسمح تجميع هذه البيانات بالتعرف بشكل دوري على الأنشطة والإيماءات التعسفية دون الحاجة إلى إبقاء نقطة الوصول مستيقظة أثناء جمع البيانات.
قيمة متوسطة: نشاط مستمر متوسط الطاقة / التعرف على الإيماءات
وقت التجميع المستهدف: من 1 إلى 3 دقائق
المستشعرات التي يتم تجميعها: مقياس تسارع إيقاظ عند 50 هرتز
يسمح تجميع هذه البيانات بالتعرف المستمر على الأنشطة والإيماءات التعسفية دون الحاجة إلى إبقاء نقطة الوصول مستيقظة أثناء جمع البيانات.
قيمة متوسطة إلى عالية: مقاطعة تقليل الحمل
وقت التجميع المستهدف: <1 ثانية
أجهزة الاستشعار التي يتم تجميعها: أي مستشعر عالي التردد ، وعادة ما يكون غير مستيقظ.
إذا تم ضبط الجيروسكوب على 240 هرتز ، فإن تجميع 10 أحداث جيروسكوب فقط يمكن أن يقلل عدد المقاطعات من 240 / ثانية إلى 24 / ثانية.
قيمة متوسطة: جمع مستمر للبيانات منخفضة التردد
وقت التجميع المستهدف: من 1 إلى 10 دقائق
أجهزة الاستشعار للدُفعات:
- بارومتر إيقاظ عند 1 هرتز
- مستشعر رطوبة عند الاستيقاظ عند 1 هرتز
- أجهزة استشعار أخرى منخفضة التردد للاستيقاظ بمعدلات مماثلة
يسمح بإنشاء تطبيقات مراقبة بطاقة منخفضة.
قيمة متوسطة منخفضة: مجموعة مستمرة من أجهزة الاستشعار الكاملة
وقت التجميع المستهدف: من 1 إلى 10 دقائق
مجسات للتجميع: جميع مستشعرات التنبيه بترددات عالية
يسمح بالتجميع الكامل لبيانات المستشعر أثناء ترك نقطة الوصول في وضع التعليق. ضع في اعتبارك فقط إذا لم تكن مساحة FIFO مشكلة.