Dummy program to demonstrate problems: working code
Dependencies: SLCD mbed-rtos mbed
Fork of MNG_TC by
Diff: main.cpp
- Revision:
- 4:f95195748a0c
- Parent:
- 3:eec1097c0dd6
- Child:
- 5:a5a5300d7d49
--- a/main.cpp Wed Jun 24 05:59:14 2015 +0000 +++ b/main.cpp Wed Jun 24 12:04:43 2015 +0000 @@ -1,20 +1,22 @@ #include "mbed.h" -#include <bitset> -#include <iostream> -using namespace std; - +#define TIMEOUT_LIMIT 15 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{ - unsigned char *data = 0; TC_list *Head_node = NULL; int rx_state = 0; @@ -24,8 +26,15 @@ * 2 : interrupt handled, RX_RCV_TX running * 3 : RX_RCV_TC handled, MNG_TM_TC handled */ + + struct data_list *head_data; + data_list *data_node; } +unsigned int rx_bytes = 0; +Timer rx_timer; +struct data_list *rx_new_node; + #include "mbed.h" #include "crc.h" @@ -33,54 +42,65 @@ #include "MNG_TC.h" #include "COM_RCV_TC.h" -using namespace VAR_SPACE; +void callback() { + //~ store value + 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; + + rx_timer.stop(); + rx_timer.start(); + + ++rx_bytes; + VAR_SPACE::rx_state = 1; +} int main(){ - printf("WELCOME\r\n"); + ledr = 1; PC.baud(9600); - VAR_SPACE::data = new unsigned char[26]; - - data[0] = 0x7E; - data[1] = 0x01; - data[2] = 0x81; - data[3] = 0x88; - for(int i =4; i <=9; i++) - data[i] = 0x88; - data[10] = 0xc0; - data[11] = 0x79; - data[12] = 0x7E; - data[13] = 0x02; - data[14] = 0xA1; - data[15] = 0x88; - for(int i = 16;i <= 21; i++) - data[i] = 0x88; - data[22] = 0x96; - data[23] = 0x55; - data[24] = 0x7E; - data[25] = 0x7E; - - VAR_SPACE::rx_state = 2; + rx1m.baud(1200); + rx1m.attach(&callback); + VAR_SPACE::head_data = new data_list; + rx_new_node = VAR_SPACE::head_data; while(true){ ledg = !ledg; - if( VAR_SPACE::rx_state == 2 ){ - printf("Calling rcv_tc\r\n"); + if(VAR_SPACE::rx_state == 1){ + + if( rx_timer.read() > TIMEOUT_LIMIT ){ + //~ TIMEOUT REACHED MOVE ON TO RX_RCV_TC + VAR_SPACE::rx_state = 2; + } + + } + 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"); +// printf("calling mng tc\r\n"); 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; + } } - wait_ms(10); } }