Modification of mbed-src library only for STM32F030F4, very cheap microcontroller in 20-Pin TSSOP package, with 16Kbytes of Flash and 4Kbytes of Ram. **Target for online compilator must be Nucleo 32F030R8.** 01.02.2018 Acosinwork: Fork of mbed-STM32F030F4 library. Support for Troyka GPIO expander by Amperka. http://amperka.ru/product/troyka-gpio-expander

Fork of mbed-STM32F030F4 by Nothing Special

Committer:
acosinwork
Date:
Thu Feb 01 10:37:10 2018 +0000
Revision:
12:6f07dd7cbe47
Parent:
0:38ccae254a29
Change pin mapping and set internall oscillator as default. Fork to support Troyka GPIO expander (I2C I/O); http://amperka.ru/product/troyka-gpio-expander

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mega64 0:38ccae254a29 1 #include "CallChain.h"
mega64 0:38ccae254a29 2 #include "cmsis.h"
mega64 0:38ccae254a29 3
mega64 0:38ccae254a29 4 namespace mbed {
mega64 0:38ccae254a29 5
mega64 0:38ccae254a29 6 CallChain::CallChain(int size) : _chain(), _size(size), _elements(0) {
mega64 0:38ccae254a29 7 _chain = new pFunctionPointer_t[size]();
mega64 0:38ccae254a29 8 }
mega64 0:38ccae254a29 9
mega64 0:38ccae254a29 10 CallChain::~CallChain() {
mega64 0:38ccae254a29 11 clear();
mega64 0:38ccae254a29 12 delete _chain;
mega64 0:38ccae254a29 13 }
mega64 0:38ccae254a29 14
mega64 0:38ccae254a29 15 pFunctionPointer_t CallChain::add(void (*function)(void)) {
mega64 0:38ccae254a29 16 return common_add(new FunctionPointer(function));
mega64 0:38ccae254a29 17 }
mega64 0:38ccae254a29 18
mega64 0:38ccae254a29 19 pFunctionPointer_t CallChain::add_front(void (*function)(void)) {
mega64 0:38ccae254a29 20 return common_add_front(new FunctionPointer(function));
mega64 0:38ccae254a29 21 }
mega64 0:38ccae254a29 22
mega64 0:38ccae254a29 23 int CallChain::size() const {
mega64 0:38ccae254a29 24 return _elements;
mega64 0:38ccae254a29 25 }
mega64 0:38ccae254a29 26
mega64 0:38ccae254a29 27 pFunctionPointer_t CallChain::get(int i) const {
mega64 0:38ccae254a29 28 if (i < 0 || i >= _elements)
mega64 0:38ccae254a29 29 return NULL;
mega64 0:38ccae254a29 30 return _chain[i];
mega64 0:38ccae254a29 31 }
mega64 0:38ccae254a29 32
mega64 0:38ccae254a29 33 int CallChain::find(pFunctionPointer_t f) const {
mega64 0:38ccae254a29 34 for (int i = 0; i < _elements; i++)
mega64 0:38ccae254a29 35 if (f == _chain[i])
mega64 0:38ccae254a29 36 return i;
mega64 0:38ccae254a29 37 return -1;
mega64 0:38ccae254a29 38 }
mega64 0:38ccae254a29 39
mega64 0:38ccae254a29 40 void CallChain::clear() {
mega64 0:38ccae254a29 41 for(int i = 0; i < _elements; i ++) {
mega64 0:38ccae254a29 42 delete _chain[i];
mega64 0:38ccae254a29 43 _chain[i] = NULL;
mega64 0:38ccae254a29 44 }
mega64 0:38ccae254a29 45 _elements = 0;
mega64 0:38ccae254a29 46 }
mega64 0:38ccae254a29 47
mega64 0:38ccae254a29 48 bool CallChain::remove(pFunctionPointer_t f) {
mega64 0:38ccae254a29 49 int i;
mega64 0:38ccae254a29 50
mega64 0:38ccae254a29 51 if ((i = find(f)) == -1)
mega64 0:38ccae254a29 52 return false;
mega64 0:38ccae254a29 53 if (i != _elements - 1)
mega64 0:38ccae254a29 54 memmove(_chain + i, _chain + i + 1, (_elements - i - 1) * sizeof(pFunctionPointer_t));
mega64 0:38ccae254a29 55 delete f;
mega64 0:38ccae254a29 56 _elements --;
mega64 0:38ccae254a29 57 return true;
mega64 0:38ccae254a29 58 }
mega64 0:38ccae254a29 59
mega64 0:38ccae254a29 60 void CallChain::call() {
mega64 0:38ccae254a29 61 for(int i = 0; i < _elements; i++)
mega64 0:38ccae254a29 62 _chain[i]->call();
mega64 0:38ccae254a29 63 }
mega64 0:38ccae254a29 64
mega64 0:38ccae254a29 65 void CallChain::_check_size() {
mega64 0:38ccae254a29 66 if (_elements < _size)
mega64 0:38ccae254a29 67 return;
mega64 0:38ccae254a29 68 _size = (_size < 4) ? 4 : _size + 4;
mega64 0:38ccae254a29 69 pFunctionPointer_t* new_chain = new pFunctionPointer_t[_size]();
mega64 0:38ccae254a29 70 memcpy(new_chain, _chain, _elements * sizeof(pFunctionPointer_t));
mega64 0:38ccae254a29 71 delete _chain;
mega64 0:38ccae254a29 72 _chain = new_chain;
mega64 0:38ccae254a29 73 }
mega64 0:38ccae254a29 74
mega64 0:38ccae254a29 75 pFunctionPointer_t CallChain::common_add(pFunctionPointer_t pf) {
mega64 0:38ccae254a29 76 _check_size();
mega64 0:38ccae254a29 77 _chain[_elements] = pf;
mega64 0:38ccae254a29 78 _elements ++;
mega64 0:38ccae254a29 79 return pf;
mega64 0:38ccae254a29 80 }
mega64 0:38ccae254a29 81
mega64 0:38ccae254a29 82 pFunctionPointer_t CallChain::common_add_front(pFunctionPointer_t pf) {
mega64 0:38ccae254a29 83 _check_size();
mega64 0:38ccae254a29 84 memmove(_chain + 1, _chain, _elements * sizeof(pFunctionPointer_t));
mega64 0:38ccae254a29 85 _chain[0] = pf;
mega64 0:38ccae254a29 86 _elements ++;
mega64 0:38ccae254a29 87 return pf;
mega64 0:38ccae254a29 88 }
mega64 0:38ccae254a29 89
mega64 0:38ccae254a29 90 } // namespace mbed