# HG changeset patch # User Edouard Tisserant # Date 1393895891 -3600 # Node ID 21a2ea65cb3022939a46b9017def30f66b1b8b31 # Parent bc14b43bd27f0f0de31eaab223b3cff3773c38cf Delayed CANopen initialization for better busoff recovery diff -r bc14b43bd27f -r 21a2ea65cb30 canfestival/cf_runtime.c --- a/canfestival/cf_runtime.c Thu Feb 27 23:04:27 2014 +0100 +++ b/canfestival/cf_runtime.c Tue Mar 04 02:18:11 2014 +0100 @@ -36,11 +36,15 @@ *nodename##_Data.COB_ID_Sync = 0x40000080;\ *nodename##_Data.Sync_Cycle_Period = common_ticktime__ * 1000; +static void DeferedInitAlarm(CO_Data* d, UNS32 id){ + /* Node will start beeing active on the network after this */ + setState(d, Initialisation); +} + #define NODE_INIT(nodename, nodeid) \ /* Defining the node Id */\ setNodeId(&nodename##_Data, nodeid);\ - /* init */\ - setState(&nodename##_Data, Initialisation); + SetAlarm(&nodename##_Data,0,&DeferedInitAlarm,MS_TO_TIMEVAL(100),0); #define NODE_MASTER_INIT(nodename, nodeid) \ NODE_FORCE_SYNC(nodename) \ @@ -49,7 +53,7 @@ #define NODE_SLAVE_INIT(nodename, nodeid) \ NODE_INIT(nodename, nodeid) -void InitNodes(CO_Data* d, UNS32 id) +static void InitNodes(CO_Data* d, UNS32 id) { %(slavebootup_register)s %(post_sync_register)s @@ -64,7 +68,7 @@ setState(&nodename##_Data, Stopped);\ } -void Exit(CO_Data* d, UNS32 id) +static void Exit(CO_Data* d, UNS32 id) { %(nodes_stop)s }