etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: image/svg+xml etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: My_App.c etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: CanSend etisserant@158: etisserant@158: etisserant@158: etisserant@158: CAN driver interfacecan_xxx.c)canOpen_drivercanClose_drivercanSend_drivercanReceive_driver etisserant@158: etisserant@158: OSinterface etisserant@158: etisserant@158: etisserant@158: SYSTEM TIMERSINTERFACE(timers_xxx.c)CreateReceiveTaskWaitReceiveTaskEnd(Start/Stop)TimerLoop etisserant@158: etisserant@158: etisserant@158: etisserant@158: ThreadCANReceiveLoop etisserant@158: etisserant@158: Timer etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: creates/stopthread etisserant@158: etisserant@158: etisserant@158: etisserant@158: } etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: SCHEDULINGtimer.cTimeDispatch etisserant@158: etisserant@158: CanFestival Library etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: CANDISPATCHINGstates.ccanDispatch etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: mutex etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: creates/stoptimer etisserant@158: etisserant@158: etisserant@158: etisserant@158: createsmutex etisserant@158: etisserant@158: #include canfestival.h //GUI generated header #include MyNode.hvoid InitNode(CO_Data* d, UNS32 id){ setNodeId(&MyNode_Data, 0x01); setState(&MyNode_Data, Initialisation);}void Exit(CO_Data*d, UNS32 id){}void Operational(){ /* Your code for Operational State */}int main(int argc, char *argv[]){ LoadCanDriver("can_peak_win32.dll"); MyNode_Data.operational = Operational; s_BOARD MyBoard = {"0", "500K"}; MyCanHandle = canOpen(&MyBoard,&MyNode_Data); TimerInit(); StartTimerLoop(&InitNode); /* Your Code Here */ StopTimerLoop(&Exit); TimerCleanup(); canClose(&MyNode_Data);} etisserant@158: etisserant@158: etisserant@158: unix.c or win32.c etisserant@158: etisserant@158: CAN_xxx .dll/.so etisserant@158: etisserant@158: etisserant@158: LoadCanDriver etisserant@158: etisserant@158: etisserant@158: etisserant@158: canOpen etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: canClose etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: Callbacks etisserant@158: Predefined or OD entry accesscallbacks registered withRegisterSetODentryCallBack etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: Register the predefined"On Operational State" callback. etisserant@158: Start the scheduler with InitNode as the firstscheduled function call. etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: etisserant@158: Always surround stack calls withEnterMutex()LeaveMutex() etisserant@158: etisserant@158: ! etisserant@158: etisserant@158: etisserant@158: Load the CAN interfacedynamic linking library (optional) etisserant@158: etisserant@158: Open Can poard and associateit with the CanOpen node. etisserant@158: etisserant@158: CanFestival integration with Unix and win32 OS greg@462: + etisserant@158: