|
|
- /* ----------------------------------------------------------------------------
- * SchedMCore - A MultiCore Scheduling Framework
- * Copyright (C) 2009-2011, ONERA, Toulouse, FRANCE - LIFL, Lille, FRANCE
- *
- * This file is part of Prelude
- *
- * Prelude is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation ; either version 2 of
- * the License, or (at your option) any later version.
- *
- * Prelude is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY ; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program ; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- *---------------------------------------------------------------------------- */
-
- #ifndef com_patterns_H_
- #define com_patterns_H_
- // Description of communication protocols using ultimately periodic
- // words: prefix.(periodic pattern). Each communication uses a circular
- // buffer shared between the writer and the reader.
-
- // The task instance i writes to the communication buffer iff proto[n]
- // is true (modulo the size of the periodic word). After each write, the
- // index where the writer writes is incremented.
- struct write_proto_t {
- int* write_pref;
- int wpref_size;
- int* write_pat;
- int wpat_size;
- };
-
- // The task instance n must increment the index at which the task reads
- // in the communication buffer iff proto[n] is true (modulo the size of the
- // periodic word).
- struct read_proto_t {
- int* change_pref;
- int rpref_size;
- int* change_pat;
- int rpat_size;
- };
-
- /**
- * Returns 1 if instance n must write in the com buffer.
- */
- static inline int must_write(struct write_proto_t wp, int n)
- {
- if(n < wp.wpref_size)
- return wp.write_pref[n];
- else
- return wp.write_pat[(n-wp.wpref_size)%wp.wpat_size];
- }
-
-
- /**
- * Returns 1 if instance n must change the cell from which it reads.
- */
- static inline int must_change(struct read_proto_t rp, int n)
- {
- if(n < rp.rpref_size)
- return rp.change_pref[n];
- else
- return rp.change_pat[(n-rp.rpref_size)%rp.rpat_size];
- }
-
- #endif
|