Skip to content

Commit c74f593

Browse files
committed
Added header and source files to match Arduino library format
Signed-off-by: Frederic.Pillon <[email protected]>
1 parent 2f5fef8 commit c74f593

18 files changed

+589
-0
lines changed

src/FreeRTOS.h

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* @file FreeRTOS.h
3+
* @author Frederic Pillon <[email protected]> for STMicroelectronics.
4+
* @brief Include header file to match Arduino library format
5+
*/
6+
#ifndef _ARDUINO_FREERTOS_H_
7+
#define _ARDUINO_FREERTOS_H_
8+
9+
#include "FreeRTOS/Source/include/FreeRTOS.h"
10+
11+
#endif //_ARDUINO_FREERTOS_H_

src/FreeRTOSConfig.h

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
/*
2+
FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.
3+
All rights reserved
4+
5+
VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
6+
7+
This file is part of the FreeRTOS distribution.
8+
9+
FreeRTOS is free software; you can redistribute it and/or modify it under
10+
the terms of the GNU General Public License (version 2) as published by the
11+
Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception.
12+
13+
***************************************************************************
14+
>>! NOTE: The modification to the GPL is included to allow you to !<<
15+
>>! distribute a combined work that includes FreeRTOS without being !<<
16+
>>! obliged to provide the source code for proprietary components !<<
17+
>>! outside of the FreeRTOS kernel. !<<
18+
***************************************************************************
19+
20+
FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
21+
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22+
FOR A PARTICULAR PURPOSE. Full license text is available on the following
23+
link: http://www.freertos.org/a00114.html
24+
25+
***************************************************************************
26+
* *
27+
* FreeRTOS provides completely free yet professionally developed, *
28+
* robust, strictly quality controlled, supported, and cross *
29+
* platform software that is more than just the market leader, it *
30+
* is the industry's de facto standard. *
31+
* *
32+
* Help yourself get started quickly while simultaneously helping *
33+
* to support the FreeRTOS project by purchasing a FreeRTOS *
34+
* tutorial book, reference manual, or both: *
35+
* http://www.FreeRTOS.org/Documentation *
36+
* *
37+
***************************************************************************
38+
39+
http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading
40+
the FAQ page "My application does not run, what could be wrong?". Have you
41+
defined configASSERT()?
42+
43+
http://www.FreeRTOS.org/support - In return for receiving this top quality
44+
embedded software for free we request you assist our global community by
45+
participating in the support forum.
46+
47+
http://www.FreeRTOS.org/training - Investing in training allows your team to
48+
be as productive as possible as early as possible. Now you can receive
49+
FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers
50+
Ltd, and the world's leading authority on the world's leading RTOS.
51+
52+
http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
53+
including FreeRTOS+Trace - an indispensable productivity tool, a DOS
54+
compatible FAT file system, and our tiny thread aware UDP/IP stack.
55+
56+
http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.
57+
Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.
58+
59+
http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High
60+
Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS
61+
licenses offer ticketed support, indemnification and commercial middleware.
62+
63+
http://www.SafeRTOS.com - High Integrity Systems also provide a safety
64+
engineered and independently SIL3 certified version for use in safety and
65+
mission critical applications that require provable dependability.
66+
67+
1 tab == 4 spaces!
68+
*/
69+
70+
71+
#ifndef FREERTOS_CONFIG_H
72+
#define FREERTOS_CONFIG_H
73+
74+
/*-----------------------------------------------------------
75+
* Application specific definitions.
76+
*
77+
* These definitions should be adjusted for your particular hardware and
78+
* application requirements.
79+
*
80+
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
81+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
82+
*
83+
* See http://www.freertos.org/a00110.html.
84+
*----------------------------------------------------------*/
85+
86+
/* Begin custom definitions for STM32 */
87+
/* Default (3) Memory allocation implementations (heap_[1-5].c) */
88+
/*#define configMEMMANG_HEAP_NB 3*/
89+
/* End custom definitions for STM32 */
90+
91+
/* Ensure stdint is only used by the compiler, and not the assembler. */
92+
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
93+
#include <stdint.h>
94+
extern uint32_t SystemCoreClock;
95+
#endif
96+
97+
#define configUSE_PREEMPTION 1
98+
#define configUSE_IDLE_HOOK 1
99+
#define configUSE_TICK_HOOK 1
100+
#define configCPU_CLOCK_HZ (SystemCoreClock)
101+
#define configTICK_RATE_HZ ((TickType_t)1000)
102+
#define configMAX_PRIORITIES (7)
103+
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
104+
#define configTOTAL_HEAP_SIZE ((size_t)(15 * 1024))
105+
#define configMAX_TASK_NAME_LEN (16)
106+
#define configUSE_TRACE_FACILITY 1
107+
#define configUSE_16_BIT_TICKS 0
108+
#define configIDLE_SHOULD_YIELD 1
109+
#define configUSE_MUTEXES 1
110+
#define configQUEUE_REGISTRY_SIZE 8
111+
#define configCHECK_FOR_STACK_OVERFLOW 0
112+
#define configUSE_RECURSIVE_MUTEXES 1
113+
#define configUSE_MALLOC_FAILED_HOOK 0
114+
#define configUSE_APPLICATION_TASK_TAG 0
115+
#define configUSE_COUNTING_SEMAPHORES 1
116+
#define configGENERATE_RUN_TIME_STATS 0
117+
118+
/* Co-routine definitions. */
119+
#define configUSE_CO_ROUTINES 0
120+
#define configMAX_CO_ROUTINE_PRIORITIES (2)
121+
122+
/* Software timer definitions. */
123+
#define configUSE_TIMERS 1
124+
#define configTIMER_TASK_PRIORITY (2)
125+
#define configTIMER_QUEUE_LENGTH 10
126+
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)
127+
128+
/* Set the following definitions to 1 to include the API function, or zero
129+
to exclude the API function. */
130+
#define INCLUDE_vTaskPrioritySet 1
131+
#define INCLUDE_uxTaskPriorityGet 1
132+
#define INCLUDE_vTaskDelete 1
133+
#define INCLUDE_vTaskCleanUpResources 1
134+
#define INCLUDE_vTaskSuspend 1
135+
#define INCLUDE_vTaskDelayUntil 1
136+
#define INCLUDE_vTaskDelay 1
137+
#define INCLUDE_xTaskGetSchedulerState 1
138+
139+
/* Cortex-M specific definitions. */
140+
#ifdef __NVIC_PRIO_BITS
141+
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
142+
#define configPRIO_BITS __NVIC_PRIO_BITS
143+
#else
144+
#define configPRIO_BITS 4 /* 15 priority levels */
145+
#endif
146+
147+
/* The lowest interrupt priority that can be used in a call to a "set priority"
148+
function. */
149+
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
150+
151+
/* The highest interrupt priority that can be used by any interrupt service
152+
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
153+
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
154+
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
155+
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
156+
157+
/* Interrupt priorities used by the kernel port layer itself. These are generic
158+
to all Cortex-M ports, and do not rely on any particular library functions. */
159+
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
160+
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
161+
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
162+
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
163+
164+
/* Normal assert() semantics without relying on the provision of an assert.h
165+
header file. */
166+
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
167+
168+
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
169+
standard names. */
170+
#define vPortSVCHandler SVC_Handler
171+
#define xPortPendSVHandler PendSV_Handler
172+
173+
/* IMPORTANT: This define MUST be commented when used with STM32Cube firmware,
174+
to prevent overwriting SysTick_Handler defined within STM32Cube HAL */
175+
/* #define xPortSysTickHandler SysTick_Handler */
176+
177+
#endif /* FREERTOS_CONFIG_H */
178+

src/STM32FreeRTOS.c

+153
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/**
2+
* @file STM32FreeRTOS.c
3+
* @brief Based on FreeRTOS for Due and Teensy 3.0
4+
* @modified by Frederic Pillon <[email protected]> for STMicroelectronics.
5+
*/
6+
#include <STM32FreeRTOS.h>
7+
#include <Arduino.h>
8+
9+
//------------------------------------------------------------------------------
10+
/** delay between led error flashes
11+
* \param[in] millis milliseconds to delay
12+
*/
13+
static void delayMS(uint32_t millis) {
14+
uint32_t iterations = millis * (SystemCoreClock/7000);
15+
uint32_t i;
16+
for(i = 0; i < iterations; ++i) {
17+
__asm__("nop\n\t");
18+
}
19+
}
20+
21+
//------------------------------------------------------------------------------
22+
/** Blink error pattern
23+
*
24+
* \param[in] n number of short pulses
25+
*/
26+
static void errorBlink(int n) {
27+
#ifdef LED_BUILTIN
28+
noInterrupts();
29+
pinMode(LED_BUILTIN, OUTPUT);
30+
for (;;) {
31+
int i;
32+
for (i = 0; i < n; i++) {
33+
digitalWrite(LED_BUILTIN, 1);
34+
delayMS(300);
35+
digitalWrite(LED_BUILTIN, 0);
36+
delayMS(300);
37+
}
38+
delayMS(2000);
39+
}
40+
#else
41+
while(1);
42+
#endif // LED_BUILTIN
43+
}
44+
45+
//------------------------------------------------------------------------------
46+
/** assertBlink
47+
* Blink one short pulse every two seconds if configASSERT fails.
48+
*/
49+
void assertBlink() {
50+
errorBlink(1);
51+
}
52+
//------------------------------------------------------------------------------
53+
#if ( configUSE_MALLOC_FAILED_HOOK == 1 )
54+
/** vApplicationMallocFailedHook()
55+
Blink two short pulses if malloc fails.
56+
57+
will only be called if
58+
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
59+
function that will get called if a call to pvPortMalloc() fails.
60+
pvPortMalloc() is called internally by the kernel whenever a task, queue,
61+
timer or semaphore is created. It is also called by various parts of the
62+
demo application. If heap_1.c or heap_2.c are used, then the size of the
63+
heap available to pvPortMalloc() is defined by configTOTAL_HEAP_SIZE in
64+
FreeRTOSConfig.h, and the xPortGetFreeHeapSize() API function can be used
65+
to query the size of free heap space that remains (although it does not
66+
provide information on how the remaining heap might be fragmented). */
67+
void vApplicationMallocFailedHook() {
68+
errorBlink(2);
69+
}
70+
#endif /* configUSE_MALLOC_FAILED_HOOK == 1 */
71+
72+
//------------------------------------------------------------------------------
73+
#if ( configUSE_IDLE_HOOK == 1 )
74+
/** vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
75+
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
76+
task. It is essential that code added to this hook function never attempts
77+
to block in any way (for example, call xQueueReceive() with a block time
78+
specified, or call vTaskDelay()). If the application makes use of the
79+
vTaskDelete() API function (as this demo application does) then it is also
80+
important that vApplicationIdleHook() is permitted to return to its calling
81+
function, because it is the responsibility of the idle task to clean up
82+
memory allocated by the kernel to any task that has since been deleted. */
83+
void __attribute__((weak)) vApplicationIdleHook( void ) {
84+
void loop();
85+
loop();
86+
}
87+
#endif /* configUSE_IDLE_HOOK == 1 */
88+
89+
/*-----------------------------------------------------------*/
90+
#if ( configCHECK_FOR_STACK_OVERFLOW >= 1 )
91+
/** Blink three short pulses if stack overflow is detected.
92+
Run time stack overflow checking is performed if
93+
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
94+
function is called if a stack overflow is detected.
95+
\param[in] pxTask Task handle
96+
\param[in] pcTaskName Task name
97+
*/
98+
void vApplicationStackOverflowHook(TaskHandle_t pxTask, char *pcTaskName) {
99+
(void) pcTaskName;
100+
(void) pxTask;
101+
errorBlink(3);
102+
}
103+
#endif /* configCHECK_FOR_STACK_OVERFLOW >= 1 */
104+
105+
//------------------------------------------------------------------------------
106+
// catch exceptions
107+
/** Hard fault - blink four short flash every two seconds */
108+
void hard_fault_isr() {
109+
//printf("Hard fault isr\n");
110+
errorBlink(4);
111+
}
112+
/** Hard fault - blink four short flash every two seconds */
113+
void HardFault_Handler() {
114+
errorBlink(4);
115+
}
116+
117+
/** Bus fault - blink five short flashes every two seconds */
118+
void bus_fault_isr() {
119+
errorBlink(5);
120+
}
121+
/** Bus fault - blink five short flashes every two seconds */
122+
void BusFault_Handler() {
123+
errorBlink(5);
124+
}
125+
126+
/** Usage fault - blink six short flashes every two seconds */
127+
void usage_fault_isr() {
128+
errorBlink(6);
129+
}
130+
/** Usage fault - blink six short flashes every two seconds */
131+
void UsageFault_Handler() {
132+
errorBlink(6);
133+
}
134+
135+
/*-----------------------------------------------------------*/
136+
#if ( configUSE_TICK_HOOK == 1 )
137+
/** This function will be called by each tick interrupt if
138+
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
139+
added here, but the tick hook is called from an interrupt context, so
140+
code must not attempt to block, and only the interrupt safe FreeRTOS API
141+
functions can be used (those that end in FromISR()). */
142+
void __attribute__((weak)) vApplicationTickHook() {
143+
}
144+
#endif /* configUSE_TICK_HOOK == 1 */
145+
146+
/*-----------------------------------------------------------*/
147+
/** Dummy time stats gathering functions need to be defined to keep the
148+
linker happy. Could edit FreeRTOSConfig.h to remove these.*/
149+
void vMainConfigureTimerForRunTimeStats( void ) {}
150+
/** Dummy function
151+
* \return zero
152+
*/
153+
unsigned long ulMainGetRunTimeCounterValue() {return 0UL;}

src/STM32FreeRTOS.h

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* @file STM32FreeRTOS.h
3+
* @author Frederic Pillon <[email protected]> for STMicroelectronics.
4+
* @brief Include header file to match Arduino library format
5+
*/
6+
#ifndef _STM32FREERTOS_H_
7+
#define _STM32FREERTOS_H_
8+
9+
#include "FreeRTOS.h"
10+
#include "cmsis_os.h"
11+
12+
#endif //_STM32FREERTOS_H_

src/StackMacros.h

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* @file StackMacros.h
3+
* @author Frederic Pillon <[email protected]> for STMicroelectronics.
4+
* @brief Include header file to match Arduino library format
5+
*/
6+
#ifndef _ARDUINO_STACKMACROS_H_
7+
#define _ARDUINO_STACKMACROS_H_
8+
9+
#include "FreeRTOS/Source/include/StackMacros.h"
10+
11+
#endif //_ARDUINO_STACKMACROS_H_

src/cmsis_os.h

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* @file cmsis_os.h
3+
* @author Frederic Pillon <[email protected]> for STMicroelectronics.
4+
* @brief Include header file to match Arduino library format
5+
*/
6+
#ifndef _ARDUINO_CMSIS_OS_H_
7+
#define _ARDUINO_CMSIS_OS_H_
8+
9+
#include "FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h"
10+
11+
#endif //_ARDUINO_CMSIS_OS_H_

src/croutine.h

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
* @file croutine.h
3+
* @author Frederic Pillon <[email protected]> for STMicroelectronics.
4+
* @brief Include header file to match Arduino library format
5+
*/
6+
#ifndef _ARDUINO_CROUTINE_H_
7+
#define _ARDUINO_CROUTINE_H_
8+
9+
#include "FreeRTOS/Source/include/croutine.h"
10+
11+
#endif //_ARDUINO_CROUTINE_H_

0 commit comments

Comments
 (0)