Improved standalone RT and NIL demos.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7984 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
f3c7490379
commit
dc087c5fec
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -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++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue