Improved standalone RT and NIL demos.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7984 35acf78f-673a-0410-8e92-d51de3d6d3f4
master
Giovanni Di Sirio 2015-05-15 09:41:24 +00:00
parent f3c7490379
commit dc087c5fec
6 changed files with 172 additions and 14 deletions

View File

@ -16,8 +16,29 @@
#include "nil.h" #include "nil.h"
#if !defined(SYSTEM_CLOCK)
#define SYSTEM_CLOCK 8000000U
#endif
/* /*
* Blinker thread #1. * @brief System Timer handler.
*/
CH_IRQ_HANDLER(SysTick_Handler) {
CH_IRQ_PROLOGUE();
chSysLockFromISR();
chSysTimerHandlerI();
chSysUnlockFromISR();
CH_IRQ_EPILOGUE();
}
static uint32_t seconds_counter;
static uint32_t minutes_counter;
/*
* Seconds counter thread.
*/ */
static THD_WORKING_AREA(waThread1, 128); static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) { static THD_FUNCTION(Thread1, arg) {
@ -26,6 +47,21 @@ static THD_FUNCTION(Thread1, arg) {
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1000);
seconds_counter++;
}
}
/*
* Minutes counter thread.
*/
static THD_WORKING_AREA(waThread2, 128);
static THD_FUNCTION(Thread2, arg) {
(void)arg;
while (true) {
chThdSleepSeconds(60);
minutes_counter++;
} }
} }
@ -34,7 +70,8 @@ static THD_FUNCTION(Thread1, arg) {
* match NIL_CFG_NUM_THREADS. * match NIL_CFG_NUM_THREADS.
*/ */
THD_TABLE_BEGIN THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "sleeper", Thread1, NULL) THD_TABLE_ENTRY(waThread1, "counter1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "counter2", Thread2, NULL)
THD_TABLE_END THD_TABLE_END
/* /*
@ -42,6 +79,15 @@ THD_TABLE_END
*/ */
int main(void) { int main(void) {
/*
* Hardware initialization, in this simple demo just the systick timer is
* initialized.
*/
SysTick->LOAD = SYSTEM_CLOCK / NIL_CFG_ST_FREQUENCY - (systime_t)1;
SysTick->VAL = (uint32_t)0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk |
SysTick_CTRL_ENABLE_Msk;
/* /*
* System initializations. * System initializations.
* - Kernel initialization, the main() function becomes a thread and the * - Kernel initialization, the main() function becomes a thread and the

View File

@ -40,7 +40,7 @@
* @note This number is not inclusive of the idle thread which is * @note This number is not inclusive of the idle thread which is
* Implicitly handled. * Implicitly handled.
*/ */
#define NIL_CFG_NUM_THREADS 1 #define NIL_CFG_NUM_THREADS 2
/** @} */ /** @} */

View File

@ -16,8 +16,29 @@
#include "nil.h" #include "nil.h"
#if !defined(SYSTEM_CLOCK)
#define SYSTEM_CLOCK 8000000U
#endif
/* /*
* Blinker thread #1. * @brief System Timer handler.
*/
CH_IRQ_HANDLER(SysTick_Handler) {
CH_IRQ_PROLOGUE();
chSysLockFromISR();
chSysTimerHandlerI();
chSysUnlockFromISR();
CH_IRQ_EPILOGUE();
}
static uint32_t seconds_counter;
static uint32_t minutes_counter;
/*
* Seconds counter thread.
*/ */
static THD_WORKING_AREA(waThread1, 128); static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) { static THD_FUNCTION(Thread1, arg) {
@ -26,6 +47,21 @@ static THD_FUNCTION(Thread1, arg) {
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1000);
seconds_counter++;
}
}
/*
* Minutes counter thread.
*/
static THD_WORKING_AREA(waThread2, 128);
static THD_FUNCTION(Thread2, arg) {
(void)arg;
while (true) {
chThdSleepSeconds(60);
minutes_counter++;
} }
} }
@ -34,7 +70,8 @@ static THD_FUNCTION(Thread1, arg) {
* match NIL_CFG_NUM_THREADS. * match NIL_CFG_NUM_THREADS.
*/ */
THD_TABLE_BEGIN THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "sleeper", Thread1, NULL) THD_TABLE_ENTRY(waThread1, "counter1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "counter2", Thread2, NULL)
THD_TABLE_END THD_TABLE_END
/* /*
@ -42,6 +79,15 @@ THD_TABLE_END
*/ */
int main(void) { int main(void) {
/*
* Hardware initialization, in this simple demo just the systick timer is
* initialized.
*/
SysTick->LOAD = SYSTEM_CLOCK / NIL_CFG_ST_FREQUENCY - (systime_t)1;
SysTick->VAL = (uint32_t)0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk |
SysTick_CTRL_ENABLE_Msk;
/* /*
* System initializations. * System initializations.
* - Kernel initialization, the main() function becomes a thread and the * - Kernel initialization, the main() function becomes a thread and the

View File

@ -40,7 +40,7 @@
* @note This number is not inclusive of the idle thread which is * @note This number is not inclusive of the idle thread which is
* Implicitly handled. * Implicitly handled.
*/ */
#define NIL_CFG_NUM_THREADS 1 #define NIL_CFG_NUM_THREADS 2
/** @} */ /** @} */

View File

@ -16,18 +16,40 @@
#include "ch.h" #include "ch.h"
#if !defined(SYSTEM_CLOCK)
#define SYSTEM_CLOCK 8000000U
#endif
/* /*
* This is a periodic thread that does absolutely nothing except sleeping. * @brief System Timer handler.
*/
CH_IRQ_HANDLER(SysTick_Handler) {
CH_IRQ_PROLOGUE();
chSysLockFromISR();
chSysTimerHandlerI();
chSysUnlockFromISR();
CH_IRQ_EPILOGUE();
}
static uint32_t seconds_counter;
static uint32_t minutes_counter;
/*
* Seconds counter thread.
*/ */
static THD_WORKING_AREA(waThread1, 128); static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) { static THD_FUNCTION(Thread1, arg) {
(void)arg; (void)arg;
chRegSetThreadName("sleeper"); chRegSetThreadName("counter");
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1000);
seconds_counter++;
} }
} }
@ -36,6 +58,15 @@ static THD_FUNCTION(Thread1, arg) {
*/ */
int main(void) { int main(void) {
/*
* Hardware initialization, in this simple demo just the systick timer is
* initialized.
*/
SysTick->LOAD = SYSTEM_CLOCK / CH_CFG_ST_FREQUENCY - (systime_t)1;
SysTick->VAL = (uint32_t)0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk |
SysTick_CTRL_ENABLE_Msk;
/* /*
* System initializations. * System initializations.
* - Kernel initialization, the main() function becomes a thread and the * - Kernel initialization, the main() function becomes a thread and the
@ -49,9 +80,11 @@ int main(void) {
(void) chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); (void) chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
/* /*
* Normal main() thread activity, in this demo it just sleeps. * Normal main() thread activity, in this demo it does nothing except
* increasing the minutes counter.
*/ */
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepSeconds(60);
minutes_counter++;
} }
} }

View File

@ -16,18 +16,40 @@
#include "ch.h" #include "ch.h"
#if !defined(SYSTEM_CLOCK)
#define SYSTEM_CLOCK 8000000U
#endif
/* /*
* This is a periodic thread that does absolutely nothing except sleeping. * @brief System Timer handler.
*/
CH_IRQ_HANDLER(SysTick_Handler) {
CH_IRQ_PROLOGUE();
chSysLockFromISR();
chSysTimerHandlerI();
chSysUnlockFromISR();
CH_IRQ_EPILOGUE();
}
static uint32_t seconds_counter;
static uint32_t minutes_counter;
/*
* Seconds counter thread.
*/ */
static THD_WORKING_AREA(waThread1, 128); static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) { static THD_FUNCTION(Thread1, arg) {
(void)arg; (void)arg;
chRegSetThreadName("sleeper"); chRegSetThreadName("counter");
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1000);
seconds_counter++;
} }
} }
@ -36,6 +58,15 @@ static THD_FUNCTION(Thread1, arg) {
*/ */
int main(void) { int main(void) {
/*
* Hardware initialization, in this simple demo just the systick timer is
* initialized.
*/
SysTick->LOAD = SYSTEM_CLOCK / CH_CFG_ST_FREQUENCY - (systime_t)1;
SysTick->VAL = (uint32_t)0;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk |
SysTick_CTRL_ENABLE_Msk;
/* /*
* System initializations. * System initializations.
* - Kernel initialization, the main() function becomes a thread and the * - Kernel initialization, the main() function becomes a thread and the
@ -49,9 +80,11 @@ int main(void) {
(void) chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); (void) chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
/* /*
* Normal main() thread activity, in this demo it just sleeps. * Normal main() thread activity, in this demo it does nothing except
* increasing the minutes counter.
*/ */
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepSeconds(60);
minutes_counter++;
} }
} }