Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
main.cpp
- Committer:
- shreeshas95
- Date:
- 2015-07-06
- Revision:
- 7:e71ecfe3a340
- Parent:
- 6:6e9ae3b44e60
- Child:
- 8:cb93c1d3209a
File content as of revision 7:e71ecfe3a340:
#include "mbed.h" #include "rtos.h" #define ENDL "\r" << endl #include "SLCD.h" SLCD lcd; #define TIMEOUT_LIMIT 1 #define MAX_NUM_LIST 4 Serial PC(USBTX, USBRX); Serial rx1m(PTE0, PTE1); DigitalOut ledr(LED_RED); DigitalOut ledg(LED_GREEN); #include "Structures.h" struct data_list{ char val; struct data_list* next; }; namespace VAR_SPACE{ TC_list *Head_node1; TC_list *Head_node2; bool rx_emergency = false; /* * 0 : idle * 1 : RCV_TC running * 2 : RCV_TC handled, MNG_TM_TC running */ struct data_list *head_data; struct data_list *data_node; struct data_list *rx_new_node; Thread *Com_mng_tc_thread; } Timer rx_timer; bool data_received = false; #include "mbed.h" #include "crc.h" #include "COM_RCV_TC.h" #include "SND_TM.h" #include "MNG_TC.h" void rx_read(){ //~ store value VAR_SPACE::rx_new_node->val = rx1m.getc(); //~ allocate new node VAR_SPACE::rx_new_node->next = new struct data_list; VAR_SPACE::rx_new_node = VAR_SPACE::rx_new_node->next; VAR_SPACE::rx_new_node->next = NULL; rx_timer.reset(); data_received = true; } int main(){ printf("welcome to mng_tm_tc\r\n"); ledr = 1; PC.baud(9600); // rx stuff rx1m.baud(1200); rx1m.attach(&rx_read); VAR_SPACE::head_data = new data_list; VAR_SPACE::rx_new_node = VAR_SPACE::head_data; VAR_SPACE::rx_new_node->next = NULL; while(true){ if(data_received && ( rx_timer.read() >= TIMEOUT_LIMIT ) ){ if( (VAR_SPACE::Com_mng_tc_thread->get_state() == Thread::Inactive) || (VAR_SPACE::Com_mng_tc_thread->get_state() == Thread::WaitingDelay) ){ // inactive or osWaitForever delete VAR_SPACE::Com_mng_tc_thread; VAR_SPACE::Com_mng_tc_thread = new Thread( MNG_MAIN ); } else{ VAR_SPACE::rx_emergency = true; RCV_TC RcvClass( VAR_SPACE::Head_node2 ); MNG_TC manager2( VAR_SPACE::Head_node2 ); manager2.update_valid_TC(); manager2.decode_TC(); manager2.execute_urgent(); VAR_SPACE::rx_emergency = false; } } ledg = !ledg; Thread::wait(1000); } }