diff --git a/configs/stm32f746g-disco/src/Makefile b/configs/stm32f746g-disco/src/Makefile index 25a395d886e..b8c7c79e322 100644 --- a/configs/stm32f746g-disco/src/Makefile +++ b/configs/stm32f746g-disco/src/Makefile @@ -60,6 +60,10 @@ ifeq ($(CONFIG_ARCH_FPU),y) CSRCS += stm32_ostest.c endif +ifeq ($(CONFIG_SPORADIC_INSTRUMENTATION),y) +CSRCS += stm32_sporadic.c +endif + COBJS = $(CSRCS:.c=$(OBJEXT)) SRCS = $(ASRCS) $(CSRCS) diff --git a/configs/stm32f746g-disco/src/stm32_boot.c b/configs/stm32f746g-disco/src/stm32_boot.c index b4019885230..f644ef8a8ab 100644 --- a/configs/stm32f746g-disco/src/stm32_boot.c +++ b/configs/stm32f746g-disco/src/stm32_boot.c @@ -84,6 +84,14 @@ void stm32_boardinitialize(void) } #endif +#ifdef CONFIG_SPORADIC_INSTRUMENTATION + /* This configuration has been used for evaluating the NuttX sporadic scheduler. + * The following caqll initializes the sporadic scheduler monitor. + */ + + sporadic_note_initialize(); +#endif + #ifdef CONFIG_ARCH_LEDS /* Configure on-board LEDs if LED support has been selected. */ diff --git a/configs/stm32f746g-disco/src/stm32_sporadic.c b/configs/stm32f746g-disco/src/stm32_sporadic.c new file mode 100644 index 00000000000..7f56121cb6f --- /dev/null +++ b/configs/stm32f746g-disco/src/stm32_sporadic.c @@ -0,0 +1,93 @@ +/**************************************************************************** + * configs/stm32f746g-disco/src/stm32_sporadic.c + * + * Copyright (C) 2015 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * 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 NuttX 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 AND CONTRIBUTORS + * "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 OWNER OR CONTRIBUTORS 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include + +#include "stm32_gpio.h" +#include "stm32f746g-disco.h" + +#ifdef CONFIG_SPORADIC_INSTRUMENTATION + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: sporadic_note_* + * + * Description: + * This configuration has been used for evaluating the NuttX sporadic + * scheduler. This only makes sense when uses with the sporadic test + * which is a part of apps/examples/ostest. If would make generate + * meaningful output in its current state if there were multiple sporadic + * threads + * + ****************************************************************************/ + +void sporadic_note_initialize(void) +{ + stm32_configgpio(GPIO_SCHED_HIGHPRI); + stm32_configgpio(GPIO_SCHED_RUNNING); +} + +void sporadic_note_start(FAR struct tcb_s *tcb) +{ + stm32_gpiowrite(GPIO_SCHED_HIGHPRI, true); +} + +void sporadic_note_lowpriority(FAR struct tcb_s *tcb) +{ + stm32_gpiowrite(GPIO_SCHED_HIGHPRI, false); +} + +void sporadic_note_suspend(FAR struct tcb_s *tcb) +{ + stm32_gpiowrite(GPIO_SCHED_RUNNING, false); +} + +void sporadic_note_resume(FAR struct tcb_s *tcb) +{ + stm32_gpiowrite(GPIO_SCHED_RUNNING, true); +} + +#endif /* CONFIG_SPORADIC_INSTRUMENTATION */ \ No newline at end of file diff --git a/configs/stm32f746g-disco/src/stm32f746g-disco.h b/configs/stm32f746g-disco/src/stm32f746g-disco.h index 5b67d4c45a0..482b8fa4a29 100644 --- a/configs/stm32f746g-disco/src/stm32f746g-disco.h +++ b/configs/stm32f746g-disco/src/stm32f746g-disco.h @@ -56,14 +56,29 @@ * grounded so a high output on PI1 will illuminate the LED. */ -#define GPIO_LD1 (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_50MHz | \ - GPIO_OUTPUT_CLEAR | GPIO_PORTI | GPIO_PIN1) +#define GPIO_LD1 (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_50MHz | GPIO_OUTPUT_CLEAR | \ + GPIO_PORTI | GPIO_PIN1) /* Pushbutton B1, labelled "User", is connected to GPIO PI11. A high value will be sensed when the * button is depressed. Note that the EXTI interrupt is configured. */ -#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | GPIO_PORTI | GPIO_PIN11) +#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | GPIO_PORTI | GPIO_PIN11) + +/* Sporadic scheduler instrumentation. This configuration has been used for evaluating the NuttX + * sporadic scheduler. In this evaluation, two GPIO outputs are used. One indicating the priority + * (high or low) of the sporadic thread and one indicating where the thread is running or not. + * + * There is nothing special about the pin selections: + * + * Arduino D2 PG6 - Indicates priority + * Arduino D4 PG7 - Indicates that the thread is running + */ + +#define GPIO_SCHED_HIGHPRI (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_50MHz | GPIO_OUTPUT_CLEAR | \ + GPIO_PORTG | GPIO_PIN6) +#define GPIO_SCHED_RUNNING (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_50MHz | GPIO_OUTPUT_CLEAR | \ + GPIO_PORTG | GPIO_PIN7) /**************************************************************************************************** * Public data @@ -85,6 +100,18 @@ void weak_function stm32_spiinitialize(void); +/**************************************************************************************************** + * Name: sporadic_note_initialize + * + * Description: + * This configuration has been used for evaluating the NuttX sporadic scheduler. + * + ****************************************************************************************************/ + +#ifdef CONFIG_SPORADIC_INSTRUMENTATION +void sporadic_note_initialize(void); +#endif + #endif /* __ASSEMBLY__ */ #endif /* __CONFIGS_STM32F746G_DISCO_SRC_STM32F746G_DISCO_H */