CAN Driver (Can)
The CAN driver provides hardware-dependent access to the internal and external CAN controllers (CAN 2.0B, CAN FD, CAN XL).
Funktionen — Übersicht
void Can_Init (const Can_ConfigType* Config);This function initializes the module.void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);This function returns the version information of this module.void Can_DeInit (void);This function de - initializes the module.Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️This service shall set the baud rate configuration of the CAN controller.Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);This function performs software triggered state transitions of the CAN controller State machine.void Can_DisableControllerInterrupts (uint8 Controller);This function disables all interrupts for this CAN controller.void Can_EnableControllerInterrupts (uint8 Controller);This function enables all allowed interrupts.Std_ReturnType Can_CheckWakeup (uint8 Controller);This function checks if a wakeup has occurred for the given controller.Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);This service obtains the error state of the CAN controller.Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);This service reports about the current status of the requested CAN controller.Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);Returns the Rx error counter for a CAN controller.Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);Returns the Tx error counter for a CAN controller.Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);This function is called by Can If to pass a CAN message to Can Drv for transmission.boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);-void Can_MainFunction_Write (void);This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.void Can_MainFunction_Read (void);This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.void Can_MainFunction_BusOff (void);This function performs the polling of bus - off events that are configured statically as 'to be polled'.void Can_MainFunction_Wakeup (void);This function performs the polling of wake - up events that are configured statically as 'to be polled'.void Can_MainFunction_Mode (void);This function performs the polling of CAN controller mode transitions.
Typen — Übersicht
struct Can_ConfigTypeThis is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings...Can_PduTypeThis type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.Can_IdTypeRepresents the Identifier of an L - PDU.Can_HwHandleTypeRepresents the hardware object handles of a CAN hardware unit.struct Can_HwTypeThis type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller...enum Can_ErrorStateTypeError states of a CAN controller.enum Can_ControllerStateTypeStates that are used by the several Controller Mode functions.enum Can_ErrorTypeThe enumeration represents a superset of CAN Error Types which typical CAN HW is able to report.
Funktionen & Typen — Detailansicht
دالة Can_Init [SWS_Can_00223] 📄 PDF
void Can_Init (const Can_ConfigType* Config);
This function initializes the module.
تهيئ الوظيفة المتزامنة وغير القابلة لإعادة الدخول Can_Init كامل وحدة برنامج تشغيل CAN بالإضافة إلى وحدات العتاد التابعة لها وفقًا للتكوين المُمرر [SWS_Can_00223].
الاستخدام وسياق الاستدعاء
يتم استدعاء Can_Init أثناء مرحلة بدء تشغيل وحدة التحكم الإلكترونية بشكل إلزامي بواسطة ECU State Manager، وذلك قبل السماح باستدعاء أي وظيفة أخرى لبرنامج تشغيل CAN [SWS_Can_91012]. كمعامل، تأخذ الوظيفة عبر Config مؤشرًا إلى تكوين برنامج التشغيل (const Can_ConfigType*) ولا تعيد أي قيمة مرجعة [SWS_Can_00223].
نطاق التهيئة وانتقالات الحالة
كجزء من التهيئة، تضبط الوظيفة جميع سجلات العتاد المطلوبة وتهيئ كافة وحدات تحكم CAN AUTOSAR_SWS_CANDriver ص. 33:
- تهيئة المتغيرات الثابتة والرايات الداخلية [SWS_Can_91012]،
- تكوين الإعدادات المشتركة لوحدة عتاد CAN الكاملة [SWS_Can_91012]،
- إعدادات خاصة بوحدة التحكم لكل وحدة تحكم CAN على حدة [SWS_Can_91012].
تُطلق انتقالات حالة لعتاد CAN عبر استدعاء الوظيفة AUTOSAR_SWS_CANDriver ص. 10، حيث يُجري Can_Init تكوين السجلات لنقل وحدات التحكم إلى الحالة الأساسية المحددة [SWS_Can_91010] AUTOSAR_SWS_CANDriver ص. 36.
التزامن والقيود
نظرًا لتحديد Can_Init على أنها غير قابلة لإعادة الدخول، فلا يجوز إجراء استدعاء متوازٍ أو متكرر أثناء تهيئة جارية [SWS_Can_00223]. بالإضافة إلى ذلك، لا يمكن ضبط بعض الإعدادات العامة لوحدة العتاد إلا داخل Can_Init AUTOSAR_SWS_CANDriver ص. 33.
تم إنشاء ملاحظة الاستخدام هذه آليًا استنادًا إلى بيانات مواصفات AUTOSAR Classic R20-11.
دليل المنفِّذ قيد الإعداد (التعقيد I1)
دالة Can_GetVersionInfo [SWS_Can_00224] 📄 PDF
void Can_GetVersionInfo (Std_VersionInfoType* versioninfo);
This function returns the version information of this module.
دالة Can_DeInit [SWS_Can_91002] 📄 PDF
void Can_DeInit (void);
This function de - initializes the module.
تُستخدم الدالة Can_DeInit لإلغاء تهيئة وحدة مشغل CAN ([SWS_Can_91002]). وهي تمتلك التوقيع void Can_DeInit(void)، ولا تقبل أي معلمات، ولا ترجع أي قيمة، ويتم تنفيذها بشكل متزامن وغير قابل لإعادة الدخول ([SWS_Can_91002]). الواجهة متوفرة عبر الرأس Can.h ([SWS_Can_91002]).
يطلق الاستدعاء انتقال حالة موجهاً بالبرمجيات (AUTOSAR_SWS_CANDriver ص. 10؛ AUTOSAR_SWS_CANDriver ص. 41). وعندئذٍ، يغير Can_DeInit حالة الوحدة (AUTOSAR_SWS_CANDriver ص. 33) ويعيد تعيين جميع وحدات تحكم CAN (AUTOSAR_SWS_CANDriver ص. 41).
التزامن والقيود
تنطبق شروط مسبقة صارمة ومتطلبات ترتيب على التنفيذ فيما يتعلق بحالات العتاد والوحدات:
- يجب على المستدعي التأكد من عدم وجود أي وحدة تحكم CAN في حالة غير مسموح بها (AUTOSAR_SWS_CANDriver ص. 61)؛ ويُفترض أنه يجب إنهاء عمليات الاتصال النشطة مسبقاً. سؤال Q-311343fa42add3a3 (مفتوح)
- إذا لم تكن وحدة CAN في الحالة الأولية المطلوبة عند الاستدعاء (AUTOSAR_SWS_CANDriver ص. 41)، تبلغ الدالة عن الخطأ
CAN_E_TRANSITION(AUTOSAR_SWS_CANDriver ص. 61). - كذلك يتم إطلاق الخطأ
CAN_E_TRANSITIONإذا بقيت وحدة تحكم CAN في حالة تمنع إلغاء التهيئة (AUTOSAR_SWS_CANDriver ص. 61). تفسير: من المرجح أن المشغل يشترط حالة توقف لجميع وحدات التحكم قبل الانتقال. سؤال Q-435095949dafba5c (مفتوح)
تفاعل
يعكس سلوك الخطأ والانتقال إجراءات المشغل المنقحة، والتي يتم بموجبها اعتراض انتقالات الحالة غير الصالحة بصورة موحدة ([SWS_Can_00441]).
تم إنشاء هذا النص بواسطة ذكاء اصطناعي استناداً إلى مواصفة AUTOSAR CP R20-11.
دالة Can_SetBaudrate [SWS_CAN_00491] 📄 PDF
Std_ReturnType Can_SetBaudrate (uint8 Controller, uint16 BaudRateConfig ID); ⚠️
This service shall set the baud rate configuration of the CAN controller. Depending on necessary baud rate modifications the controller might have to reset.
دالة Can_SetControllerMode [SWS_Can_00230] 📄 PDF
Std_ReturnType Can_SetControllerMode (uint8 Controller, Can_ControllerStateType Transition);
This function performs software triggered state transitions of the CAN controller State machine.
تنفذ الوظيفة Can_SetControllerMode (المتوفرة عبر Can.h بمعرف الخدمة 0x03) انتقالات الحالة المشغلة برمجياً لآلة حالة وحدة تحكم CAN ([SWS_Can_00230]، AUTOSAR_SWS_CANDriver ص. 35). وتقوم بضبط إعدادات السجلات المتعلقة بالعتاد لإحداث الانتقالات بين حالات وحدة التحكم الأساسية UNINIT، STOPPED، STARTED وSLEEP ([SWS_Can_91010]، AUTOSAR_SWS_CANDriver §7.3 «CAN Controller State Machine»).
الاستخدام والدلالات
يتم الاستدعاء بالمعامل Controller لتحديد وحدة تحكم CAN بالإضافة إلى Transition من النوع Can_ControllerStateType لتحديد انتقال الحالة المطلوب ([SWS_Can_00230]). تم تعريف الخدمة بأنها غير متزامنة وغير قابلة لإعادة الدخول (Non Reentrant) ([SWS_Can_00230]). تؤكد القيمة المرجعة E_OK أنه تم قبول الطلب؛ وتشير E_NOT_OK إلى أنه تم رفض الطلب ووجود خطأ تطوير ([SWS_Can_00230]، [SWS_Can_00441]).
التسلسل والتفاعل
بعد ضبط تكوين السجلات، يتم الخروج من Can_SetControllerMode مرة أخرى (AUTOSAR_SWS_CANDriver ص. 38). وبما أن وحدة Can لا تحفظ بنفسها تغييرات حالة العتاد ([SWS_Can_91010])، فمن المحتمل أن تتولى الوظيفة الدورية Can_Mainfunction_Mode الإتمام غير المتزامن أو التحقق من الانتقال الذي بدأه Can_SetControllerMode (AUTOSAR_SWS_CANDriver ص. 38). سؤال Q-03edb1b665a1624b (مفتوح)
تم إنشاء هذا النص بواسطة ذكاء اصطناعي استنادًا إلى بيانات مواصفات AUTOSAR R20-11.
دليل المنفِّذ قيد الإعداد (التعقيد I1)
دالة Can_DisableControllerInterrupts [SWS_Can_00231] 📄 PDF
void Can_DisableControllerInterrupts (uint8 Controller);
This function disables all interrupts for this CAN controller.
تلغي الوظيفة المتزامنة والقابلة لإعادة الدخول Can_DisableControllerInterrupts تفعيل جميع المقاطعات لوحدة تحكم CAN محددة ([SWS_Can_00231]). يتم التمرير عبر المعامل Controller بدون قيمة مرجعة ([SWS_Can_00231]).
فيما يتعلق بسياق الاستدعاء والتزامن، صُممت الدالة لتكون قابلة لإعادة الدخول (reentrant) وتدعم الاستدعاءات المتعددة (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). تفسير: من المرجح أن يؤدي الاستدعاء المتعدد إلى زيادة عداد تداخل داخلي، بحيث لا يُعاد تفعيل المقاطعات إلا بعد عدد مماثل من استدعاءات التمكين (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»، AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). سؤال Q-61be56207aa92ee0 (مفتوح)
في مجال معالجة الأخطاء، تتطلب المواصفة إطلاق الخطأ CAN_E_UNINIT إذا لم تكن وحدة المشغل قد تم تهيئتها بعد عند الاستدعاء (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»). بالإضافة إلى ذلك، تتطلب المواصفة إطلاق خطأ آخر (AUTOSAR_SWS_CANDriver §8.3 «Can_DisableControllerInterrupts»)؛ ويُفترض أن هذا يخدم التحقق من وجود معرف وحدة تحكم غير صالح. سؤال (مفتوح)
في سياق التفاعل داخل مشغل CAN، يُستخدم هذا الاستدعاء لحماية المقاطع الحرجة الخاصة بوحدة التحكم بينما تظل وحدة التحكم نشطة (AUTOSAR_SWS_CANDriver §7.5 «Interrupt handling»). تم توثيق عمليات التنقيح الشكلية وتعديلات الواجهة التاريخية للمشغل في ملاحظات الإصدار ([SWS_Can_00441]).
تم إنشاء هذا النص بواسطة ذكاء اصطناعي ويعمل كملاحظة استخدام تكميلية للمواصفة.
دالة Can_EnableControllerInterrupts [SWS_Can_00232] 📄 PDF
void Can_EnableControllerInterrupts (uint8 Controller);
This function enables all allowed interrupts.
تعمل الدالة المتزامنة والقابلة لإعادة الدخول Can_EnableControllerInterrupts على إعادة تفعيل جميع المقاطعات المسموح بها لوحدة تحكم CAN المحددة عبر المعلمة Controller ([SWS_Can_00232]). ليس لها قيمة إرجاع ويتم توفيرها عبر ملف الرأس Can.h ([SWS_Can_00232]).
فيما يتعلق بسير التنفيذ، تقرأ الدالة رايات التحكم البرمجية (AUTOSAR_SWS_CANDriver ص. 65). إذا تم إلغاء تفعيل مقاطعات وحدة التحكم مسبقاً عدة مرات، فيجب استدعاء Can_EnableControllerInterrupts بنفس عدد المرات قبل التمكين الفعلي (AUTOSAR_SWS_CANDriver ص. 65). تفسير: يُرجح أن المشغل يدير مقاطع الحظر المتداخلة عبر عدادات أو رايات داخلية، بحيث لا يُعاد تفعيل مقاطعات العتاد إلا بعد موازنة تامة لجميع استدعاءات إلغاء التفعيل. سؤال Q-6781f0fc9ad7d221 (مفتوح)
إذا تم استدعاء الدالة قبل تهيئة مشغل CAN بصورة صحيحة، فإنها تبلغ عن الخطأ CAN_E_UNINIT (AUTOSAR_SWS_CANDriver ص. 66). ويُرجح أن يُعامل هذا في سياق المشغل كخطأ تطوير ([SWS_Can_00441]). سؤال Q-efbbcf03a2589e4e (مفتوح) في الحالة غير المهيأة، لا تنفذ الدالة أي إجراءات أخرى على وحدة التحكم (AUTOSAR_SWS_CANDriver ص. 66).
تم إنشاء ملاحظة الاستخدام هذه تلقائيًا بناءً على المواصفة.
دالة Can_CheckWakeup [SWS_Can_00360] 📄 PDF
Std_ReturnType Can_CheckWakeup (uint8 Controller);
This function checks if a wakeup has occurred for the given controller.
الاستخدام والسلوك
تفحص الدالة المتزامنة Can_CheckWakeup لوحدة تحكم CAN معينة ما إذا كان قد تم اكتشاف حدث إيقاظ ([SWS_Can_00360]، AUTOSAR_SWS_CANDriver ص. 48، AUTOSAR_SWS_CANDriver ص. 67). وهي متوفرة عبر ملف الرأس Can.h ولها معرف الخدمة 0x0b ([SWS_Can_00360]).
- المعلمة:
Controller(in) يحدد معرف وحدة تحكم CAN المراد فحص حالتها بحثاً عن إيقاظ ([SWS_Can_00360]). - قيمة الإرجاع: ترجع
Std_ReturnType. تشير قيمة الإرجاعE_OKإلى قبول استدعاء API، بينما تشيرE_NOT_OKإلى الرفض ([SWS_Can_00360]). - التزامن: تم تعريف الدالة على أنها غير قابلة لإعادة الدخول (
Non Reentrant) ([SWS_Can_00360]).
التكوين ومعالجة الأخطاء
يمكن تكوين توفر الدالة في وقت ما قبل التحويل البرمجي؛ ويمكن من خلال ذلك تضمين الخدمة Can_CheckWakeup في الكود البرمجي أو إزالتها منه (AUTOSAR_SWS_CANDriver ص. 67، AUTOSAR_SWS_CANDriver ص. 97). إذا تم استدعاء الدالة قبل تهيئة مشغل CAN، فإنها تبلغ عن الخطأ CAN_E_UNINIT (AUTOSAR_SWS_CANDriver ص. 67).
تفاعل
يتم تحفيز استدعاء Can_CheckWakeup عادة بواسطة واجهة CAN (AUTOSAR_SWS_CANDriver ص. 48). في حالة حدوث حدث إيقاظ على الناقل، يمكن استدعاء CanIf_CheckWakeup أثناء معالجة EcuM_CheckWakeup (AUTOSAR_SWS_CANInterface §7.18.4.1 «Wake-up detection»). وفقاً لـ [SWS_CANIF_00395]، يستعلم CanIf هنا عبر Can_CheckWakeup() أو CanTrcv_CheckWakeup() عن جهاز العتاد الفعلي الذي أطلق إيقاظ الناقل (AUTOSAR_SWS_CANInterface ص. 55).
تم إنشاء ملاحظة الاستخدام هذه آلياً وتستند حصرياً إلى مواصفات إصدار AUTOSAR R20-11.
دالة Can_GetControllerErrorState [SWS_Can_91004] 📄 PDF
Std_ReturnType Can_GetControllerErrorState (uint8 ControllerId, Can_ErrorStateType* ErrorStatePtr);
This service obtains the error state of the CAN controller.
دالة Can_GetControllerMode [SWS_Can_91014] 📄 PDF
Std_ReturnType Can_GetControllerMode (uint8 Controller, Can_ControllerStateType* ControllerModePtr);
This service reports about the current status of the requested CAN controller.
دالة Can_GetControllerRxErrorCounter [SWS_Can_00511] 📄 PDF
Std_ReturnType Can_GetControllerRxErrorCounter (uint8 ControllerId, uint8* RxErrorCounterPtr);
Returns the Rx error counter for a CAN controller. This value might not be available for all CAN controllers, in which cas e E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Rx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.
دالة Can_GetControllerTxErrorCounter [SWS_Can_00516] 📄 PDF
Std_ReturnType Can_GetControllerTxErrorCounter (uint8 ControllerId, uint8* TxErrorCounterPtr);
Returns the Tx error counter for a CAN controller. This value might not be available for all CAN controllers, in which case E_ NOT_ OK would be returned. Please note that the value of the counter might not be correct at the moment the API returns it, because the Tx counter is handled asynchronously in hardware. Applications should not trust this value for any assumption about the current bus state.
دالة Can_Write [SWS_Can_00233] 📄 PDF
Std_ReturnType Can_Write (Can_HwHandleType Hth, const Can_PduType* PduInfo);
This function is called by Can If to pass a CAN message to Can Drv for transmission.
الاستخدام والدلالات
يتم استدعاء الدالة Can_Write بشكل متزامن بواسطة الوحدة CanIf لتسليم رسالة CAN إلى مشغل CAN (CanDrv) من أجل إرسالها ([SWS_Can_00233]). ويمرر المستدعي بذلك معلمتين:
Hth: مقبض إرسال عتادي يحدد كائن الإرسال الواجب استخدامه ويحدد وحدة التحكم ضمنياً، نظراً لأن أرقام المقابض فريدة داخل وحدة العتاد ([SWS_Can_00233]).PduInfo: مؤشر إلى بنية تحتوي على بيانات SDU الحمولة، وطول البيانات، ومعرف CAN ([SWS_Can_00233]).
قبل الإرسال، تفحص الدالة كائن الإرسال العتادي المعنون (SWS_CANDriver ص. 73) وتؤمن swPduHandle الممرر (SWS_CANDriver ص. 43). عبر قيمة الإرجاع من النوع Std_ReturnType (SRS_BSWGeneral §5.2.3.6 «Types and keywords»)، يشير E_OK إلى قبول الطلب، بينما يشير CAN_BUSY إلى عدم توفر مخزن إرسال عتادي مؤقت ([SWS_Can_00233]، SWS_CANDriver ص. 51).
معالجة الأخطاء
إذا حدث خطأ تطوير أثناء التنفيذ، ترجع الدالة E_NOT_OK ([SWS_Can_00233]، [SWS_Can_00441]). تفسير: لا تُذكر رموز أخطاء DET محددة صراحة في المقتطف المتاح؛ ومع ذلك يُرجح أن تؤدي المقابض الخاطئة أو المؤشرات غير الصالحة إلى إرجاع E_NOT_OK. سؤال Q-ca947a7e0e4fd7d6 (مفتوح)
التزامن والقيود
تم تحديد Can_Write على أنها قابلة لإعادة الدخول أو آمنة بالنسبة للخيوط (thread-safe) ([SWS_Can_00233]، SWS_CANDriver ص. 49). وإذا تعذر تنفيذ استدعاء وقائي من جانب المشغل بصورة قابلة لإعادة الدخول، فسيتم إبلاغ CanIf بذلك أيضاً عبر قيمة الإرجاع CAN_BUSY ([SWS_Can_00233]). يجب على المستدعي ضمان بقاء ذاكرة PDU صالحة دون تغيير حتى عودة استدعاء الدالة (SWS_CANDriver ص. 45).
تفاعل
يتم عبر [SWS_Can_00416] عند الاستدعاء نقل نوع PDU المعني (SWS_CANDriver ص. 51)، حيث يدعم المشغل الإرسال حتى أقصى طول لـ PDU (SWS_CANDriver ص. 52).
تم إنشاء ملاحظة الاستخدام هذه آلياً بناءً على وثائق مواصفات AUTOSAR R20-11.
دالة <LPDU_CalloutName> [SWS_Can_00443] 📄 PDF
boolean <LPDU_CalloutName> (uint8 Hrh, Can_IdType CanId, uint8 CanDataLegth, const uint8* CanSduPtr);
-
الاستخدام وسياق الاستدعاء
تستدعي وحدة CAN الخاصة بـ AUTOSAR واجهة الاستدعاء الخارجي (Call-out) القابلة للتكوين <LPDU_CalloutName> اختيارياً عند كل استلام لـ L-PDU (SWS_CANDriver §8.4.1 «Call-out function»). ويتم توفير تصريح الدالة عبر ملف الرأس Can_Externals.h ([SWS_Can_00443]). كما يتم تكوين الاسم الفعلي للدالة وفقاً للمشروع ([SWS_Can_00443]).
كمعاملات إدخال، يتم تمرير مقبض استلام العتاد Hrh، والمعرّف CanId، وطول البيانات CanDataLegth، ومؤشر إلى بيانات الحمولة CanSduPtr ([SWS_Can_00443]).
التصفية وقيمة الإرجاع
تُرجع الدالة قيمة boolean. وإذا أرجع الاستدعاء الخارجي false، فلا يجوز مواصلة معالجة L-PDU المستلمة ([SWS_Can_00444]). تفسير: إذا أرجع الاستدعاء true، فمن المرجح أن يتم التمرير النظامي لـ L-PDU إلى الطبقات الأعلى. سؤال Q-e96e75e93881c3af (مفتوح)
التزامن والقيود
زُوِّدت الدالة بمعرّف الخدمة 0x20 وحُدِّدت على أنها غير متزامنة (Asynchronous) وغير قابلة لإعادة الدخول (Non Reentrant) ([SWS_Can_00443]). ونظراً لأنها غير قابلة لإعادة الدخول، فلا يجوز إجراء استدعاءات متوازية في نفس السياق.
تم إنشاء هذا النص بواسطة ذكاء اصطناعي وهو مخصص كدليل إرشادي. متطلبات مواصفات AUTOSAR هي الملزمة.
دالة Can_MainFunction_Write [SWS_Can_00225] 📄 PDF
void Can_MainFunction_Write (void);
This function performs the polling of TX confirmation when CAN_ TX_ PROCESSING is set to POLLING.
تجري الوظيفة Can_MainFunction_Write الاستطلاع الدوري لتأكيدات الإرسال (TX-Confirmation) إذا تم تكوين المعامل CAN_TX_PROCESSING على POLLING [SWS_Can_00225]، AUTOSAR SWS CAN Driver §7 «Scheduled functions». وهي بدون معاملات (void Can_MainFunction_Write(void))، وتحمل معرف الخدمة 0x01، وتُوفر للمجدول عبر ملف الترويسة SchM_Can.h [SWS_Can_00225]. عبر مفاتيح التكوين، يمكن تفعيل الوظيفة أو إلغاء تفعيلها لمعالجة إرسال PDU AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite».
إذا لم يُستخدم الاستطلاع لعمليات الإرسال في النظام على الإطلاق، فيجب تطبيق Can_MainFunction_Write كتعريف فارغ وفقًا للمواصفة AUTOSAR SWS CAN Driver §7 «Scheduled functions». ومن شأن هذا على الأرجح تجنب العبء الإضافي غير الضروري على المجدول في الأنظمة الموجهة بالكامل بالمقاطعات. سؤال Q-2152a35397130945 (مفتوح)
بالتفاعل مع Can_MainFunction_Read وCan_MainFunction_BusOff، تشكل الروتين الواجهة الدورية لبرنامج التشغيل مع SchM AUTOSAR SWS CAN Driver §7 «Scheduled functions». وتتم معالجة التأكيد، اعتمادًا على الوضع، مباشرة على مورد العتاد أو في سياق Can_MainFunction_Write AUTOSAR SWS CAN Driver §7 «Hardware Resources». يعتمد الاستدعاء الفعلي والتخصيص على العناصر المشار إليها في كل حالة AUTOSAR SWS CAN Driver §10 «CanMainFunctionWrite»، AUTOSAR SWS CAN Driver §10 «Call Context»، مدعومة بمعالجة Tx متعلقة بوحدة التحكم [SWS_Can_00441].
تم توليد ملاحظة الاستخدام هذه تلقائيًا استنادًا إلى مواصفة AUTOSAR R20-11.
دالة Can_MainFunction_Read [SWS_Can_00226] 📄 PDF
void Can_MainFunction_Read (void);
This function performs the polling of RX indications when CAN_ RX_ PROCESSING is set to POLLING.
تُستخدم الوظيفة Can_MainFunction_Read للاستعلام الدوري (الاستطلاع) عن رسائل استقبال CAN ([SWS_Can_00226]). وهي تمتلك التوقيع void Can_MainFunction_Read (void) مع معرف الخدمة 0x08 وتُوفر للتحكم في التنفيذ عبر ملف الترويسة SchM_Can.h ([SWS_Can_00226]).
الاستخدام والتهيئة
تنفذ الوظيفة استطلاع إشارات RX عندما يتم ضبط معامل التكوين CAN_RX_PROCESSING على POLLING ([SWS_Can_00226]). في النظام، يمكن تكوين هذه المعالجة لكل وحدة تحكم على حدة ([SWS_Can_00441]). إذا لم يُستخدم الاستطلاع مطلقًا في برنامج تشغيل CAN، فيمكن تعريف Can_MainFunction_Read كـ Macro فارغ (AUTOSAR_SWS_CANDriver ص. 77).
التزامن والقيود
يتم الاستدعاء دوريًا في سياق المجدول وفقًا لفترة المشغل المعلمة (AUTOSAR_SWS_CANDriver ص. 22). تنطبق شروط صارمة على التنفيذ:
- لا يجوز مقاطعة الوظيفة بواسطة نفسها (AUTOSAR_SWS_CANDriver ص. 47).
- بشكل عام، لا يجوز مقاطعة وظائف CAN الرئيسية مثل
Can_MainFunction_Read(AUTOSAR_SWS_CANDriver ص. 49)، وذلك لضمان الوصول المتسق إلى موارد برنامج التشغيل والعتاد في وضع الاستطلاع (AUTOSAR_SWS_CANDriver ص. 46).
تفسير: من المحتمل أن يلزم تحديد الفاصل الزمني المكوّن لاستدعاء المهمة بحيث تنتهي مرحلة المعالجة دائمًا قبل بدء الدورة التالية، نظرًا لأن قابلية إعادة الدخول غير مسموح بها (AUTOSAR_SWS_CANDriver ص. 47). سؤال Q-1f2fa9db14970b12 (مفتوح)
تم إنشاء هذا النص بواسطة ذكاء اصطناعي بناءً على مواصفة AUTOSAR R20-11.
دالة Can_MainFunction_BusOff [SWS_Can_00227] 📄 PDF
void Can_MainFunction_BusOff (void);
This function performs the polling of bus - off events that are configured statically as 'to be polled'.
تُستخدم الوظيفة الرئيسية المخططة Can_MainFunction_BusOff للاستطلاع الدوري لأحداث انقطاع الاتصال بالناقل (Bus-Off) لوحدات تحكم CAN، بشرط تكوينها بشكل ثابت ليتم استطلاعها [SWS_Can_00227]، [SWS_Can_00109]. تمتلك التوقيع void Can_MainFunction_BusOff(void)، ولا تقبل أي معاملات، ولا تعيد أي قيمة، وتُوفر للتحكم في التنفيذ عبر الترويسة SchM_Can.h [SWS_Can_00227].
الاستخدام والتكامل
يمكن التقاط أحداث العتاد في برنامج تشغيل CAN إما عبر المقاطعة أو من خلال استطلاع رايات الحالة المقابلة، مع كون تكوين الاستعلام معتمدًا على العتاد [SWS_Can_00099]. كما يمكن تكوين برنامج التشغيل بحيث يتم الاستغناء تمامًا عن المقاطعات [SWS_Can_00007]. إذا لم يُستخدم الاستطلاع على مستوى النظام ككل، يُسمح لوحدة Can بتطبيق الوظيفة كـ Macro فارغ [SWS_Can_00183].
إذا تم اكتشاف حدث Bus-Off في Can_MainFunction_BusOff عبر بتات الحالة، تُجري الوحدة إعدادات السجل الضرورية – على سبيل المثال لمنع التعافي التلقائي للعتاد SWS_CANDriver §7.3 «CAN Controller State Machine»، [SWS_Can_91010]. بعد ذلك، تخطر الوحدة الطبقة الأعلى CanIf عبر رد النداء المقترن، والذي يتم فيه تغيير حالة وحدة التحكم برمجياً SWS_CANDriver §7.3 «CAN Controller State Machine».
سياق الاستدعاء والقيود
في التشغيل المستند إلى الاستطلاع، لا يكون سياق استدعاء إشعار رد النداء هو ISR، بل المهمة المنفذة لـ Can_MainFunction_BusOff؛ ومع ذلك، يجب تنفيذ جميع وظائف رد النداء كما لو كان يتم استدعاؤها من سياق ISR SWS_CANDriver §7.9 «Notification concept». فيما يتعلق بقابلية إعادة الدخول، لا يحتوي المحتوى على بيانات صريحة؛ ويُرجح أن الوظيفة غير قابلة لإعادة الدخول، لأنها تصل إلى سجلات وحالات وحدة التحكم العامة. سؤال Q-38fcd72c40ce3e66 (مفتوح)
تم إنشاء ملاحظة الاستخدام هذه بواسطة ذكاء اصطناعي وتستند حصريًا إلى مقتطفات مواصفات إصدار AUTOSAR R20-11.
دالة Can_MainFunction_Wakeup [SWS_Can_00228] 📄 PDF
void Can_MainFunction_Wakeup (void);
This function performs the polling of wake - up events that are configured statically as 'to be polled'.
تجري الوظيفة الرئيسية Can_MainFunction_Wakeup الاستطلاع الدوري لأحداث التنبيه التي تم تكوينها بشكل ثابت ليتم استطلاعها ([SWS_Can_00228]). تمتلك الوظيفة التوقيع void Can_MainFunction_Wakeup(void)، ولا تقبل أي معاملات، ولا تعيد أي قيمة، وتُوفر لمدير الجدولة عبر الترويسة SchM_Can.h (AUTOSAR_SWS_CANDriver ص. 79). يتم تكوين فترة تنفيذ الوظيفة بالثواني (AUTOSAR_SWS_CANDriver ص. 92).
ضمن إطار آلة الحالة لوحدة تحكم CAN (SWS_CANDriver §7.3 «CAN Controller State Machine»)، يمكن الإشارة إلى أحداث تنبيه العتاد الخارجية عبر بت حالة يُستعلم عنه في Can_MainFunction_Wakeup بدلاً من المقاطعات ([SWS_Can_91010]). علاوة على ذلك، تستطلع الوظيفة عند انتقالات الحالة راية مقابلة في سجل حالة CAN حتى تشير إلى فاعلية التغيير ([SWS_Can_00370]). بعد الانتقال الناجح للحالة، يبلغ برنامج تشغيل CAN بالحالة الجديدة باستخدام وظيفة رد النداء CanIf_ControllerModeIndication إلى واجهة CAN، استنادًا إلى CanIf ControllerId المجردة ([SWS_Can_00370]).
فيما يتعلق بالتكوين واستخدام الموارد، يمكن تفعيل أو إلغاء تفعيل API Can_MainFunction_Wakeup() لمعالجة أحداث التنبيه (AUTOSAR_SWS_CANDriver ص. 97). وإذا لم يُستخدم أي استطلاع لأحداث التنبيه في وحدة التحكم الإلكترونية على الإطلاق، فيمكن تعريف Can_MainFunction_Wakeup كـ Macro فارغ (AUTOSAR_SWS_CANDriver ص. 79).
تم إنشاء ملاحظة الاستخدام هذه تلقائيًا استنادًا إلى مواصفات AUTOSAR CP R20-11.
دالة Can_MainFunction_Mode [SWS_Can_00368] 📄 PDF
void Can_MainFunction_Mode (void);
This function performs the polling of CAN controller mode transitions.
الاستخدام وطريقة العمل
تجري الدالة الرئيسية المجدولة Can_MainFunction_Mode ([SWS_Can_00368]) استقصاءً لانتقالات حالة وحدات تحكم CAN. وهي لا تحتوي على معلمات تمرير ولا على قيمة إرجاع (void Can_MainFunction_Mode(void)، معرف الخدمة 0x0c) ويتم التصريح عنها عبر الرأس SchM_Can.h SWS_CANDriver §8.5.1.5 «Can_MainFunction_Mode».
يتم استدعاء الدالة بصورة دورية مستمرة (AUTOSAR_SWS_CANInterface ص. 143). وهي تفحص العتاد لمعرفة ما إذا كان وضع وحدة تحكم CAN قد تغير. وعند اكتشاف تغيير، يتم إخطار واجهة CAN عبر استدعاء CanIf_ControllerModeIndication(Controller, ControllerMode).
مراقبة الوضع غير المتزامنة
إذا طُلب تغيير الوضع مسبقاً عبر Can_SetControllerMode() وعاد هذا الاستدعاء بنجاح إلى CanIf، يكتشف Can_MainFunction_Mode انتقال الحالة المكتمل لعتاد وحدة التحكم. ويقوم بعد ذلك بإبلاغ CanIf بشكل غير متزامن عن طريق CanIf_ControllerModeIndication بالحالة الجديدة مثل CAN_CS_STARTED AUTOSAR_SWS_CANInterface ص. 144.
سياق الاستدعاء والشروط الحدية
نظراً لتوفيرها عبر SchM_Can.h وتعريفها كدالة مجدولة (Scheduled Function)، فمن المرجح أن يتم الاستدعاء الدوري بواسطة مجدول BSW. سؤال Q-42edbc2aa591e8d7 (مفتوح) لا يتم تعريف رموز أخطاء محددة أو خطوات تطوير في الحمولة لهذه الدالة.
تم إنشاء هذا النص بواسطة ذكاء اصطناعي بناءً على مواصفات AUTOSAR.
دليل المنفِّذ قيد الإعداد (التعقيد I1)
نوع Can_ConfigType [SWS_Can_00413] 📄 PDF
This is the type of the external data structure containing the overall initialization data for the CAN driver and SFR settings affecting all controllers. Furthermore it contains pointers to controller configuration structures. The contents of the initializ ation data structure are CAN hardware specific.
نوع Can_PduType [SWS_Can_00415] 📄 PDF
This type unites Pdu Id (sw Pdu Handle), Sdu Length (length), Sdu Data (sdu), and Can Id (id) for any CAN L - SDU.
نوع Can_IdType [SWS_Can_00416] 📄 PDF
Represents the Identifier of an L - PDU. The two most significant bits specify the frame type: 00 CAN message with Standard CAN ID 01 CAN FD frame with Standard CAN ID 10 CAN message with Extended CAN ID 11 CAN FD frame with Extended CAN ID
نوع Can_HwHandleType [SWS_Can_00429] 📄 PDF
Represents the hardware object handles of a CAN hardware unit. For CAN hardware units with more than 255 HW objects use extended range.
نوع Can_HwType [SWS_CAN_00496] 📄 PDF
This type defines a data structure which clearly provides an Hardware Object Handle including its corresponding CAN Controller and therefore Can Drv as well as the specific Can Id.
نوع Can_ErrorStateType [SWS_Can_91003] 📄 PDF
Error states of a CAN controller.
يصف نوع التعداد Can_ErrorStateType من Can_GeneralTypes.h حالات الخطأ والتشغيل لوحدة تحكم CAN [SWS_Can_91003]. وهو يمثل سلوك وحدة التحكم على ناقل CAN عبر ثلاث حالات SWS_CANDriver §8.2.7 «Can_ErrorStateType»:
CAN_ERRORSTATE_ACTIVE: تشارك وحدة تحكم CAN بشكل كامل في اتصال الناقل [SWS_Can_91003].CAN_ERRORSTATE_PASSIVE: تشارك وحدة تحكم CAN في الاتصال، ولكنها لم تعد ترسل أطر خطأ نشطة (Error Frames) [SWS_Can_91003].CAN_ERRORSTATE_BUSOFF: تكون وحدة تحكم CAN معزولة عن الناقل نتيجة لأخطاء إرسال جسيمة ولا تشارك بعد ذلك في الاتصال [SWS_Can_91003].
في وقت التشغيل، يتم الاستعلام عن الحالة عبر خدمة المشغل المتزامنة Can_GetControllerErrorState [SWS_Can_91004]. وتستقبل معلمة الإخراج ErrorStatePtr الخاصة بها القيمة المحددة. وتستخدم التوقيع نفسه أيضاً الدالة ذات المستوى الأعلى CanIf_GetControllerErrorState في واجهة CAN AUTOSAR_SWS_CANInterface ص. 78 «CanIf_GetControllerErrorState». فيما يتعلق بالتزامن، تم تحديد Can_GetControllerErrorState لنفس ControllerId على أنها غير قابلة لإعادة الدخول [SWS_Can_91004].
في حالة حدوث خطأ، يرجع Can_GetControllerErrorState قيمة الإرجاع E_NOT_OK، وفي حالة الاستعلام الناجح يرجع E_OK [SWS_Can_91004]. عند تفعيل اكتشاف أخطاء التطوير (DET)، يؤدي الاستدعاء قبل تهيئة المشغل إلى الخطأ CAN_E_UNINIT [SWS_Can_91005]. ويؤدي ControllerId غير المسموح به إلى إطلاق خطأ التطوير CAN_E_PARAM_CONTROLLER [SWS_Can_91006]، ويتم رفض تمرير مؤشر فارغ لـ ErrorStatePtr بخطأ تطوير [SWS_Can_91007].
تفسير: من المرجح أن المستدعي يجب عليه تخصيص نطاق الذاكرة لـ ErrorStatePtr بمسؤوليته الخاصة، نظراً لأن الواجهة تعامل المؤشر كمعلمة إخراج صرفة وتستبعد المؤشرات الفارغة عبر خطأ تطوير. سؤال Q-5c907c21bcb50893 (مفتوح)
تم إنشاء هذا النص بواسطة ذكاء اصطناعي بناءً على مواصفة AUTOSAR R20-11.
دليل المنفِّذ قيد الإعداد (التعقيد I1)
نوع Can_ControllerStateType [SWS_Can_91013] 📄 PDF
States that are used by the several Controller Mode functions.
يحدد نوع التعداد Can_ControllerStateType حالات التشغيل الأساسية لوحدة تحكم CAN: CAN_CS_UNINIT وCAN_CS_STARTED وCAN_CS_STOPPED وCAN_CS_SLEEP [SWS_Can_91013]. ويُستخدم النوع عبر الوحدات للتحكم الموجه برمجياً في حالة آلة حالة وحدة تحكم CAN [SWS_Can_00017].
تُستخدم القيم في السياقات التالية:
- طلب الحالة: في
Can_SetControllerMode، يُستخدم النوع كقيمة انتقال (المعلمةTransition) للطلب غير المتزامن لحالة تشغيل جديدة [SWS_Can_00230]؛ وتوجد بالتوافق مع ذلكCanIf_SetControllerModeAUTOSAR_SWS_CANInterface §- «CanIf_SetControllerMode». يمرر المشغل الطلب إلى عتاد وحدة التحكم، حيث يصبح التغيير الفعلي للحالة سارياً على الفور أو بعد بضعة أجزاء من الألف من الثانية AUTOSAR_SWS_CANInterface §- «Can_SetControllerMode». كما يؤدي الانتقال إلىCAN_CS_STARTEDإلى إعادة تهيئة وحدة التحكم [SWS_Can_00384]. - الاستعلام عن الحالة: عبر
Can_GetControllerMode، يمكن الاستعلام عن الحالة الحالية بشكل متزامن عبر مؤشر الإخراجControllerModePtr([SWS_Can_91014]، [SWS_Can_91015]) (بالمثل فيCanIf_GetControllerModeAUTOSAR_SWS_CANInterface §- «CanIf_GetControllerMode»). - إشارة الحالة: بعد اكتمال التغيير، تخطر ردود النداء (callbacks) مثل
CanSM_ControllerModeIndication[SWS_CanSM_00396] وCanIf_ControllerModeIndicationAUTOSAR_SWS_CANInterface §- «CanIf_ControllerModeIndication» وكذلك ردود نداء المستخدم AUTOSAR_SWS_CANInterface §- «User_ControllerModeIndication» الطبقات الأعلى بشكل متزامن بوضع وحدة التحكم الجديد.
فيما يتعلق بالتزامن ومعالجة الأخطاء: دوال المشغل Can_SetControllerMode وCan_GetControllerMode غير قابلة لإعادة الدخول [SWS_Can_00230]، [SWS_Can_91014]. عند استدعاء Can_GetControllerMode قبل تهيئة المشغل، يتم الإبلاغ عن خطأ التطوير CAN_E_UNINIT وإرجاع E_NOT_OK [SWS_Can_91016]. وتعد دالة رد النداء CanSM_ControllerModeIndication قابلة لإعادة الدخول لوحدات التحكم المختلفة وتبلغ عن معرف وحدة تحكم غير مكوّن بواسطة CANSM_E_PARAM_CONTROLLER إلى DET [SWS_CanSM_00396]، [SWS_CanSM_00397].
تستند ملاحظة الاستخدام هذه إلى محددات مواصفات مشغل CAN، وواجهة CAN، ومدير حالة CAN في AUTOSAR Classic R20-11.
دليل المنفِّذ قيد الإعداد (التعقيد I1)
نوع Can_ErrorType [SWS_Can_91021] 📄 PDF
The enumeration represents a superset of CAN Error Types which typical CAN HW is able to report. That means not all CAN HW will be able to support the complete set.
يُعرّف نوع التعداد Can_ErrorType مجموعة شاملة قياسية لأسباب أخطاء CAN التي يمكن لعتاد CAN النموذجي التقاطها والإبلاغ عنها للطبقات الأعلى [SWS_Can_91021]. ويتم توفيره عبر ملف الرأس Can_GeneralTypes.h SWS_CANDriver §8.2.9 «Can_ErrorType».
نظراً لتصميم التعداد كمجموعة شاملة (Superset)، فليس بالضرورة أن تدعم كل وحدة تحكم CAN جميع القيم المحددة [SWS_Can_91021]. وتشمل حالات الخطأ المعرّفة ما يلي:
- أخطاء البت أثناء مراقبة الناقل (
CAN_ERROR_BIT_MONITORING1،CAN_ERROR_BIT_MONITORING0أو إجمالاًCAN_ERROR_BIT)، - أخطاء الإقرار (
CAN_ERROR_CHECK_ACK_FAILED،CAN_ERROR_ACK_DELIMITER)، - فقدان التحكيم لجهاز الإرسال (
CAN_ERROR_ARBITRATION_LOST)، - حالات الحمل الزائد الناتجة عن امتلاء مخازن الاستلام المؤقتة (
CAN_ERROR_OVERLOAD)، - انتهاكات التنسيق وحشو البتات (
CAN_ERROR_CHECK_FORM_FAILED،CAN_ERROR_CHECK_STUFFING_FAILED)، - أخطاء CRC (
CAN_ERROR_CHECK_CRC_FAILED)، وكذلك - انسداد دائم للناقل عند مستوى سائد (
CAN_ERROR_BUS_LOCK) SWS_CANDriver §8.2.9 «Can_ErrorType».
في إطار تفاعل وحدات BSW، يُستخدم هذا النوع كمعامل لدالة رد النداء CanIf_ErrorNotification لتمرير أخطاء وحدة التحكم إلى واجهة CAN AUTOSAR_SWS_CANInterface §8.x «CanIf_ErrorNotification». ومن المرجح أن تتوافق القيمة الممررة مع حالة الخطأ التي حددها العتاد الأساسي AUTOSAR_SWS_CANDriver §7.x «Error Notification». سؤال Q-d23c45dd3b23ec71 (مفتوح)
تم إنشاء هذا النص بواسطة ذكاء اصطناعي وهو مخصص للتوجيه الفني.
Request a governed re-review of this record. The record is not changed immediately.
- Record
AUTOSAR/AP/record/CP_MOD_Can- Status
- unspecified
- Version
AUTOSAR/AP/record/CP_MOD_Can@rel:R20-11#1be601d5- Content hash
1be601d5- Source
- https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_CANDriver.pdf#nameddest=SWS_Can_00223
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني