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@2:bf699e054b34, 2018-02-25 (annotated)
- Committer:
- lwehmeier
- Date:
- Sun Feb 25 16:40:28 2018 +0000
- Revision:
- 2:bf699e054b34
- Parent:
- 0:d4b2a035ffe3
- Child:
- 3:d7ec6dc025b0
changed to modular design; rtos support; BMI160, BMP180, SSD1306, MPU6050, DHT11, SD support implemented; bit stuffing for link layer implemented; priority queue for data transmission; high-priority SPI link layer output thread
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 | 2:bf699e054b34 | 11 | SPI spi(P5_1, P5_2, P5_0); |
lwehmeier | 2:bf699e054b34 | 12 | I2C i2c(P5_7, P6_0); //sda, scl |
lwehmeier | 2:bf699e054b34 | 13 | I2C i2c2(P3_4, P3_5); //sda, scl |
mab5449 | 0:d4b2a035ffe3 | 14 | |
lwehmeier | 2:bf699e054b34 | 15 | TxQueue txQueue; |
lwehmeier | 2:bf699e054b34 | 16 | LinkLayerEncoder linkEnc; |
lwehmeier | 2:bf699e054b34 | 17 | |
lwehmeier | 2:bf699e054b34 | 18 | Thread registeredThreads[15]; |
lwehmeier | 2:bf699e054b34 | 19 | threadFunc_t registeredThreadFunctions[15]; |
lwehmeier | 2:bf699e054b34 | 20 | unsigned numRegisteredThreads=0; |
lwehmeier | 2:bf699e054b34 | 21 | Thread thread_txRF(osPriorityHigh); |
lwehmeier | 2:bf699e054b34 | 22 | |
lwehmeier | 2:bf699e054b34 | 23 | |
lwehmeier | 2:bf699e054b34 | 24 | float temperature, pressure, altitude, humidity; |
lwehmeier | 2:bf699e054b34 | 25 | float acc1[3]; |
lwehmeier | 2:bf699e054b34 | 26 | float acc2[3]; |
lwehmeier | 2:bf699e054b34 | 27 | float gyro1[3], gyro2[3]; |
mab5449 | 0:d4b2a035ffe3 | 28 | |
lwehmeier | 2:bf699e054b34 | 29 | bool registerThread(threadFunc_t f) |
lwehmeier | 2:bf699e054b34 | 30 | { |
lwehmeier | 2:bf699e054b34 | 31 | if(numRegisteredThreads >= 14) |
lwehmeier | 2:bf699e054b34 | 32 | { |
lwehmeier | 2:bf699e054b34 | 33 | printf("ERROR: Max registerable threads reached\r\n"); |
lwehmeier | 2:bf699e054b34 | 34 | return false; |
lwehmeier | 2:bf699e054b34 | 35 | } |
lwehmeier | 2:bf699e054b34 | 36 | registeredThreadFunctions[numRegisteredThreads++]=f; |
lwehmeier | 2:bf699e054b34 | 37 | printf("registered function\r\n"); |
lwehmeier | 2:bf699e054b34 | 38 | return true; |
lwehmeier | 2:bf699e054b34 | 39 | } |
lwehmeier | 2:bf699e054b34 | 40 | void setupTx() |
lwehmeier | 2:bf699e054b34 | 41 | { |
lwehmeier | 2:bf699e054b34 | 42 | spi.frequency(1000);//1kbps |
lwehmeier | 2:bf699e054b34 | 43 | } |
lwehmeier | 2:bf699e054b34 | 44 | void txData() //TODO: evaluate callback async |
lwehmeier | 2:bf699e054b34 | 45 | { |
lwehmeier | 2:bf699e054b34 | 46 | spi.lock(); |
lwehmeier | 2:bf699e054b34 | 47 | while(1) |
lwehmeier | 2:bf699e054b34 | 48 | { |
lwehmeier | 2:bf699e054b34 | 49 | uint8_t txBuf[8]={0,0,0,0,0,0,0,0}; |
lwehmeier | 2:bf699e054b34 | 50 | for(unsigned i = 0; i < 8; i++) |
lwehmeier | 2:bf699e054b34 | 51 | for(unsigned j=0; j<8;j++) |
lwehmeier | 2:bf699e054b34 | 52 | { |
lwehmeier | 2:bf699e054b34 | 53 | txBuf[i]|=(linkEnc.getNext()<<j); |
lwehmeier | 2:bf699e054b34 | 54 | } |
lwehmeier | 2:bf699e054b34 | 55 | 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 | 56 | spi.write((char*)txBuf, 8, (char*)0, 0); |
mab5449 | 0:d4b2a035ffe3 | 57 | } |
mab5449 | 0:d4b2a035ffe3 | 58 | } |
mab5449 | 0:d4b2a035ffe3 | 59 | int main() { |
lwehmeier | 2:bf699e054b34 | 60 | setupTx(); |
lwehmeier | 2:bf699e054b34 | 61 | thread_txRF.start(txData); |
lwehmeier | 2:bf699e054b34 | 62 | |
lwehmeier | 2:bf699e054b34 | 63 | for(int i=0; i<numRegisteredThreads; i++) |
lwehmeier | 2:bf699e054b34 | 64 | { |
lwehmeier | 2:bf699e054b34 | 65 | registeredThreads[i].set_priority(osPriorityBelowNormal); |
lwehmeier | 2:bf699e054b34 | 66 | registeredThreads[i].start(registeredThreadFunctions[i]); |
lwehmeier | 2:bf699e054b34 | 67 | } |
lwehmeier | 2:bf699e054b34 | 68 | printf("MAIN: started %u registered application threads\r\n", numRegisteredThreads); |
lwehmeier | 2:bf699e054b34 | 69 | |
lwehmeier | 2:bf699e054b34 | 70 | while(1) |
lwehmeier | 2:bf699e054b34 | 71 | wait(1024); |
lwehmeier | 2:bf699e054b34 | 72 | } |
lwehmeier | 2:bf699e054b34 | 73 |