the program have one sensor acs712 and moduleds1302

Dependencies:   FATFileSystem mbed

Committer:
RUBENTEC
Date:
Thu Jun 08 20:17:34 2017 +0000
Revision:
0:b82abca089ac
ds1302-bluetooth-acs712

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RUBENTEC 0:b82abca089ac 1 /* mbed Microcontroller Library
RUBENTEC 0:b82abca089ac 2 * Copyright (c) 2006-2012 ARM Limited
RUBENTEC 0:b82abca089ac 3 *
RUBENTEC 0:b82abca089ac 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
RUBENTEC 0:b82abca089ac 5 * of this software and associated documentation files (the "Software"), to deal
RUBENTEC 0:b82abca089ac 6 * in the Software without restriction, including without limitation the rights
RUBENTEC 0:b82abca089ac 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
RUBENTEC 0:b82abca089ac 8 * copies of the Software, and to permit persons to whom the Software is
RUBENTEC 0:b82abca089ac 9 * furnished to do so, subject to the following conditions:
RUBENTEC 0:b82abca089ac 10 *
RUBENTEC 0:b82abca089ac 11 * The above copyright notice and this permission notice shall be included in
RUBENTEC 0:b82abca089ac 12 * all copies or substantial portions of the Software.
RUBENTEC 0:b82abca089ac 13 *
RUBENTEC 0:b82abca089ac 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
RUBENTEC 0:b82abca089ac 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
RUBENTEC 0:b82abca089ac 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
RUBENTEC 0:b82abca089ac 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
RUBENTEC 0:b82abca089ac 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
RUBENTEC 0:b82abca089ac 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
RUBENTEC 0:b82abca089ac 20 * SOFTWARE.
RUBENTEC 0:b82abca089ac 21 */
RUBENTEC 0:b82abca089ac 22 #include "Thread.h"
RUBENTEC 0:b82abca089ac 23
RUBENTEC 0:b82abca089ac 24 #include "mbed_error.h"
RUBENTEC 0:b82abca089ac 25 #include "rtos_idle.h"
RUBENTEC 0:b82abca089ac 26
RUBENTEC 0:b82abca089ac 27 namespace rtos {
RUBENTEC 0:b82abca089ac 28
RUBENTEC 0:b82abca089ac 29 Thread::Thread(void (*task)(void const *argument), void *argument,
RUBENTEC 0:b82abca089ac 30 osPriority priority, uint32_t stack_size, unsigned char *stack_pointer) {
RUBENTEC 0:b82abca089ac 31 #ifdef CMSIS_OS_RTX
RUBENTEC 0:b82abca089ac 32 _thread_def.pthread = task;
RUBENTEC 0:b82abca089ac 33 _thread_def.tpriority = priority;
RUBENTEC 0:b82abca089ac 34 _thread_def.stacksize = stack_size;
RUBENTEC 0:b82abca089ac 35 if (stack_pointer != NULL) {
RUBENTEC 0:b82abca089ac 36 _thread_def.stack_pointer = (uint32_t*)stack_pointer;
RUBENTEC 0:b82abca089ac 37 _dynamic_stack = false;
RUBENTEC 0:b82abca089ac 38 } else {
RUBENTEC 0:b82abca089ac 39 _thread_def.stack_pointer = new uint32_t[stack_size/sizeof(uint32_t)];
RUBENTEC 0:b82abca089ac 40 if (_thread_def.stack_pointer == NULL)
RUBENTEC 0:b82abca089ac 41 error("Error allocating the stack memory\n");
RUBENTEC 0:b82abca089ac 42 _dynamic_stack = true;
RUBENTEC 0:b82abca089ac 43 }
RUBENTEC 0:b82abca089ac 44
RUBENTEC 0:b82abca089ac 45 //Fill the stack with a magic word for maximum usage checking
RUBENTEC 0:b82abca089ac 46 for (uint32_t i = 0; i < (stack_size / sizeof(uint32_t)); i++) {
RUBENTEC 0:b82abca089ac 47 _thread_def.stack_pointer[i] = 0xE25A2EA5;
RUBENTEC 0:b82abca089ac 48 }
RUBENTEC 0:b82abca089ac 49 #endif
RUBENTEC 0:b82abca089ac 50 _tid = osThreadCreate(&_thread_def, argument);
RUBENTEC 0:b82abca089ac 51 }
RUBENTEC 0:b82abca089ac 52
RUBENTEC 0:b82abca089ac 53 osStatus Thread::terminate() {
RUBENTEC 0:b82abca089ac 54 return osThreadTerminate(_tid);
RUBENTEC 0:b82abca089ac 55 }
RUBENTEC 0:b82abca089ac 56
RUBENTEC 0:b82abca089ac 57 osStatus Thread::set_priority(osPriority priority) {
RUBENTEC 0:b82abca089ac 58 return osThreadSetPriority(_tid, priority);
RUBENTEC 0:b82abca089ac 59 }
RUBENTEC 0:b82abca089ac 60
RUBENTEC 0:b82abca089ac 61 osPriority Thread::get_priority() {
RUBENTEC 0:b82abca089ac 62 return osThreadGetPriority(_tid);
RUBENTEC 0:b82abca089ac 63 }
RUBENTEC 0:b82abca089ac 64
RUBENTEC 0:b82abca089ac 65 int32_t Thread::signal_set(int32_t signals) {
RUBENTEC 0:b82abca089ac 66 return osSignalSet(_tid, signals);
RUBENTEC 0:b82abca089ac 67 }
RUBENTEC 0:b82abca089ac 68
RUBENTEC 0:b82abca089ac 69 int32_t Thread::signal_clr(int32_t signals) {
RUBENTEC 0:b82abca089ac 70 return osSignalClear(_tid, signals);
RUBENTEC 0:b82abca089ac 71 }
RUBENTEC 0:b82abca089ac 72
RUBENTEC 0:b82abca089ac 73 Thread::State Thread::get_state() {
RUBENTEC 0:b82abca089ac 74 #ifndef __MBED_CMSIS_RTOS_CA9
RUBENTEC 0:b82abca089ac 75 return ((State)_thread_def.tcb.state);
RUBENTEC 0:b82abca089ac 76 #else
RUBENTEC 0:b82abca089ac 77 uint8_t status;
RUBENTEC 0:b82abca089ac 78 status = osThreadGetState(_tid);
RUBENTEC 0:b82abca089ac 79 return ((State)status);
RUBENTEC 0:b82abca089ac 80 #endif
RUBENTEC 0:b82abca089ac 81 }
RUBENTEC 0:b82abca089ac 82
RUBENTEC 0:b82abca089ac 83 uint32_t Thread::stack_size() {
RUBENTEC 0:b82abca089ac 84 #ifndef __MBED_CMSIS_RTOS_CA9
RUBENTEC 0:b82abca089ac 85 return _thread_def.tcb.priv_stack;
RUBENTEC 0:b82abca089ac 86 #else
RUBENTEC 0:b82abca089ac 87 return 0;
RUBENTEC 0:b82abca089ac 88 #endif
RUBENTEC 0:b82abca089ac 89 }
RUBENTEC 0:b82abca089ac 90
RUBENTEC 0:b82abca089ac 91 uint32_t Thread::free_stack() {
RUBENTEC 0:b82abca089ac 92 #ifndef __MBED_CMSIS_RTOS_CA9
RUBENTEC 0:b82abca089ac 93 uint32_t bottom = (uint32_t)_thread_def.tcb.stack;
RUBENTEC 0:b82abca089ac 94 return _thread_def.tcb.tsk_stack - bottom;
RUBENTEC 0:b82abca089ac 95 #else
RUBENTEC 0:b82abca089ac 96 return 0;
RUBENTEC 0:b82abca089ac 97 #endif
RUBENTEC 0:b82abca089ac 98 }
RUBENTEC 0:b82abca089ac 99
RUBENTEC 0:b82abca089ac 100 uint32_t Thread::used_stack() {
RUBENTEC 0:b82abca089ac 101 #ifndef __MBED_CMSIS_RTOS_CA9
RUBENTEC 0:b82abca089ac 102 uint32_t top = (uint32_t)_thread_def.tcb.stack + _thread_def.tcb.priv_stack;
RUBENTEC 0:b82abca089ac 103 return top - _thread_def.tcb.tsk_stack;
RUBENTEC 0:b82abca089ac 104 #else
RUBENTEC 0:b82abca089ac 105 return 0;
RUBENTEC 0:b82abca089ac 106 #endif
RUBENTEC 0:b82abca089ac 107 }
RUBENTEC 0:b82abca089ac 108
RUBENTEC 0:b82abca089ac 109 uint32_t Thread::max_stack() {
RUBENTEC 0:b82abca089ac 110 #ifndef __MBED_CMSIS_RTOS_CA9
RUBENTEC 0:b82abca089ac 111 uint32_t high_mark = 0;
RUBENTEC 0:b82abca089ac 112 while (_thread_def.tcb.stack[high_mark] == 0xE25A2EA5)
RUBENTEC 0:b82abca089ac 113 high_mark++;
RUBENTEC 0:b82abca089ac 114 return _thread_def.tcb.priv_stack - (high_mark * 4);
RUBENTEC 0:b82abca089ac 115 #else
RUBENTEC 0:b82abca089ac 116 return 0;
RUBENTEC 0:b82abca089ac 117 #endif
RUBENTEC 0:b82abca089ac 118 }
RUBENTEC 0:b82abca089ac 119
RUBENTEC 0:b82abca089ac 120 osEvent Thread::signal_wait(int32_t signals, uint32_t millisec) {
RUBENTEC 0:b82abca089ac 121 return osSignalWait(signals, millisec);
RUBENTEC 0:b82abca089ac 122 }
RUBENTEC 0:b82abca089ac 123
RUBENTEC 0:b82abca089ac 124 osStatus Thread::wait(uint32_t millisec) {
RUBENTEC 0:b82abca089ac 125 return osDelay(millisec);
RUBENTEC 0:b82abca089ac 126 }
RUBENTEC 0:b82abca089ac 127
RUBENTEC 0:b82abca089ac 128 osStatus Thread::yield() {
RUBENTEC 0:b82abca089ac 129 return osThreadYield();
RUBENTEC 0:b82abca089ac 130 }
RUBENTEC 0:b82abca089ac 131
RUBENTEC 0:b82abca089ac 132 osThreadId Thread::gettid() {
RUBENTEC 0:b82abca089ac 133 return osThreadGetId();
RUBENTEC 0:b82abca089ac 134 }
RUBENTEC 0:b82abca089ac 135
RUBENTEC 0:b82abca089ac 136 void Thread::attach_idle_hook(void (*fptr)(void)) {
RUBENTEC 0:b82abca089ac 137 rtos_attach_idle_hook(fptr);
RUBENTEC 0:b82abca089ac 138 }
RUBENTEC 0:b82abca089ac 139
RUBENTEC 0:b82abca089ac 140 Thread::~Thread() {
RUBENTEC 0:b82abca089ac 141 terminate();
RUBENTEC 0:b82abca089ac 142 if (_dynamic_stack) {
RUBENTEC 0:b82abca089ac 143 delete[] (_thread_def.stack_pointer);
RUBENTEC 0:b82abca089ac 144 }
RUBENTEC 0:b82abca089ac 145 }
RUBENTEC 0:b82abca089ac 146
RUBENTEC 0:b82abca089ac 147 }