etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: image/svg+xml etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: SCHEDULINGtimer.cTimeDispatch etisserant@0: etisserant@0: CanFestival Library etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: Application etisserant@0: etisserant@0: etisserant@0: Callbacks etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: CANDISPATCHINGstates.ccanDispatch etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: CanFestival interface to CAN etisserant@0: Because most CAN controllers and drivers implement FIFOs, CanFestival consider sending message as a non bloking operation.In order to prevent reentrent calls to the stack, messages reception is implemented differently on µC and OS.:- µC must provide interuption masking for timer and can receive IT- OS must provide a receive thread, a timer thread and a mutex. CAN reception is a bloking operation. etisserant@0: etisserant@0: etisserant@0: CAN DRIVERINTERFACE(can_xxx.c)canSendcanReceiveLoop etisserant@0: etisserant@0: HW interfaces (for OS) etisserant@0: etisserant@0: etisserant@0: mutex etisserant@0: etisserant@0: etisserant@0: etisserant@0: SYSTEM TIMERSINTERFACE(timers_xxx.c)CreateReceiveTaskTimerLoop etisserant@0: etisserant@0: etisserant@0: etisserant@0: CANreceivethread etisserant@0: etisserant@0: etisserant@0: etisserant@0: HW interfaces (for µC) etisserant@0: etisserant@0: etisserant@0: CAN DRIVERINTERFACE(can_xxx.c)canSendcanReceiveLoop etisserant@0: etisserant@0: etisserant@0: etisserant@0: SYSTEM TIMERSINTERFACE(timers_xxx.c)CreateReceiveTaskTimerLoop etisserant@0: etisserant@0: etisserant@0: etisserant@0: CANreceiveIRQ etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: TIMERIRQ etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: Timerthread etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: etisserant@0: