The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
Kojto
Date:
Thu Jul 07 14:34:11 2016 +0100
Revision:
122:f9eeca106725
Parent:
101:7cff1c4259d7
Release 122 of the mbed library

Changes:
- new targets - Nucleo L432KC, Beetle, Nucleo F446ZE, Nucleo L011K4
- Thread safety addition - mbed API should contain a statement about thread safety
- critical section API addition
- CAS API (core_util_atomic_incr/decr)
- DEVICE_ are generated from targets.json file, device.h deprecated
- Callback replaces FunctionPointer to provide std like interface
- mbed HAL API docs improvements
- toolchain - prexif attributes with MBED_
- add new attributes - packed, weak, forcedinline, align
- target.json - contains targets definitions
- ST - L1XX - Cube update to 1.5
- SPI clock selection fix (clock from APB domain)
- F7 - Cube update v1.4.0
- L0 - baudrate init fix
- L1 - Cube update v1.5
- F3 - baudrate init fix, 3 targets CAN support
- F4 - Cube update v1.12.0, 3 targets CAN support
- L4XX - Cube update v1.5.1
- F0 - update Cube to v1.5.0
- L4 - 2 targets (L476RG/VG) CAN support
- NXP - pwm clock fix for KSDK2 MCU
- LPC2368 - remove ARM toolchain support - due to regression
- KSDK2 - fix SPI , I2C address and repeat start
- Silabs - some fixes backported from mbed 3
- Renesas - RZ_A1H - SystemCoreClockUpdate addition

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 98:8ab26030e058 1 /* mbed Microcontroller Library
Kojto 98:8ab26030e058 2 * Copyright (c) 2015 ARM Limited
Kojto 98:8ab26030e058 3 *
Kojto 98:8ab26030e058 4 * Licensed under the Apache License, Version 2.0 (the "License");
Kojto 98:8ab26030e058 5 * you may not use this file except in compliance with the License.
Kojto 98:8ab26030e058 6 * You may obtain a copy of the License at
Kojto 98:8ab26030e058 7 *
Kojto 98:8ab26030e058 8 * http://www.apache.org/licenses/LICENSE-2.0
Kojto 98:8ab26030e058 9 *
Kojto 98:8ab26030e058 10 * Unless required by applicable law or agreed to in writing, software
Kojto 98:8ab26030e058 11 * distributed under the License is distributed on an "AS IS" BASIS,
Kojto 98:8ab26030e058 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Kojto 98:8ab26030e058 13 * See the License for the specific language governing permissions and
Kojto 98:8ab26030e058 14 * limitations under the License.
Kojto 98:8ab26030e058 15 */
Kojto 98:8ab26030e058 16 #ifndef MBED_CIRCULARBUFFER_H
Kojto 98:8ab26030e058 17 #define MBED_CIRCULARBUFFER_H
Kojto 98:8ab26030e058 18
Kojto 122:f9eeca106725 19 #include "critical.h"
Kojto 122:f9eeca106725 20
Kojto 98:8ab26030e058 21 namespace mbed {
Kojto 98:8ab26030e058 22
Kojto 98:8ab26030e058 23 /** Templated Circular buffer class
Kojto 122:f9eeca106725 24 *
Kojto 122:f9eeca106725 25 * @Note Synchronization level: Interrupt safe
Kojto 98:8ab26030e058 26 */
Kojto 98:8ab26030e058 27 template<typename T, uint32_t BufferSize, typename CounterType = uint32_t>
Kojto 98:8ab26030e058 28 class CircularBuffer {
Kojto 98:8ab26030e058 29 public:
Kojto 98:8ab26030e058 30 CircularBuffer() : _head(0), _tail(0), _full(false) {
Kojto 98:8ab26030e058 31 }
Kojto 98:8ab26030e058 32
Kojto 98:8ab26030e058 33 ~CircularBuffer() {
Kojto 98:8ab26030e058 34 }
Kojto 98:8ab26030e058 35
Kojto 98:8ab26030e058 36 /** Push the transaction to the buffer. This overwrites the buffer if it's
Kojto 98:8ab26030e058 37 * full
Kojto 98:8ab26030e058 38 *
Kojto 98:8ab26030e058 39 * @param data Data to be pushed to the buffer
Kojto 98:8ab26030e058 40 */
Kojto 98:8ab26030e058 41 void push(const T& data) {
Kojto 122:f9eeca106725 42 core_util_critical_section_enter();
Kojto 98:8ab26030e058 43 if (full()) {
Kojto 98:8ab26030e058 44 _tail++;
Kojto 98:8ab26030e058 45 _tail %= BufferSize;
Kojto 98:8ab26030e058 46 }
Kojto 98:8ab26030e058 47 _pool[_head++] = data;
Kojto 98:8ab26030e058 48 _head %= BufferSize;
Kojto 98:8ab26030e058 49 if (_head == _tail) {
Kojto 98:8ab26030e058 50 _full = true;
Kojto 98:8ab26030e058 51 }
Kojto 122:f9eeca106725 52 core_util_critical_section_exit();
Kojto 98:8ab26030e058 53 }
Kojto 98:8ab26030e058 54
Kojto 98:8ab26030e058 55 /** Pop the transaction from the buffer
Kojto 98:8ab26030e058 56 *
Kojto 98:8ab26030e058 57 * @param data Data to be pushed to the buffer
Kojto 98:8ab26030e058 58 * @return True if the buffer is not empty and data contains a transaction, false otherwise
Kojto 98:8ab26030e058 59 */
Kojto 98:8ab26030e058 60 bool pop(T& data) {
Kojto 122:f9eeca106725 61 bool data_popped = false;
Kojto 122:f9eeca106725 62 core_util_critical_section_enter();
Kojto 98:8ab26030e058 63 if (!empty()) {
Kojto 98:8ab26030e058 64 data = _pool[_tail++];
Kojto 98:8ab26030e058 65 _tail %= BufferSize;
Kojto 98:8ab26030e058 66 _full = false;
Kojto 122:f9eeca106725 67 data_popped = true;
Kojto 98:8ab26030e058 68 }
Kojto 122:f9eeca106725 69 core_util_critical_section_exit();
Kojto 122:f9eeca106725 70 return data_popped;
Kojto 98:8ab26030e058 71 }
Kojto 98:8ab26030e058 72
Kojto 98:8ab26030e058 73 /** Check if the buffer is empty
Kojto 98:8ab26030e058 74 *
Kojto 98:8ab26030e058 75 * @return True if the buffer is empty, false if not
Kojto 98:8ab26030e058 76 */
Kojto 98:8ab26030e058 77 bool empty() {
Kojto 122:f9eeca106725 78 core_util_critical_section_enter();
Kojto 122:f9eeca106725 79 bool is_empty = (_head == _tail) && !_full;
Kojto 122:f9eeca106725 80 core_util_critical_section_exit();
Kojto 122:f9eeca106725 81 return is_empty;
Kojto 98:8ab26030e058 82 }
Kojto 98:8ab26030e058 83
Kojto 98:8ab26030e058 84 /** Check if the buffer is full
Kojto 98:8ab26030e058 85 *
Kojto 98:8ab26030e058 86 * @return True if the buffer is full, false if not
Kojto 98:8ab26030e058 87 */
Kojto 98:8ab26030e058 88 bool full() {
Kojto 122:f9eeca106725 89 core_util_critical_section_enter();
Kojto 122:f9eeca106725 90 bool full = _full;
Kojto 122:f9eeca106725 91 core_util_critical_section_exit();
Kojto 122:f9eeca106725 92 return full;
Kojto 98:8ab26030e058 93 }
Kojto 98:8ab26030e058 94
Kojto 98:8ab26030e058 95 /** Reset the buffer
Kojto 98:8ab26030e058 96 *
Kojto 98:8ab26030e058 97 */
Kojto 98:8ab26030e058 98 void reset() {
Kojto 122:f9eeca106725 99 core_util_critical_section_enter();
Kojto 98:8ab26030e058 100 _head = 0;
Kojto 98:8ab26030e058 101 _tail = 0;
Kojto 98:8ab26030e058 102 _full = false;
Kojto 122:f9eeca106725 103 core_util_critical_section_exit();
Kojto 98:8ab26030e058 104 }
Kojto 98:8ab26030e058 105
Kojto 98:8ab26030e058 106 private:
Kojto 98:8ab26030e058 107 T _pool[BufferSize];
Kojto 101:7cff1c4259d7 108 volatile CounterType _head;
Kojto 101:7cff1c4259d7 109 volatile CounterType _tail;
Kojto 101:7cff1c4259d7 110 volatile bool _full;
Kojto 98:8ab26030e058 111 };
Kojto 98:8ab26030e058 112
Kojto 98:8ab26030e058 113 }
Kojto 98:8ab26030e058 114
Kojto 98:8ab26030e058 115 #endif