aboutsummaryrefslogtreecommitdiffstats
path: root/arduino/cores/nRF5/rtos.h
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
committerClyne Sullivan <tullivan99@gmail.com>2019-02-28 17:04:22 -0500
commitd6869d1ec4bd24cd2c3eafa534f0849b25ec5607 (patch)
tree79e54ed27b39c31864895535d11399708d5a45c0 /arduino/cores/nRF5/rtos.h
parent614ee97bf3a2270c413527a7f35c54cbecd9e601 (diff)
added basic code
Diffstat (limited to 'arduino/cores/nRF5/rtos.h')
-rwxr-xr-xarduino/cores/nRF5/rtos.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/arduino/cores/nRF5/rtos.h b/arduino/cores/nRF5/rtos.h
new file mode 100755
index 0000000..3c63def
--- /dev/null
+++ b/arduino/cores/nRF5/rtos.h
@@ -0,0 +1,112 @@
+/**************************************************************************/
+/*!
+ @file rtos.h
+ @author hathach (tinyusb.org)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2018, Adafruit Industries (adafruit.com)
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef RTOS_H_
+#define RTOS_H_
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "common_func.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "timers.h"
+#include "queue.h"
+#include "semphr.h"
+
+#define DELAY_FOREVER portMAX_DELAY
+enum
+{
+ TASK_PRIO_LOWEST = 0, // Idle task, should not be used
+ TASK_PRIO_LOW = 1, // Loop
+ TASK_PRIO_NORMAL = 2, // Timer Task, Callback Task
+ TASK_PRIO_HIGH = 3, // Bluefruit Task
+ TASK_PRIO_HIGHEST = 4,
+};
+
+#define ms2tick pdMS_TO_TICKS
+
+#define tick2ms(tck) ( ( ((uint64_t)(tck)) * 1000) / configTICK_RATE_HZ )
+#define tick2us(tck) ( ( ((uint64_t)(tck)) * 1000000) / configTICK_RATE_HZ )
+
+#define malloc_type(type) rtos_malloc( sizeof(type) )
+
+#if 0
+#define rtos_malloc(_size) ({ printf("[malloc] %s:%d : %d bytes\r\n", __PRETTY_FUNCTION__, __LINE__, _size); pvPortMalloc(_size); })
+#define rtos_free(ptr) ({ printf("[free] %s:%d\r\n" ,__PRETTY_FUNCTION__, __LINE__/*malloc_usable_size(ptr)*/); vPortFree(ptr); })
+#else
+
+#define rtos_malloc_type(_type) (_type*) rtos_malloc(sizeof(_type))
+
+static inline void* rtos_malloc(size_t _size)
+{
+ return (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) ? malloc(_size) : pvPortMalloc(_size);
+}
+
+static inline void rtos_free( void *pv )
+{
+ return (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) ? free(pv) : vPortFree(pv);
+}
+
+#endif
+
+#ifdef __cplusplus // Visible only with cplusplus
+
+#define SCHEDULER_STACK_SIZE_DFLT (512*2)
+
+class SchedulerRTOS
+{
+private:
+ uint8_t _num;
+
+public:
+ typedef void (*taskfunc_t)(void);
+
+ SchedulerRTOS(void);
+
+ bool startLoop(taskfunc_t task, uint32_t stack_size = SCHEDULER_STACK_SIZE_DFLT);
+ bool startLoop(taskfunc_t task, const char* name, uint32_t stack_size = SCHEDULER_STACK_SIZE_DFLT);
+};
+
+extern SchedulerRTOS Scheduler;
+
+#endif
+
+
+#endif /* RTOS_H_ */