aboutsummaryrefslogtreecommitdiffstats
path: root/testhal/common/irq_storm.h
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2015-04-11 14:37:16 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2015-04-11 14:37:16 +0000
commit5a4986fa34ba272a9fce83fb33eef99470c55fd4 (patch)
tree4ebce6169629258f1a61775398cb0436189551c6 /testhal/common/irq_storm.h
parente66d39847114737997496308853b649564f9beb3 (diff)
downloadChibiOS-5a4986fa34ba272a9fce83fb33eef99470c55fd4.tar.gz
ChibiOS-5a4986fa34ba272a9fce83fb33eef99470c55fd4.tar.bz2
ChibiOS-5a4986fa34ba272a9fce83fb33eef99470c55fd4.zip
Unified IRQ Storm code.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7882 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'testhal/common/irq_storm.h')
-rw-r--r--testhal/common/irq_storm.h166
1 files changed, 166 insertions, 0 deletions
diff --git a/testhal/common/irq_storm.h b/testhal/common/irq_storm.h
new file mode 100644
index 000000000..f465fd366
--- /dev/null
+++ b/testhal/common/irq_storm.h
@@ -0,0 +1,166 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file irq_storm.h
+ * @brief IRQ Storm stress test header.
+ *
+ * @addtogroup IRQ_STORM
+ * @{
+ */
+
+#ifndef _IRQ_STORM_H_
+#define _IRQ_STORM_H_
+
+/*===========================================================================*/
+/* Module constants. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module pre-compile time settings. */
+/*===========================================================================*/
+
+#ifndef RANDOMIZE
+#define RANDOMIZE FALSE
+#endif
+
+#ifndef ITERATIONS
+#define ITERATIONS 100
+#endif
+
+#ifndef NUM_THREADS
+#define NUM_THREADS 4
+#endif
+
+#ifndef MAILBOX_SIZE
+#define MAILBOX_SIZE 4
+#endif
+
+/**
+ * @name Configuration options
+ * @{
+ */
+/**
+ * @brief Timings randomization.
+ */
+#if !defined(IRQ_STORM_CFG_RANDOMIZE) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_RANDOMIZE FALSE
+#endif
+
+/**
+ * @brief Number of test iterations.
+ */
+#if !defined(IRQ_STORM_CFG_ITERATIONS) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_ITERATIONS 100
+#endif
+
+/**
+ * @brief Number of storm threads.
+ */
+#if !defined(IRQ_STORM_CFG_NUM_THREADS) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_NUM_THREADS 4
+#endif
+
+/**
+ * @brief Priority of storm threads.
+ */
+#if !defined(IRQ_STORM_CFG_THREADS_PRIORITY) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_THREADS_PRIORITY (tprio_t)(NORMALPRIO-20)
+#endif
+
+/**
+ * @brief Mailboxes size.
+ */
+#if !defined(IRQ_STORM_CFG_MAILBOX_SIZE) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_MAILBOX_SIZE 4
+#endif
+
+/**
+ * @brief Stack size for worker threads.
+ */
+#if !defined(IRQ_STORM_CFG_STACK_SIZE) || defined(__DOXYGEN__)
+#define IRQ_STORM_CFG_STACK_SIZE 128
+#endif
+/** @} */
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module data structures and types. */
+/*===========================================================================*/
+
+typedef struct {
+ /**
+ * @brief Stream for output.
+ */
+ BaseSequentialStream *out;
+ /**
+ * @brief LED port.
+ */
+ ioportid_t port;
+ /**
+ * @brief LED bit.
+ */
+ unsigned pad;
+ /**
+ * @brief GPT driver 1.
+ */
+ GPTDriver *gpt1p;
+ /**
+ * @brief GPT driver 2.
+ */
+ GPTDriver *gpt2p;
+ /**
+ * @brief GPT1 configuration 1.
+ */
+ const GPTConfig *gptcfg1p;
+ /**
+ * @brief GPT1 configuration 2.
+ */
+ const GPTConfig *gptcfg2p;
+ /**
+ * @brief System clock.
+ */
+ uint32_t sysclk;
+} irq_storm_config_t;
+
+/*===========================================================================*/
+/* Module macros. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void irq_storm_gpt1_cb(GPTDriver *gptp);
+ void irq_storm_gpt2_cb(GPTDriver *gptp);
+ void irq_storm_execute(const irq_storm_config_t *cfg);
+#ifdef __cplusplus
+}
+#endif
+
+/*===========================================================================*/
+/* Module inline functions. */
+/*===========================================================================*/
+
+#endif /* _IRQ_STORM_H_ */
+
+/** @} */