HW

Dependencies:   TextLCD mbed-rtos mbed

Fork of rtos_semaphore by mbed official

Committer:
timtianyang
Date:
Tue Sep 22 04:43:11 2015 +0000
Revision:
4:88b20795ea60
Parent:
1:bdf73f017a77
init upload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
timtianyang 4:88b20795ea60 1 // Hello World! for the TextLCD
timtianyang 4:88b20795ea60 2
emilmont 1:bdf73f017a77 3 #include "mbed.h"
timtianyang 4:88b20795ea60 4 #include "Display.h"
emilmont 1:bdf73f017a77 5 #include "rtos.h"
emilmont 1:bdf73f017a77 6
timtianyang 4:88b20795ea60 7 #define N 5
timtianyang 4:88b20795ea60 8 #define LEFT (i+N-1)%N
timtianyang 4:88b20795ea60 9 #define RIGHT (i+1)%N
timtianyang 4:88b20795ea60 10 #define THINKING 0
timtianyang 4:88b20795ea60 11 #define HUNGRY 0
timtianyang 4:88b20795ea60 12 #define EATING 2
timtianyang 4:88b20795ea60 13 int state[N];
timtianyang 4:88b20795ea60 14 Semaphore mutex(1);
timtianyang 4:88b20795ea60 15 Semaphore* s[N];
timtianyang 4:88b20795ea60 16
timtianyang 4:88b20795ea60 17 void take_forks(int i);
timtianyang 4:88b20795ea60 18 void philosopher_thread(void const* arg);
timtianyang 4:88b20795ea60 19 void put_forks(int i);
timtianyang 4:88b20795ea60 20 void test(int i);
emilmont 1:bdf73f017a77 21
timtianyang 4:88b20795ea60 22 void eat(){
timtianyang 4:88b20795ea60 23 srand(time(NULL));
timtianyang 4:88b20795ea60 24 int r = rand()%3+2;
timtianyang 4:88b20795ea60 25 Thread::wait(r*1000);
timtianyang 4:88b20795ea60 26 }
timtianyang 4:88b20795ea60 27 void think(){
timtianyang 4:88b20795ea60 28 srand(time(NULL));
timtianyang 4:88b20795ea60 29 int r = rand()%3+3;
timtianyang 4:88b20795ea60 30 Thread::wait(r*1000);
timtianyang 4:88b20795ea60 31 }
timtianyang 4:88b20795ea60 32
timtianyang 4:88b20795ea60 33 void philosopher_thread(void const* arg){
timtianyang 4:88b20795ea60 34 int i=*((int *)arg);
timtianyang 4:88b20795ea60 35 while(1){
timtianyang 4:88b20795ea60 36 think();
timtianyang 4:88b20795ea60 37 take_forks(i);
timtianyang 4:88b20795ea60 38 eat();
timtianyang 4:88b20795ea60 39 put_forks(i);
emilmont 1:bdf73f017a77 40 }
emilmont 1:bdf73f017a77 41 }
emilmont 1:bdf73f017a77 42
timtianyang 4:88b20795ea60 43 void take_forks(int i){
timtianyang 4:88b20795ea60 44
timtianyang 4:88b20795ea60 45 }
timtianyang 4:88b20795ea60 46 void put_forks(int i){
timtianyang 4:88b20795ea60 47
timtianyang 4:88b20795ea60 48 }
timtianyang 4:88b20795ea60 49 void test(int i){
timtianyang 4:88b20795ea60 50
timtianyang 4:88b20795ea60 51 }
timtianyang 4:88b20795ea60 52 int main() {
timtianyang 4:88b20795ea60 53
timtianyang 4:88b20795ea60 54 Display lcd;
timtianyang 4:88b20795ea60 55 for(int i=0;i<N;i++){
timtianyang 4:88b20795ea60 56 s[i]= new Semaphore(0);
timtianyang 4:88b20795ea60 57 }
timtianyang 4:88b20795ea60 58
emilmont 1:bdf73f017a77 59
timtianyang 4:88b20795ea60 60 int a=1;
timtianyang 4:88b20795ea60 61 int b=2;
timtianyang 4:88b20795ea60 62 int c=3;
timtianyang 4:88b20795ea60 63 int d=4;
timtianyang 4:88b20795ea60 64 int e=5;
timtianyang 4:88b20795ea60 65
timtianyang 4:88b20795ea60 66 Thread t1(philosopher_thread, (void *)&a);
timtianyang 4:88b20795ea60 67 Thread t2(philosopher_thread, (void *)&b);
timtianyang 4:88b20795ea60 68 Thread t3(philosopher_thread, (void *)&c);
timtianyang 4:88b20795ea60 69 Thread t4(philosopher_thread, (void *)&d);
timtianyang 4:88b20795ea60 70 Thread t5(philosopher_thread, (void *)&e);
timtianyang 4:88b20795ea60 71
timtianyang 4:88b20795ea60 72
timtianyang 4:88b20795ea60 73
timtianyang 4:88b20795ea60 74 int i=0;
timtianyang 4:88b20795ea60 75 while(1){
timtianyang 4:88b20795ea60 76 lcd.LCDEat(i);
timtianyang 4:88b20795ea60 77 if(i>0){
timtianyang 4:88b20795ea60 78 lcd.LCDDoneEating(i-1);
timtianyang 4:88b20795ea60 79 }
timtianyang 4:88b20795ea60 80 else{lcd.LCDDoneEating(4);}
timtianyang 4:88b20795ea60 81 i++;
timtianyang 4:88b20795ea60 82 if(i==5){i=0;}
timtianyang 4:88b20795ea60 83 wait(1);
timtianyang 4:88b20795ea60 84 }
timtianyang 4:88b20795ea60 85
emilmont 1:bdf73f017a77 86 }