skeleton for lab1

Dependencies:   AvailableMemory mbed-rtos mbed

Fork of helloaabbc by 32314 mbed

Files at this revision

API Documentation at this revision

Comitter:
mbed36372
Date:
Fri Apr 04 21:31:22 2014 +0000
Parent:
0:1c8f2727e9f5
Commit message:
SP14_lab1

Changed in this revision

RingBuffer.h Show annotated file Show diff for this revision Revisions of this file
SDF.cpp Show annotated file Show diff for this revision Revisions of this file
SDF.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/RingBuffer.h	Thu Apr 03 22:56:32 2014 +0000
+++ b/RingBuffer.h	Fri Apr 04 21:31:22 2014 +0000
@@ -16,7 +16,7 @@
   /*cur is used in next() method, denoting the current position in a sequential read, count is the number of elements*/
   int cur,count;
 
-  RingBuffer(int *data=NULL, int bs=0):buf(data),cur(0),count(0),bufSize(bs),start(0),end(0){}
+  RingBuffer(int *data=NULL, int bs=0):bufSize(bs),start(0),end(0),buf(data),cur(0),count(0){}
   ~RingBuffer(){buf=NULL;}
   void insert(int sample);
   int next();
--- a/SDF.cpp	Thu Apr 03 22:56:32 2014 +0000
+++ b/SDF.cpp	Fri Apr 04 21:31:22 2014 +0000
@@ -177,7 +177,7 @@
     }
     setInput(input);
     setOutput(output);
-    makeSchedule();
+    schedule=makeSchedule();
 }
 
 /*destructor, reclaim all the space allocated for nodes and FIFOs*/
@@ -493,45 +493,18 @@
   }
 }
 
-/*compile a schedule according to numOfFiringRequired; each time find a node which can fire and fire it; update the tokens on each FIFO,
-  repeat this process until all the nodes have fired the required number of times, which means a complete schedule has finished*/
-void SDFG::makeSchedule(){
-  vector<int> buffers(fifos.size()), firingCount(nodes.size());
-  for(int i=0; i<buffers.size(); i++)buffers[i]=fifos[i]->getSize();
-  for(int i=0; i<firingCount.size(); i++)firingCount[i]=0;
-  bool finished;
-  do{
-      /*check if all nodes have fired the number of times required, as computed in hasSchedule() function*/
-      finished=true;
-      for(int i=0; i<firingCount.size(); i++){
-        if(firingCount[i]<numOfFiringRequired[i]){
-          /*this node has not fired that many times, then it has not finished*/
-          finished=false;
-          vector<int> tempBuf(buffers);
-          bool valid=true;
-          /*test if this node can fire, namely if it has all its input data ready on the inbound FIFOs; we are doing matrix multiplication
-            with a vector in a compressed form, if the resulting buffer only has non-negative elements, then it means this node can
-            fire*/
-          for(int j=0; j<tempBuf.size(); j++){
-            if(topologyMatrix[j].getSrc()==i){
-              tempBuf[j]+=topologyMatrix[j].getTokensProduced();
-            }else if(topologyMatrix[j].getDst()==i){
-              tempBuf[j]-=topologyMatrix[j].getTokensConsumed();
-              if(tempBuf[j]<0){
-                valid=false;
-                break;
-              }
-            }
-          }
-          if(valid){
-            /*fire this node*/
-            firingCount[i]++;
-            schedule.push_back(i);
-            for(int j=0; j<tempBuf.size(); j++)buffers[j]=tempBuf[j];
-          }
-        }
-      }
-  }while(!finished);
+/* 
+ * Compute a schedule according to numOfFiringRequired; 
+ * each time find a node which can fire and fire it; update the tokens on each FIFO,
+ * repeat this process until all the nodes have fired the required number of times, which means a complete schedule has finished
+ * As it is a function in the class SDFG, we could use all the data structures in SDFG,
+ * These may includes fifos, nodes, topologyMatrix
+ */
+vector<int> SDFG::makeSchedule(){
+  vector<int> vSchedule;
+  // TODO HERE!!!
+  
+  return vSchedule;
 }
 
 /*display schedule*/
--- a/SDF.h	Thu Apr 03 22:56:32 2014 +0000
+++ b/SDF.h	Fri Apr 04 21:31:22 2014 +0000
@@ -296,7 +296,7 @@
   bool hasSchedule();
   vector<int> getNumOfFiringRequired()const{return numOfFiringRequired;}
   void printNumOfFiringRequired()const;
-  void makeSchedule();
+  vector<int> makeSchedule();
   void printSchedule()const;
   void setInput(RingBuffer *data);
   void setOutput(RingBuffer *buf);
--- a/main.cpp	Thu Apr 03 22:56:32 2014 +0000
+++ b/main.cpp	Fri Apr 04 21:31:22 2014 +0000
@@ -19,7 +19,7 @@
 int cntr2 = 0;
 Mutex stdio_mutex; 
 
-const int SamplingRate = 100;//sampling rate
+//const int SamplingRate = 100;//sampling rate
 
 PwmOut led1(LED1);
 PwmOut led2(LED2);
@@ -33,7 +33,7 @@
     
     while(1)
     {
-        short temp;
+        int temp;
         scanf("%d",&temp);
         if (!temp)
         {
@@ -52,25 +52,6 @@
     }
 }
  
- 
-void monitor_thread(void const *args)
-{
-    PRINT0("Monitor thread started...\n\r");
-    RingBuffer* output= (RingBuffer*) args;
-    int checksum = 0, pw = 0;
-    for (int cntr=0;cntr<SAMPLES;cntr++)
-    {
-        while(cntr >= cntr2);
-        pw = output->buf[cntr];
-        checksum ^= pw;
-        PRINT3("cntr: %d\tout: %d\tcs: %08X\n\r", cntr, pw, checksum);
-    }
-    
-    
-}
-
-PwmOut myled(LED1);
-
 int main() {
     
     Thread controlThread(control_thread);
@@ -89,7 +70,7 @@
     PRINT0("Starting filtering...\n\r");
     
     int pw;
-    int cntr=0;
+    //int cntr=0;
     
     int checksum = 0;
     while (true) {
@@ -111,9 +92,11 @@
        }
        
        led1 = (float)input->buf[input->cur]/1000;
-       led4 = (float)pw/1000;       
+       led2 = (float)pw/1000;       
+       //PRINT1("LED1 = %d\r\n", input->cur);
+       //PRINT1("LED2 = %d\r\n", output->cur);
        wait(0.02);
     }
-    abc;
+    
 }