Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Preliminary multi-board support for Arduino #141

Merged
merged 8 commits into from
Jan 25, 2023
30 changes: 18 additions & 12 deletions core/platform/lf_arduino_support.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,14 +133,17 @@ int lf_clock_gettime(instant_t* t) {
* nested critical sections.
*/
int lf_critical_section_enter() {
_lf_num_nested_critical_sections++;
// if (_lf_num_nested_critical_sections++ == 0) {
// // First nested entry into a critical section.
// // If interrupts are not initially enabled, then increment again to prevent
// // TODO: Do we need to check whether the interrupts were enabled to
// // begin with? AFAIK there is no Arduino API for that
// noInterrupts();
// }
if (_lf_num_nested_critical_sections++ == 0) {
// First nested entry into a critical section.
// If interrupts are not initially enabled, then increment again to prevent
// TODO: Do we need to check whether the interrupts were enabled to
// begin with? AFAIK there is no Arduino API for that
#if BOARD==MBED
core_util_critical_section_enter(); //MBED Boards use an RTOS, so we use a specific call to enter a critical section.
#else
noInterrupts();
#endif
}
return 0;
}

Expand All @@ -158,10 +161,13 @@ int lf_critical_section_exit() {
if (_lf_num_nested_critical_sections <= 0) {
return 1;
}
// if (--_lf_num_nested_critical_sections == 0) {
// interrupts();
// }
--_lf_num_nested_critical_sections;
if (--_lf_num_nested_critical_sections == 0) {
#if BOARD==MBED
core_util_critical_section_exit(); //MBED Boards use an RTOS, so we use a specific call to exit a critical section.
#else
interrupts();
#endif
}
return 0;
}

Expand Down
96 changes: 52 additions & 44 deletions include/core/platform/lf_arduino_support.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,57 +36,65 @@ THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <time.h> // For CLOCK_MONOTONIC
#include <stdbool.h>

#define AVR 0
#define megaAVR 1
#define SAMD 2
#define SAM 3
#define MBED 4

#ifndef BOARD
#if defined(ARDUINO_AVR_ADK)
#define BOARD "Mega Adk"
#if defined(ARDUINO_AVR_ADK)
#define BOARD AVR
#elif defined(ARDUINO_AVR_BT) // Bluetooth
#define BOARD "Bt"
#elif defined(ARDUINO_AVR_DUEMILANOVE)
#define BOARD "Duemilanove"
#elif defined(ARDUINO_AVR_ESPLORA)
#define BOARD "Esplora"
#elif defined(ARDUINO_AVR_ETHERNET)
#define BOARD "Ethernet"
#elif defined(ARDUINO_AVR_FIO)
#define BOARD "Fio"
#define BOARD AVR
#elif defined(ARDUINO_AVR_DUEMILANOVE)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ESPLORA)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ETHERNET)
#define BOARD AVR
#elif defined(ARDUINO_AVR_FIO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_GEMMA)
#define BOARD "Gemma"
#elif defined(ARDUINO_AVR_LEONARDO)
#define BOARD "Leonardo"
#define BOARD AVR
#elif defined(ARDUINO_AVR_LEONARDO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_LILYPAD)
#define BOARD "Lilypad"
#define BOARD AVR
#elif defined(ARDUINO_AVR_LILYPAD_USB)
#define BOARD "Lilypad Usb"
#elif defined(ARDUINO_AVR_MEGA)
#define BOARD "Mega"
#elif defined(ARDUINO_AVR_MEGA2560)
#define BOARD "Mega 2560"
#elif defined(ARDUINO_AVR_MICRO)
#define BOARD "Micro"
#elif defined(ARDUINO_AVR_MINI)
#define BOARD "Mini"
#elif defined(ARDUINO_AVR_NANO)
#define BOARD "Nano"
#elif defined(ARDUINO_AVR_NG)
#define BOARD "NG"
#elif defined(ARDUINO_AVR_PRO)
#define BOARD "Pro"
#elif defined(ARDUINO_AVR_ROBOT_CONTROL)
#define BOARD "Robot Ctrl"
#elif defined(ARDUINO_AVR_ROBOT_MOTOR)
#define BOARD "Robot Motor"
#elif defined(ARDUINO_AVR_UNO) || defined(__AVR_ATmega4809__)
#define BOARD "Uno"
#elif defined(ARDUINO_AVR_YUN)
#define BOARD "Yun"
#define BOARD AVR
#elif defined(ARDUINO_AVR_MEGA)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MEGA2560)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MICRO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_MINI)
#define BOARD AVR
#elif defined(ARDUINO_AVR_NANO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_NG)
#define BOARD AVR
#elif defined(ARDUINO_AVR_PRO)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ROBOT_CONTROL)
#define BOARD AVR
#elif defined(ARDUINO_AVR_ROBOT_MOTOR)
#define BOARD AVR
#elif defined(ARDUINO_AVR_UNO) || defined(__AVR_ATmega4809__)
#define BOARD AVR
#elif defined(ARDUINO_AVR_YUN)
#define BOARD AVR

// These boards must be installed separately:
#elif defined(ARDUINO_SAM_DUE)
#define BOARD "Due"
#elif defined(ARDUINO_SAMD_ZERO)
#define BOARD "Zero"
#elif defined(ARDUINO_ARC32_TOOLS)
#define BOARD "101"
#elif defined(ARDUINO_SAM_DUE)
#define BOARD SAM
#elif defined(ARDUINO_SAMD_ZERO)
#define BOARD SAMD
#elif defined(ARDUINO_ARC32_TOOLS)
#define BOARD SAM
#elif defined(ARDUINO_ARDUINO_NANO33BLE)
#define BOARD MBED
#endif
#endif

Expand Down