Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
Diff: main.cpp
- Revision:
- 7:e71ecfe3a340
- Parent:
- 6:6e9ae3b44e60
- Child:
- 8:cb93c1d3209a
--- a/main.cpp Sat Jul 04 13:22:07 2015 +0000 +++ b/main.cpp Mon Jul 06 05:00:29 2015 +0000 @@ -1,10 +1,12 @@ #include "mbed.h" +#include "rtos.h" #define ENDL "\r" << endl #include "SLCD.h" SLCD lcd; -#define TIMEOUT_LIMIT 15 +#define TIMEOUT_LIMIT 1 +#define MAX_NUM_LIST 4 Serial PC(USBTX, USBRX); Serial rx1m(PTE0, PTE1); @@ -21,127 +23,83 @@ namespace VAR_SPACE{ - TC_list *Head_node = NULL; + TC_list *Head_node1; + TC_list *Head_node2; - int rx_state = 0; + bool rx_emergency = false; + /* * 0 : idle - * 1 : Rx interrupt received, saving data - * 2 : interrupt handled, RX_RCV_TX running - * 3 : RX_RCV_TC handled, MNG_TM_TC handled + * 1 : RCV_TC running + * 2 : RCV_TC handled, MNG_TM_TC running */ struct data_list *head_data; - data_list *data_node; - - unsigned char *data; + struct data_list *data_node; + struct data_list *rx_new_node; + + Thread *Com_mng_tc_thread; } -unsigned int rx_bytes = 0; Timer rx_timer; -struct data_list *rx_new_node; +bool data_received = false; #include "mbed.h" - #include "crc.h" +#include "COM_RCV_TC.h" #include "SND_TM.h" #include "MNG_TC.h" -#include "COM_RCV_TC.h" -void callback() { +void rx_read(){ //~ store value - rx_new_node->val = rx1m.getc(); + VAR_SPACE::rx_new_node->val = rx1m.getc(); //~ allocate new node - rx_new_node->next = new data_list; - rx_new_node = rx_new_node->next; - rx_new_node->next = NULL; + 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.stop(); - rx_timer.start(); - - ++rx_bytes; - VAR_SPACE::rx_state = 1; + rx_timer.reset(); + data_received = true; } -using namespace VAR_SPACE; - int main(){ printf("welcome to mng_tm_tc\r\n"); ledr = 1; PC.baud(9600); + // rx stuff rx1m.baud(1200); - rx1m.attach(&callback); + rx1m.attach(&rx_read); VAR_SPACE::head_data = new data_list; - rx_new_node = VAR_SPACE::head_data; - - lcd.printf("0"); - - data = new unsigned char [15]; - data[0] = 0x7e; - data[1] = 0x01; - data[2] = 0xa1; - data[3] = 0x61; - data[4] = 0x01; - data[5] = 0x02; - data[6] = 0xef; - data[7] = 0x96; - data[8] = 0x80; - data[9] = 0x00; - data[10] = 0x4b; - data[11] = 0xee; - data[12] = 0x9f; - data[13] = 0x9f; - data[14] = 0x80; - - VAR_SPACE::rx_state = 2; + VAR_SPACE::rx_new_node = VAR_SPACE::head_data; + VAR_SPACE::rx_new_node->next = NULL; while(true){ - ledg = !ledg; - if(VAR_SPACE::rx_state == 1){ - lcd.printf("01"); - - if( rx_timer.read() > TIMEOUT_LIMIT ){ - //~ TIMEOUT REACHED MOVE ON TO RX_RCV_TC - VAR_SPACE::rx_state = 2; - lcd.printf("012"); - printf("received %u bytes\r\n", rx_bytes); + 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; - rx_new_node = VAR_SPACE::head_data; - for(int i = 0 ; i < rx_bytes ; ++i){ - printf("%02x ", rx_new_node->val); - rx_new_node = rx_new_node->next; - } + 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; } - } - else if( VAR_SPACE::rx_state == 2 ){ - printf("Calling rcv_tc\r\n"); - VAR_SPACE::data_node = VAR_SPACE::head_data; - RCV_TC::RX_RCV_TC(); - VAR_SPACE::rx_state = 3; - - } - else if( VAR_SPACE::rx_state == 3 ){ - - printf("calling mng tc\r\n"); - lcd.printf("0123"); - MNG_TC::init( VAR_SPACE::Head_node ); - MNG_TC::start_with(); - - VAR_SPACE::rx_state = 0; - - //~ delete linked list - rx_new_node = VAR_SPACE::head_data; - while(rx_new_node != NULL){ - data_list *temp = rx_new_node; - rx_new_node = rx_new_node->next; - delete temp; - } - printf("successfully sent data\r\n"); - } + + ledg = !ledg; + Thread::wait(1000); } -} +} \ No newline at end of file