green rosh
/
RTOS_BAE_IITMSAT
Rtos code for BAE microcontroller, IITMSAT
main.cpp@0:f1f148215d00, 2014-06-23 (annotated)
- 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?
User | Revision | Line number | New 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 | } |