Improved standalone RT and NIL demos.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7984 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
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"
#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_FUNCTION(Thread1, arg) {
@ -26,6 +47,21 @@ static THD_FUNCTION(Thread1, arg) {
while (true) {
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.
*/
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
/*
@ -42,6 +79,15 @@ THD_TABLE_END
*/
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.
* - 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
* Implicitly handled.
*/
#define NIL_CFG_NUM_THREADS 1
#define NIL_CFG_NUM_THREADS 2
/** @} */

View File

@ -16,8 +16,29 @@
#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_FUNCTION(Thread1, arg) {
@ -26,6 +47,21 @@ static THD_FUNCTION(Thread1, arg) {
while (true) {
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.
*/
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
/*
@ -42,6 +79,15 @@ THD_TABLE_END
*/
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.
* - 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
* Implicitly handled.
*/
#define NIL_CFG_NUM_THREADS 1
#define NIL_CFG_NUM_THREADS 2
/** @} */

View File

@ -16,18 +16,40 @@
#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_FUNCTION(Thread1, arg) {
(void)arg;
chRegSetThreadName("sleeper");
chRegSetThreadName("counter");
while (true) {
chThdSleepMilliseconds(1000);
seconds_counter++;
}
}
@ -36,6 +58,15 @@ static THD_FUNCTION(Thread1, arg) {
*/
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.
* - 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);
/*
* 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) {
chThdSleepMilliseconds(1000);
chThdSleepSeconds(60);
minutes_counter++;
}
}

View File

@ -16,18 +16,40 @@
#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_FUNCTION(Thread1, arg) {
(void)arg;
chRegSetThreadName("sleeper");
chRegSetThreadName("counter");
while (true) {
chThdSleepMilliseconds(1000);
seconds_counter++;
}
}
@ -36,6 +58,15 @@ static THD_FUNCTION(Thread1, arg) {
*/
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.
* - 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);
/*
* 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) {
chThdSleepMilliseconds(1000);
chThdSleepSeconds(60);
minutes_counter++;
}
}