master/master.c
changeset 2000 c76c01572f00
parent 1999 5f1269a71588
child 2001 2e05246f3b00
equal deleted inserted replaced
1999:5f1269a71588 2000:c76c01572f00
  1271         // receive
  1271         // receive
  1272         down(&master->io_sem);
  1272         down(&master->io_sem);
  1273         ecrt_master_receive(master);
  1273         ecrt_master_receive(master);
  1274         up(&master->io_sem);
  1274         up(&master->io_sem);
  1275 
  1275 
  1276         fsm_exec = 0;
  1276         if (master->injection_seq_rt == master->injection_seq_fsm) {
  1277         // execute master & slave state machines
  1277             fsm_exec = 0;
  1278         if (down_interruptible(&master->master_sem))
  1278             // execute master & slave state machines
  1279             break;
  1279             if (down_interruptible(&master->master_sem))
  1280         fsm_exec = ec_fsm_master_exec(&master->fsm);
  1280                 break;
  1281         for (slave = master->slaves;
  1281             fsm_exec = ec_fsm_master_exec(&master->fsm);
  1282                 slave < master->slaves + master->slave_count;
  1282             for (slave = master->slaves;
  1283                 slave++) {
  1283                     slave < master->slaves + master->slave_count;
  1284             ec_fsm_slave_exec(&slave->fsm);
  1284                     slave++) {
  1285         }
  1285                 ec_fsm_slave_exec(&slave->fsm);
  1286         up(&master->master_sem);
  1286             }
  1287 
  1287             up(&master->master_sem);
  1288         // queue and send
  1288 
  1289         down(&master->io_sem);
  1289             // queue and send
  1290         if (fsm_exec) {
  1290             down(&master->io_sem);
  1291             ec_master_queue_datagram(master, &master->fsm_datagram);
  1291             if (fsm_exec) {
  1292         }
  1292                 master->injection_seq_rt++;
  1293         ec_master_inject_external_datagrams(master);
  1293             }
       
  1294         }
  1294         ecrt_master_send(master);
  1295         ecrt_master_send(master);
  1295         sent_bytes = master->main_device.tx_skb[
  1296         sent_bytes = master->main_device.tx_skb[
  1296             master->main_device.tx_ring_index]->len;
  1297             master->main_device.tx_ring_index]->len;
  1297         up(&master->io_sem);
  1298         up(&master->io_sem);
  1298 
  1299 
  1340 
  1341 
  1341             fsm_exec = 0;
  1342             fsm_exec = 0;
  1342             // execute master & slave state machines
  1343             // execute master & slave state machines
  1343             if (down_interruptible(&master->master_sem))
  1344             if (down_interruptible(&master->master_sem))
  1344                 break;
  1345                 break;
  1345             fsm_exec += ec_fsm_master_exec(&master->fsm);
  1346             fsm_exec = ec_fsm_master_exec(&master->fsm);
  1346             for (slave = master->slaves;
  1347             for (slave = master->slaves;
  1347                     slave < master->slaves + master->slave_count;
  1348                     slave < master->slaves + master->slave_count;
  1348                     slave++) {
  1349                     slave++) {
  1349                 ec_fsm_slave_exec(&slave->fsm);
  1350                 ec_fsm_slave_exec(&slave->fsm);
  1350             }
  1351             }