green rosh
/
RTOS_BAE_IITMSAT
Rtos code for BAE microcontroller, IITMSAT
Diff: main.cpp
- Revision:
- 0:f1f148215d00
- Child:
- 1:5a364ac20fa4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jun 23 10:01:37 2014 +0000 @@ -0,0 +1,258 @@ +#include "mbed.h" +#include "rtos.h" + +Serial pc(USBTX,USBRX); +Timer t; +Thread *t_acs; +Thread *t_bea; +Thread *t_hk_acq; +Thread *t_acs_write2flash; +Thread *t_hk_write2cdms; + +int flag = 0; //for detecting keypress from computer + + +/*---------------------------------------------------------------------------------------------------------------------------------------------------- + TASK 1:ACS +----------------------------------------------------------------------------------------------------------------------------------------------------*/ +typedef struct +{ + int B; + int omega; +}sens_data; + +Mail <sens_data,16> q_sensor; + +void FUNC_ACS_READDATA(sens_data * s) +{ + s->B=10; + s->omega=100; + pc.printf("\nReading sensor data\n"); +} + +void FUNC_ACS_CONTROLALGO(sens_data * s) +{ + pc.printf("\nRunning control algo\n"); +} + +void FUNC_ACS_PWMGEN() +{ + pc.printf("\nGenerating pwm signal\n"); +} + +void FUNC_ACS_WRITE2FLASH(sens_data *s1) +{ + pc.printf("\nWritng ACS data to BAE flash\n"); + pc.printf("\nB :%d",s1->B); + pc.printf("\nomega :%d",s1->omega); + +} + +void T_ACS(void const * args) +{ + while(1) + { + Thread::signal_wait(0x1); + printf("\nACS :%fn",t.read()); + printf("\nACS thread status is %d\n",t_acs->get_state()); + printf("\nBeacon thread status :%d\n",t_bea->get_state()); + printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state()); + printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state()); + printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state()); + + sens_data * s = q_sensor.alloc(); + FUNC_ACS_READDATA(s); + q_sensor.put(s); + FUNC_ACS_CONTROLALGO(s); + FUNC_ACS_PWMGEN(); + pc.printf("\nTorque rods actuated\n"); + //Thread::wait(9899); + } +} + +void T_ACS_WRITE2FLASH(void const * args) +{ + while(1) + { + + osEvent evt=q_sensor.get(); + if(evt.status==osEventMail) + { + printf("\nACS thread status is %d\n",t_acs->get_state()); + printf("\nBeacon thread status :%d\n",t_bea->get_state()); + printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state()); + printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state()); + printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state()); + sens_data *s1 =(sens_data *)evt.value.p; + FUNC_ACS_WRITE2FLASH(s1); + } + } +} + +/*----------------------------------------------------------------------------------------------------------------------------------------------------- + TASK 2 : HK +------------------------------------------------------------------------------------------------------------------------------------------------------*/ +void FUNC_HK_MUX() +{ + pc.printf("\nAcivating Mux\n"); +} + +void FUNC_HK_ADC() +{ + pc.printf("\nActivating ADC\n"); +} + +void FUNC_HK_WRITE2FLASH() +{ + pc.printf("\nWriting HK data to flash memory\n"); +} + +void FUNC_HK_READFLASH() +{ + pc.printf("\nReading HK data from flash memeory\n"); +} + +void FUNC_HK_SEND2CDMS() +{ + pc.printf("\nSending HK data to CDMS\n"); +} + +void T_HK_SEND2CDMS(void const * args) +{ + while(1) + { + Thread::signal_wait(0x1); + printf("\nACS thread status is %d\n",t_acs->get_state()); + printf("\nBeacon thread status :%d\n",t_bea->get_state()); + printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state()); + printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state()); + printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state()); + FUNC_HK_READFLASH(); + FUNC_HK_SEND2CDMS(); + } +} + +void T_HK_ACQ(void const *args) +{ + //t_hk_write2cdms = new Thread(T_HK_SEND2CDMS); + t_hk_write2cdms->set_priority(osPriorityLow); + + while(1) + { + Thread::signal_wait(0x1); + printf("\n\nHK :%f\n",t.read()); + printf("\nACS thread status is %d\n",t_acs->get_state()); + printf("\nBeacon thread status :%d\n",t_bea->get_state()); + printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state()); + printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state()); + printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state()); + + FUNC_HK_MUX(); + FUNC_HK_ADC(); + FUNC_HK_WRITE2FLASH(); + t_hk_write2cdms->signal_set(0x1); + //Thread::wait(19925); + + } +} + +/*-------------------------------------------------------------------------------------------------------------------------------------------------- + TASK 4 : BEACON +-----------------------------------------------------------------------------------------------------------------------------------------------------*/ +void FUNC_BEA_READBAEFLASH() +{ + pc.printf("\nReading HK data from BAE flash\n"); +} + +void FUNC_BEA_WRITE2SPI() +{ + pc.printf("\nSending data through SPI\n"); +} + + +void T_BEA(void const * args) +{ + while(1) + { + Thread::signal_wait(0x1); + pc.printf("\nBEACON :%f\n",t.read()); + printf("\nACS thread status is %d\n",t_acs->get_state()); + printf("\nBeacon thread status :%d\n",t_bea->get_state()); + printf("\nACS_WRITE2FLASH thread status is %d\n",t_acs_write2flash->get_state()); + printf("\nHK_ACQ thread status is %d\n",t_hk_acq->get_state()); + printf("\nHK_WRITE2CDMS thread status is %d\n",t_hk_write2cdms->get_state()); + + if(flag==0) + { + + FUNC_BEA_READBAEFLASH(); + FUNC_BEA_WRITE2SPI(); + //Thread::wait(30000); + } + else + { + //led=1; + Thread::wait(60000); + + flag=0; + //myled=0; + } + + } +} + +void keypress(void const *args) +{ + + while(1) + { + if(pc.getc()=='s') + { + pc.printf("\nTime of telecommand %f",t.read()); + flag=1; + } + } +} + + +/*----------------------------------------------------------------------------------------------------------------------------------------------------- + MAIN +-----------------------------------------------------------------------------------------------------------------------------------------------------*/ +int main() +{ + t.start(); + int i =0; + t_acs = new Thread(T_ACS); + t_bea = new Thread(T_BEA); + t_hk_acq = new Thread(T_HK_ACQ); + t_acs_write2flash = new Thread(T_ACS_WRITE2FLASH); + Thread key(keypress); + pc.printf("\n\nHello world\n"); + t_hk_write2cdms = new Thread(T_HK_SEND2CDMS); + + // + pc.printf("\nHello universe\n"); + + t_acs->set_priority(osPriorityHigh); + t_bea->set_priority(osPriorityAboveNormal); + t_hk_acq->set_priority(osPriorityNormal); + t_acs_write2flash->set_priority(osPriorityBelowNormal); + // t_hk_write2cdms->set_priority(osPriorityLow); + key.set_priority(osPriorityIdle); + + while(1) + { + if(i%10==0) + { + t_acs->signal_set(0x1); + 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()); + } + if(i%20==0) + t_hk_acq->signal_set(0x1); + if(i%30==0) + t_bea->signal_set(0x1); + Thread::wait(991); + pc.printf("\n%f\n",t.read()); + i++; + } +} \ No newline at end of file