BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
MyThread/MyThread.h@2:c10029b87439, 2012-12-11 (annotated)
- Committer:
- va009039
- Date:
- Tue Dec 11 15:28:00 2012 +0000
- Revision:
- 2:c10029b87439
add example
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 2:c10029b87439 | 1 | // MyThread.h 2012/12/9 |
va009039 | 2:c10029b87439 | 2 | #ifndef MY_THREAD_H |
va009039 | 2:c10029b87439 | 3 | #define MY_THREAD_H |
va009039 | 2:c10029b87439 | 4 | |
va009039 | 2:c10029b87439 | 5 | #define MAGIC_WORD 0xE25A2EA5 |
va009039 | 2:c10029b87439 | 6 | static void thread_handler(void const *argument); |
va009039 | 2:c10029b87439 | 7 | |
va009039 | 2:c10029b87439 | 8 | class MyThread { |
va009039 | 2:c10029b87439 | 9 | public: |
va009039 | 2:c10029b87439 | 10 | MyThread() { |
va009039 | 2:c10029b87439 | 11 | m_stack_size = DEFAULT_STACK_SIZE; |
va009039 | 2:c10029b87439 | 12 | m_stack_pointer = NULL; |
va009039 | 2:c10029b87439 | 13 | } |
va009039 | 2:c10029b87439 | 14 | void set_stack(uint32_t stack_size=DEFAULT_STACK_SIZE, uint8_t* stack_pointer = NULL) { |
va009039 | 2:c10029b87439 | 15 | m_stack_size = stack_size; |
va009039 | 2:c10029b87439 | 16 | m_stack_pointer = stack_pointer; |
va009039 | 2:c10029b87439 | 17 | } |
va009039 | 2:c10029b87439 | 18 | virtual void run() = 0; |
va009039 | 2:c10029b87439 | 19 | Thread* start(osPriority priority=osPriorityNormal) { |
va009039 | 2:c10029b87439 | 20 | if (m_stack_pointer == NULL) { |
va009039 | 2:c10029b87439 | 21 | m_stack_pointer = reinterpret_cast<uint8_t*>(malloc(m_stack_size)); |
va009039 | 2:c10029b87439 | 22 | } |
va009039 | 2:c10029b87439 | 23 | for(int i = 0; i < m_stack_size-64; i += 4) { |
va009039 | 2:c10029b87439 | 24 | *reinterpret_cast<uint32_t*>(m_stack_pointer+i) = MAGIC_WORD; |
va009039 | 2:c10029b87439 | 25 | } |
va009039 | 2:c10029b87439 | 26 | return th = new Thread(thread_handler, this, priority, m_stack_size, m_stack_pointer); |
va009039 | 2:c10029b87439 | 27 | } |
va009039 | 2:c10029b87439 | 28 | |
va009039 | 2:c10029b87439 | 29 | int stack_used() { |
va009039 | 2:c10029b87439 | 30 | int i; |
va009039 | 2:c10029b87439 | 31 | for(i = 0; i < m_stack_size; i += 4) { |
va009039 | 2:c10029b87439 | 32 | if(*reinterpret_cast<uint32_t*>(m_stack_pointer+i) != MAGIC_WORD) { |
va009039 | 2:c10029b87439 | 33 | break; |
va009039 | 2:c10029b87439 | 34 | } |
va009039 | 2:c10029b87439 | 35 | } |
va009039 | 2:c10029b87439 | 36 | return m_stack_size - i; |
va009039 | 2:c10029b87439 | 37 | } |
va009039 | 2:c10029b87439 | 38 | |
va009039 | 2:c10029b87439 | 39 | int stack_size() { return m_stack_size; } |
va009039 | 2:c10029b87439 | 40 | protected: |
va009039 | 2:c10029b87439 | 41 | Thread* th; |
va009039 | 2:c10029b87439 | 42 | uint32_t m_stack_size; |
va009039 | 2:c10029b87439 | 43 | uint8_t* m_stack_pointer; |
va009039 | 2:c10029b87439 | 44 | }; |
va009039 | 2:c10029b87439 | 45 | static void thread_handler(void const *argument) { |
va009039 | 2:c10029b87439 | 46 | MyThread* th = (MyThread*)argument; |
va009039 | 2:c10029b87439 | 47 | if (th) { |
va009039 | 2:c10029b87439 | 48 | th->run(); |
va009039 | 2:c10029b87439 | 49 | } |
va009039 | 2:c10029b87439 | 50 | } |
va009039 | 2:c10029b87439 | 51 | |
va009039 | 2:c10029b87439 | 52 | #endif //MY_THREAD_H |