Rtos code for BAE microcontroller, IITMSAT

Dependencies:   mbed-rtos mbed

Committer:
greenroshks
Date:
Mon Jun 23 10:01:37 2014 +0000
Revision:
0:f1f148215d00
Child:
1:5a364ac20fa4
This is the code for RTOS of BAE microcontroller, IITMSAT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
greenroshks 0:f1f148215d00 1 #include "mbed.h"
greenroshks 0:f1f148215d00 2 #include "rtos.h"
greenroshks 0:f1f148215d00 3
greenroshks 0:f1f148215d00 4 Serial pc(USBTX,USBRX);
greenroshks 0:f1f148215d00 5 Timer t;
greenroshks 0:f1f148215d00 6 Thread *t_acs;
greenroshks 0:f1f148215d00 7 Thread *t_bea;
greenroshks 0:f1f148215d00 8 Thread *t_hk_acq;
greenroshks 0:f1f148215d00 9 Thread *t_acs_write2flash;
greenroshks 0:f1f148215d00 10 Thread *t_hk_write2cdms;
greenroshks 0:f1f148215d00 11
greenroshks 0:f1f148215d00 12 int flag = 0; //for detecting keypress from computer
greenroshks 0:f1f148215d00 13
greenroshks 0:f1f148215d00 14
greenroshks 0:f1f148215d00 15 /*----------------------------------------------------------------------------------------------------------------------------------------------------
greenroshks 0:f1f148215d00 16 TASK 1:ACS
greenroshks 0:f1f148215d00 17 ----------------------------------------------------------------------------------------------------------------------------------------------------*/
greenroshks 0:f1f148215d00 18 typedef struct
greenroshks 0:f1f148215d00 19 {
greenroshks 0:f1f148215d00 20 int B;
greenroshks 0:f1f148215d00 21 int omega;
greenroshks 0:f1f148215d00 22 }sens_data;
greenroshks 0:f1f148215d00 23
greenroshks 0:f1f148215d00 24 Mail <sens_data,16> q_sensor;
greenroshks 0:f1f148215d00 25
greenroshks 0:f1f148215d00 26 void FUNC_ACS_READDATA(sens_data * s)
greenroshks 0:f1f148215d00 27 {
greenroshks 0:f1f148215d00 28 s->B=10;
greenroshks 0:f1f148215d00 29 s->omega=100;
greenroshks 0:f1f148215d00 30 pc.printf("\nReading sensor data\n");
greenroshks 0:f1f148215d00 31 }
greenroshks 0:f1f148215d00 32
greenroshks 0:f1f148215d00 33 void FUNC_ACS_CONTROLALGO(sens_data * s)
greenroshks 0:f1f148215d00 34 {
greenroshks 0:f1f148215d00 35 pc.printf("\nRunning control algo\n");
greenroshks 0:f1f148215d00 36 }
greenroshks 0:f1f148215d00 37
greenroshks 0:f1f148215d00 38 void FUNC_ACS_PWMGEN()
greenroshks 0:f1f148215d00 39 {
greenroshks 0:f1f148215d00 40 pc.printf("\nGenerating pwm signal\n");
greenroshks 0:f1f148215d00 41 }
greenroshks 0:f1f148215d00 42
greenroshks 0:f1f148215d00 43 void FUNC_ACS_WRITE2FLASH(sens_data *s1)
greenroshks 0:f1f148215d00 44 {
greenroshks 0:f1f148215d00 45 pc.printf("\nWritng ACS data to BAE flash\n");
greenroshks 0:f1f148215d00 46 pc.printf("\nB :%d",s1->B);
greenroshks 0:f1f148215d00 47 pc.printf("\nomega :%d",s1->omega);
greenroshks 0:f1f148215d00 48
greenroshks 0:f1f148215d00 49 }
greenroshks 0:f1f148215d00 50
greenroshks 0:f1f148215d00 51 void T_ACS(void const * args)
greenroshks 0:f1f148215d00 52 {
greenroshks 0:f1f148215d00 53 while(1)
greenroshks 0:f1f148215d00 54 {
greenroshks 0:f1f148215d00 55 Thread::signal_wait(0x1);
greenroshks 0:f1f148215d00 56 printf("\nACS :%fn",t.read());
greenroshks 0:f1f148215d00 57 printf("\nACS thread status is %d\n",t_acs->get_state());
greenroshks 0:f1f148215d00 58 printf("\nBeacon thread status :%d\n",t_bea->get_state());
greenroshks 0:f1f148215d00 59 printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state());
greenroshks 0:f1f148215d00 60 printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state());
greenroshks 0:f1f148215d00 61 printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state());
greenroshks 0:f1f148215d00 62
greenroshks 0:f1f148215d00 63 sens_data * s = q_sensor.alloc();
greenroshks 0:f1f148215d00 64 FUNC_ACS_READDATA(s);
greenroshks 0:f1f148215d00 65 q_sensor.put(s);
greenroshks 0:f1f148215d00 66 FUNC_ACS_CONTROLALGO(s);
greenroshks 0:f1f148215d00 67 FUNC_ACS_PWMGEN();
greenroshks 0:f1f148215d00 68 pc.printf("\nTorque rods actuated\n");
greenroshks 0:f1f148215d00 69 //Thread::wait(9899);
greenroshks 0:f1f148215d00 70 }
greenroshks 0:f1f148215d00 71 }
greenroshks 0:f1f148215d00 72
greenroshks 0:f1f148215d00 73 void T_ACS_WRITE2FLASH(void const * args)
greenroshks 0:f1f148215d00 74 {
greenroshks 0:f1f148215d00 75 while(1)
greenroshks 0:f1f148215d00 76 {
greenroshks 0:f1f148215d00 77
greenroshks 0:f1f148215d00 78 osEvent evt=q_sensor.get();
greenroshks 0:f1f148215d00 79 if(evt.status==osEventMail)
greenroshks 0:f1f148215d00 80 {
greenroshks 0:f1f148215d00 81 printf("\nACS thread status is %d\n",t_acs->get_state());
greenroshks 0:f1f148215d00 82 printf("\nBeacon thread status :%d\n",t_bea->get_state());
greenroshks 0:f1f148215d00 83 printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state());
greenroshks 0:f1f148215d00 84 printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state());
greenroshks 0:f1f148215d00 85 printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state());
greenroshks 0:f1f148215d00 86 sens_data *s1 =(sens_data *)evt.value.p;
greenroshks 0:f1f148215d00 87 FUNC_ACS_WRITE2FLASH(s1);
greenroshks 0:f1f148215d00 88 }
greenroshks 0:f1f148215d00 89 }
greenroshks 0:f1f148215d00 90 }
greenroshks 0:f1f148215d00 91
greenroshks 0:f1f148215d00 92 /*-----------------------------------------------------------------------------------------------------------------------------------------------------
greenroshks 0:f1f148215d00 93 TASK 2 : HK
greenroshks 0:f1f148215d00 94 ------------------------------------------------------------------------------------------------------------------------------------------------------*/
greenroshks 0:f1f148215d00 95 void FUNC_HK_MUX()
greenroshks 0:f1f148215d00 96 {
greenroshks 0:f1f148215d00 97 pc.printf("\nAcivating Mux\n");
greenroshks 0:f1f148215d00 98 }
greenroshks 0:f1f148215d00 99
greenroshks 0:f1f148215d00 100 void FUNC_HK_ADC()
greenroshks 0:f1f148215d00 101 {
greenroshks 0:f1f148215d00 102 pc.printf("\nActivating ADC\n");
greenroshks 0:f1f148215d00 103 }
greenroshks 0:f1f148215d00 104
greenroshks 0:f1f148215d00 105 void FUNC_HK_WRITE2FLASH()
greenroshks 0:f1f148215d00 106 {
greenroshks 0:f1f148215d00 107 pc.printf("\nWriting HK data to flash memory\n");
greenroshks 0:f1f148215d00 108 }
greenroshks 0:f1f148215d00 109
greenroshks 0:f1f148215d00 110 void FUNC_HK_READFLASH()
greenroshks 0:f1f148215d00 111 {
greenroshks 0:f1f148215d00 112 pc.printf("\nReading HK data from flash memeory\n");
greenroshks 0:f1f148215d00 113 }
greenroshks 0:f1f148215d00 114
greenroshks 0:f1f148215d00 115 void FUNC_HK_SEND2CDMS()
greenroshks 0:f1f148215d00 116 {
greenroshks 0:f1f148215d00 117 pc.printf("\nSending HK data to CDMS\n");
greenroshks 0:f1f148215d00 118 }
greenroshks 0:f1f148215d00 119
greenroshks 0:f1f148215d00 120 void T_HK_SEND2CDMS(void const * args)
greenroshks 0:f1f148215d00 121 {
greenroshks 0:f1f148215d00 122 while(1)
greenroshks 0:f1f148215d00 123 {
greenroshks 0:f1f148215d00 124 Thread::signal_wait(0x1);
greenroshks 0:f1f148215d00 125 printf("\nACS thread status is %d\n",t_acs->get_state());
greenroshks 0:f1f148215d00 126 printf("\nBeacon thread status :%d\n",t_bea->get_state());
greenroshks 0:f1f148215d00 127 printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state());
greenroshks 0:f1f148215d00 128 printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state());
greenroshks 0:f1f148215d00 129 printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state());
greenroshks 0:f1f148215d00 130 FUNC_HK_READFLASH();
greenroshks 0:f1f148215d00 131 FUNC_HK_SEND2CDMS();
greenroshks 0:f1f148215d00 132 }
greenroshks 0:f1f148215d00 133 }
greenroshks 0:f1f148215d00 134
greenroshks 0:f1f148215d00 135 void T_HK_ACQ(void const *args)
greenroshks 0:f1f148215d00 136 {
greenroshks 0:f1f148215d00 137 //t_hk_write2cdms = new Thread(T_HK_SEND2CDMS);
greenroshks 0:f1f148215d00 138 t_hk_write2cdms->set_priority(osPriorityLow);
greenroshks 0:f1f148215d00 139
greenroshks 0:f1f148215d00 140 while(1)
greenroshks 0:f1f148215d00 141 {
greenroshks 0:f1f148215d00 142 Thread::signal_wait(0x1);
greenroshks 0:f1f148215d00 143 printf("\n\nHK :%f\n",t.read());
greenroshks 0:f1f148215d00 144 printf("\nACS thread status is %d\n",t_acs->get_state());
greenroshks 0:f1f148215d00 145 printf("\nBeacon thread status :%d\n",t_bea->get_state());
greenroshks 0:f1f148215d00 146 printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state());
greenroshks 0:f1f148215d00 147 printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state());
greenroshks 0:f1f148215d00 148 printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state());
greenroshks 0:f1f148215d00 149
greenroshks 0:f1f148215d00 150 FUNC_HK_MUX();
greenroshks 0:f1f148215d00 151 FUNC_HK_ADC();
greenroshks 0:f1f148215d00 152 FUNC_HK_WRITE2FLASH();
greenroshks 0:f1f148215d00 153 t_hk_write2cdms->signal_set(0x1);
greenroshks 0:f1f148215d00 154 //Thread::wait(19925);
greenroshks 0:f1f148215d00 155
greenroshks 0:f1f148215d00 156 }
greenroshks 0:f1f148215d00 157 }
greenroshks 0:f1f148215d00 158
greenroshks 0:f1f148215d00 159 /*--------------------------------------------------------------------------------------------------------------------------------------------------
greenroshks 0:f1f148215d00 160 TASK 4 : BEACON
greenroshks 0:f1f148215d00 161 -----------------------------------------------------------------------------------------------------------------------------------------------------*/
greenroshks 0:f1f148215d00 162 void FUNC_BEA_READBAEFLASH()
greenroshks 0:f1f148215d00 163 {
greenroshks 0:f1f148215d00 164 pc.printf("\nReading HK data from BAE flash\n");
greenroshks 0:f1f148215d00 165 }
greenroshks 0:f1f148215d00 166
greenroshks 0:f1f148215d00 167 void FUNC_BEA_WRITE2SPI()
greenroshks 0:f1f148215d00 168 {
greenroshks 0:f1f148215d00 169 pc.printf("\nSending data through SPI\n");
greenroshks 0:f1f148215d00 170 }
greenroshks 0:f1f148215d00 171
greenroshks 0:f1f148215d00 172
greenroshks 0:f1f148215d00 173 void T_BEA(void const * args)
greenroshks 0:f1f148215d00 174 {
greenroshks 0:f1f148215d00 175 while(1)
greenroshks 0:f1f148215d00 176 {
greenroshks 0:f1f148215d00 177 Thread::signal_wait(0x1);
greenroshks 0:f1f148215d00 178 pc.printf("\nBEACON :%f\n",t.read());
greenroshks 0:f1f148215d00 179 printf("\nACS thread status is %d\n",t_acs->get_state());
greenroshks 0:f1f148215d00 180 printf("\nBeacon thread status :%d\n",t_bea->get_state());
greenroshks 0:f1f148215d00 181 printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state());
greenroshks 0:f1f148215d00 182 printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state());
greenroshks 0:f1f148215d00 183 printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state());
greenroshks 0:f1f148215d00 184
greenroshks 0:f1f148215d00 185 if(flag==0)
greenroshks 0:f1f148215d00 186 {
greenroshks 0:f1f148215d00 187
greenroshks 0:f1f148215d00 188 FUNC_BEA_READBAEFLASH();
greenroshks 0:f1f148215d00 189 FUNC_BEA_WRITE2SPI();
greenroshks 0:f1f148215d00 190 //Thread::wait(30000);
greenroshks 0:f1f148215d00 191 }
greenroshks 0:f1f148215d00 192 else
greenroshks 0:f1f148215d00 193 {
greenroshks 0:f1f148215d00 194 //led=1;
greenroshks 0:f1f148215d00 195 Thread::wait(60000);
greenroshks 0:f1f148215d00 196
greenroshks 0:f1f148215d00 197 flag=0;
greenroshks 0:f1f148215d00 198 //myled=0;
greenroshks 0:f1f148215d00 199 }
greenroshks 0:f1f148215d00 200
greenroshks 0:f1f148215d00 201 }
greenroshks 0:f1f148215d00 202 }
greenroshks 0:f1f148215d00 203
greenroshks 0:f1f148215d00 204 void keypress(void const *args)
greenroshks 0:f1f148215d00 205 {
greenroshks 0:f1f148215d00 206
greenroshks 0:f1f148215d00 207 while(1)
greenroshks 0:f1f148215d00 208 {
greenroshks 0:f1f148215d00 209 if(pc.getc()=='s')
greenroshks 0:f1f148215d00 210 {
greenroshks 0:f1f148215d00 211 pc.printf("\nTime of telecommand %f",t.read());
greenroshks 0:f1f148215d00 212 flag=1;
greenroshks 0:f1f148215d00 213 }
greenroshks 0:f1f148215d00 214 }
greenroshks 0:f1f148215d00 215 }
greenroshks 0:f1f148215d00 216
greenroshks 0:f1f148215d00 217
greenroshks 0:f1f148215d00 218 /*-----------------------------------------------------------------------------------------------------------------------------------------------------
greenroshks 0:f1f148215d00 219 MAIN
greenroshks 0:f1f148215d00 220 -----------------------------------------------------------------------------------------------------------------------------------------------------*/
greenroshks 0:f1f148215d00 221 int main()
greenroshks 0:f1f148215d00 222 {
greenroshks 0:f1f148215d00 223 t.start();
greenroshks 0:f1f148215d00 224 int i =0;
greenroshks 0:f1f148215d00 225 t_acs = new Thread(T_ACS);
greenroshks 0:f1f148215d00 226 t_bea = new Thread(T_BEA);
greenroshks 0:f1f148215d00 227 t_hk_acq = new Thread(T_HK_ACQ);
greenroshks 0:f1f148215d00 228 t_acs_write2flash = new Thread(T_ACS_WRITE2FLASH);
greenroshks 0:f1f148215d00 229 Thread key(keypress);
greenroshks 0:f1f148215d00 230 pc.printf("\n\nHello world\n");
greenroshks 0:f1f148215d00 231 t_hk_write2cdms = new Thread(T_HK_SEND2CDMS);
greenroshks 0:f1f148215d00 232
greenroshks 0:f1f148215d00 233 //
greenroshks 0:f1f148215d00 234 pc.printf("\nHello universe\n");
greenroshks 0:f1f148215d00 235
greenroshks 0:f1f148215d00 236 t_acs->set_priority(osPriorityHigh);
greenroshks 0:f1f148215d00 237 t_bea->set_priority(osPriorityAboveNormal);
greenroshks 0:f1f148215d00 238 t_hk_acq->set_priority(osPriorityNormal);
greenroshks 0:f1f148215d00 239 t_acs_write2flash->set_priority(osPriorityBelowNormal);
greenroshks 0:f1f148215d00 240 // t_hk_write2cdms->set_priority(osPriorityLow);
greenroshks 0:f1f148215d00 241 key.set_priority(osPriorityIdle);
greenroshks 0:f1f148215d00 242
greenroshks 0:f1f148215d00 243 while(1)
greenroshks 0:f1f148215d00 244 {
greenroshks 0:f1f148215d00 245 if(i%10==0)
greenroshks 0:f1f148215d00 246 {
greenroshks 0:f1f148215d00 247 t_acs->signal_set(0x1);
greenroshks 0:f1f148215d00 248 pc.printf("Priority of t_hk_write2cdms is %d and t_acs_write2flash is %d",t_hk_write2cdms->get_priority(),t_acs_write2flash->get_priority());
greenroshks 0:f1f148215d00 249 }
greenroshks 0:f1f148215d00 250 if(i%20==0)
greenroshks 0:f1f148215d00 251 t_hk_acq->signal_set(0x1);
greenroshks 0:f1f148215d00 252 if(i%30==0)
greenroshks 0:f1f148215d00 253 t_bea->signal_set(0x1);
greenroshks 0:f1f148215d00 254 Thread::wait(991);
greenroshks 0:f1f148215d00 255 pc.printf("\n%f\n",t.read());
greenroshks 0:f1f148215d00 256 i++;
greenroshks 0:f1f148215d00 257 }
greenroshks 0:f1f148215d00 258 }