Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SoftSerial MAX14690 Buffer
Fork of rtos_threading_with_callback by
main.cpp@3:d7ec6dc025b0, 2018-03-30 (annotated)
- 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?
User | Revision | Line number | New 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 |