chibiosでLチカの練習 その4
mutex使ってみた。
#include "ch.h"
#include "hal.h"
#define CONSOLE_WA_SIZE THD_WORKING_AREA_SIZE(4096)
#define cputs(msg) chMsgSend(cdtp, (msg_t) msg)
static MUTEX_DECL(m1);
static thread_t * cdtp;
static THD_FUNCTION(console_thread, arg)
{
(void) arg;
while (!chThdShouldTerminateX())
{
thread_t * tp = chMsgWait();
puts((char *) chMsgGet(tp));
fflush(stdout);
chMsgRelease(tp, MSG_OK);
}
}
static THD_WORKING_AREA(waThread1, 1024);
static THD_FUNCTION(Thread1, arg)
{
(void) arg;
chRegSetThreadName("green");
while (TRUE)
{
chMtxLock(&m1);
cputs("green on");
chThdSleepMilliseconds(1000);
cputs("green off");
chMtxUnlock(&m1);
}
}
static THD_WORKING_AREA(waThread2, 1024);
static THD_FUNCTION(Thread2, arg)
{
(void) arg;
chRegSetThreadName("yellow");
while (TRUE)
{
chMtxLock(&m1);
cputs("yellow on");
chThdSleepMilliseconds(1000);
cputs("yellow off");
chMtxUnlock(&m1);
}
}
static THD_WORKING_AREA(waThread3, 1024);
static THD_FUNCTION(Thread3, arg)
{
(void) arg;
chRegSetThreadName("red");
while (TRUE)
{
chMtxLock(&m1);
cputs("red on");
chThdSleepMilliseconds(1000);
cputs("red off");
chMtxUnlock(&m1);
}
}
int main(void)
{
halInit();
chSysInit();
chMtxObjectInit(&m1);
cdtp = chThdCreateFromHeap(NULL, CONSOLE_WA_SIZE, NORMALPRIO, console_thread, NULL);
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO + 1, Thread1, NULL);
chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO + 1, Thread2, NULL);
chThdCreateStatic(waThread3, sizeof(waThread3), NORMALPRIO + 1, Thread3, NULL);
while (!chThdShouldTerminateX())
{
chThdSleepMilliseconds(990);
}
return 0;
}
Author And Source
この問題について(chibiosでLチカの練習 その4), 我々は、より多くの情報をここで見つけました https://qiita.com/ohisama@github/items/69b995037fb5ef0d8ba5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .