Leon Wehmeier / Mbed OS fiasco_max32630

Dependencies:   SoftSerial MAX14690 Buffer

Fork of rtos_threading_with_callback by mbed_example

Committer:
lwehmeier
Date:
Fri Mar 30 10:32:10 2018 +0000
Revision:
3:d7ec6dc025b0
Parent:
2:bf699e054b34
implemented basic GPS read support, freed serial connection for uart jpg camera module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mab5449 0:d4b2a035ffe3 1 #include "mbed.h"
lwehmeier 2:bf699e054b34 2 #include "rtos.h"
lwehmeier 2:bf699e054b34 3 #include "global.h"
lwehmeier 2:bf699e054b34 4 #include "linkLayer.h"
lwehmeier 2:bf699e054b34 5 #include "txQueue.h"
lwehmeier 2:bf699e054b34 6
lwehmeier 2:bf699e054b34 7 #include "max32630fthr.h"
lwehmeier 2:bf699e054b34 8 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
lwehmeier 2:bf699e054b34 9
lwehmeier 2:bf699e054b34 10
lwehmeier 3:d7ec6dc025b0 11 #include "platform/mbed_assert.h"
lwehmeier 3:d7ec6dc025b0 12 #include "platform/mbed_debug.h"
lwehmeier 3:d7ec6dc025b0 13 #include "platform/mbed_error.h"
lwehmeier 3:d7ec6dc025b0 14 #include "platform/mbed_stats.h"
lwehmeier 3:d7ec6dc025b0 15 #define MAX_THREAD_INFO 10
lwehmeier 3:d7ec6dc025b0 16 mbed_stats_heap_t heap_info;
lwehmeier 3:d7ec6dc025b0 17 mbed_stats_stack_t stack_info[ MAX_THREAD_INFO ];
lwehmeier 3:d7ec6dc025b0 18
lwehmeier 3:d7ec6dc025b0 19
lwehmeier 2:bf699e054b34 20 SPI spi(P5_1, P5_2, P5_0);
lwehmeier 2:bf699e054b34 21 I2C i2c(P5_7, P6_0); //sda, scl
lwehmeier 2:bf699e054b34 22 I2C i2c2(P3_4, P3_5); //sda, scl
mab5449 0:d4b2a035ffe3 23
lwehmeier 2:bf699e054b34 24 TxQueue txQueue;
lwehmeier 2:bf699e054b34 25 LinkLayerEncoder linkEnc;
lwehmeier 2:bf699e054b34 26
lwehmeier 2:bf699e054b34 27 Thread registeredThreads[15];
lwehmeier 2:bf699e054b34 28 threadFunc_t registeredThreadFunctions[15];
lwehmeier 2:bf699e054b34 29 unsigned numRegisteredThreads=0;
lwehmeier 2:bf699e054b34 30 Thread thread_txRF(osPriorityHigh);
lwehmeier 2:bf699e054b34 31
lwehmeier 2:bf699e054b34 32
lwehmeier 2:bf699e054b34 33 float temperature, pressure, altitude, humidity;
lwehmeier 2:bf699e054b34 34 float acc1[3];
lwehmeier 2:bf699e054b34 35 float acc2[3];
lwehmeier 2:bf699e054b34 36 float gyro1[3], gyro2[3];
mab5449 0:d4b2a035ffe3 37
lwehmeier 2:bf699e054b34 38 bool registerThread(threadFunc_t f)
lwehmeier 2:bf699e054b34 39 {
lwehmeier 2:bf699e054b34 40 if(numRegisteredThreads >= 14)
lwehmeier 2:bf699e054b34 41 {
lwehmeier 2:bf699e054b34 42 printf("ERROR: Max registerable threads reached\r\n");
lwehmeier 2:bf699e054b34 43 return false;
lwehmeier 2:bf699e054b34 44 }
lwehmeier 2:bf699e054b34 45 registeredThreadFunctions[numRegisteredThreads++]=f;
lwehmeier 2:bf699e054b34 46 printf("registered function\r\n");
lwehmeier 2:bf699e054b34 47 return true;
lwehmeier 2:bf699e054b34 48 }
lwehmeier 2:bf699e054b34 49 void setupTx()
lwehmeier 2:bf699e054b34 50 {
lwehmeier 2:bf699e054b34 51 spi.frequency(1000);//1kbps
lwehmeier 2:bf699e054b34 52 }
lwehmeier 2:bf699e054b34 53 void txData() //TODO: evaluate callback async
lwehmeier 2:bf699e054b34 54 {
lwehmeier 2:bf699e054b34 55 spi.lock();
lwehmeier 2:bf699e054b34 56 while(1)
lwehmeier 2:bf699e054b34 57 {
lwehmeier 2:bf699e054b34 58 uint8_t txBuf[8]={0,0,0,0,0,0,0,0};
lwehmeier 2:bf699e054b34 59 for(unsigned i = 0; i < 8; i++)
lwehmeier 2:bf699e054b34 60 for(unsigned j=0; j<8;j++)
lwehmeier 2:bf699e054b34 61 {
lwehmeier 2:bf699e054b34 62 txBuf[i]|=(linkEnc.getNext()<<j);
lwehmeier 2:bf699e054b34 63 }
lwehmeier 3:d7ec6dc025b0 64 //printf("0x%02x%02x%02x%02x%02x%02x%02x%02x\r\n", txBuf[0], txBuf[1], txBuf[2], txBuf[3], txBuf[4], txBuf[5], txBuf[6], txBuf[7]);
lwehmeier 2:bf699e054b34 65 spi.write((char*)txBuf, 8, (char*)0, 0);
mab5449 0:d4b2a035ffe3 66 }
mab5449 0:d4b2a035ffe3 67 }
mab5449 0:d4b2a035ffe3 68 int main() {
lwehmeier 3:d7ec6dc025b0 69 set_time(0);
lwehmeier 2:bf699e054b34 70 setupTx();
lwehmeier 2:bf699e054b34 71 thread_txRF.start(txData);
lwehmeier 2:bf699e054b34 72
lwehmeier 2:bf699e054b34 73 for(int i=0; i<numRegisteredThreads; i++)
lwehmeier 2:bf699e054b34 74 {
lwehmeier 2:bf699e054b34 75 registeredThreads[i].set_priority(osPriorityBelowNormal);
lwehmeier 2:bf699e054b34 76 registeredThreads[i].start(registeredThreadFunctions[i]);
lwehmeier 2:bf699e054b34 77 }
lwehmeier 2:bf699e054b34 78 printf("MAIN: started %u registered application threads\r\n", numRegisteredThreads);
lwehmeier 2:bf699e054b34 79
lwehmeier 2:bf699e054b34 80 while(1)
lwehmeier 3:d7ec6dc025b0 81 {/*
lwehmeier 3:d7ec6dc025b0 82 printf("\r\nRuntimeStats:");
lwehmeier 3:d7ec6dc025b0 83 printf("\r\n\tSystem uptime in s: %d", time(NULL));
lwehmeier 3:d7ec6dc025b0 84 printf("\r\nMemoryStats:");
lwehmeier 3:d7ec6dc025b0 85 mbed_stats_heap_get( &heap_info );
lwehmeier 3:d7ec6dc025b0 86 printf("\r\n\tBytes allocated currently: %d", heap_info.current_size);
lwehmeier 3:d7ec6dc025b0 87 printf("\r\n\tMax bytes allocated at a given time: %d", heap_info.max_size);
lwehmeier 3:d7ec6dc025b0 88 printf("\r\n\tCumulative sum of bytes ever allocated: %d", heap_info.total_size);
lwehmeier 3:d7ec6dc025b0 89 printf("\r\n\tCurrent number of bytes allocated for the heap: %d", heap_info.reserved_size);
lwehmeier 3:d7ec6dc025b0 90 printf("\r\n\tCurrent number of allocations: %d", heap_info.alloc_cnt);
lwehmeier 3:d7ec6dc025b0 91 printf("\r\n\tNumber of failed allocations: %d", heap_info.alloc_fail_cnt);
lwehmeier 3:d7ec6dc025b0 92
lwehmeier 3:d7ec6dc025b0 93 mbed_stats_stack_get( &stack_info[0] );
lwehmeier 3:d7ec6dc025b0 94 printf("\r\nCumulative Stack Info:");
lwehmeier 3:d7ec6dc025b0 95 printf("\r\n\tMaximum number of bytes used on the stack: %d", stack_info[0].max_size);
lwehmeier 3:d7ec6dc025b0 96 printf("\r\n\tCurrent number of bytes allocated for the stack: %d", stack_info[0].reserved_size);
lwehmeier 3:d7ec6dc025b0 97 printf("\r\n\tNumber of stacks stats accumulated in the structure: %d", stack_info[0].stack_cnt);
lwehmeier 3:d7ec6dc025b0 98
lwehmeier 3:d7ec6dc025b0 99 mbed_stats_stack_get_each( stack_info, MAX_THREAD_INFO );
lwehmeier 3:d7ec6dc025b0 100 printf("\r\nThread Stack Info:");
lwehmeier 3:d7ec6dc025b0 101 for(int i=0;i < MAX_THREAD_INFO; i++)
lwehmeier 3:d7ec6dc025b0 102 {
lwehmeier 3:d7ec6dc025b0 103 if(stack_info[i].thread_id != 0)
lwehmeier 3:d7ec6dc025b0 104 {
lwehmeier 3:d7ec6dc025b0 105 printf("\r\n\tThread: %d", i);
lwehmeier 3:d7ec6dc025b0 106 printf("\r\n\t\tMaximum number of bytes used on the stack: %d", stack_info[i].max_size);
lwehmeier 3:d7ec6dc025b0 107 printf("\r\n\t\tCurrent number of bytes allocated for the stack: %d", stack_info[i].reserved_size);
lwehmeier 3:d7ec6dc025b0 108 printf("\r\n\t\tNumber of stacks stats accumulated in the structure: %d", stack_info[i].stack_cnt);
lwehmeier 3:d7ec6dc025b0 109 }
lwehmeier 3:d7ec6dc025b0 110 }
lwehmeier 3:d7ec6dc025b0 111 */
lwehmeier 3:d7ec6dc025b0 112 rtos::Thread::wait(60000);
lwehmeier 3:d7ec6dc025b0 113 }
lwehmeier 2:bf699e054b34 114 }
lwehmeier 2:bf699e054b34 115