RTOS:RTOS: TI-RTOS Kernel Argument
前回は、 TI-RTOS Kernel で.cfgファイルをGUIでthreadを生成しタスクを複数実行することをした。せっかくなので、引数をスレッドに渡してみる。
前回作成したプロジェクトをコピーしてRenameなりをして作業をする。
thread0のArgument 0の所には1000を入れている。
続いて、
thread1のArgument 0の所に250をいれる。 Ctrl+Sを押して保存する。
empty.c(各スレッドを記述している)を開いて編集をする。
void *mainThread0(void *arg0)
{
/* 1 second delay */
uint32_t time = 1000;
/* Call driver init functions */
GPIO_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn on user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
while (1) {
GPIO_toggle(CONFIG_GPIO_LED_0);
Task_sleep(time * (1000 / Clock_tickPeriod));
}
}
と以前はなっていたところを
void *mainThread0(UArg arg0, UArg arg1)
{
/* 1 second delay */
// uint32_t time = 1000;
/* Call driver init functions */
GPIO_init();
/* Configure the LED pin */
GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/* Turn on user LED */
GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON);
while (1) {
GPIO_toggle(CONFIG_GPIO_LED_0);
Task_sleep(((UInt)arg0) * (1000 / Clock_tickPeriod));
}
}
と引数をとるように編集する。
void *mainThread0(UArg arg0, UArg arg1)
と関数名の所で引数を入れることと
Task_sleepの所で、その引数を使う。
これは、引数で受けとった数字の間隔でタスクが実行される事になる。
mainThread1も同じように編集する。
main_tirtos.c の方は、extern の参照している所を
extern void *mainThread0(UArg arg0, UArg arg1);
extern void *mainThread1(UArg arg0, UArg arg1);
と変更する。
これをビルトしてエラーがなければ、書き込んでみる。
ちゃんと点滅する。
thread1のArgument 0の所に250を入れたが、100にすると点滅間隔が引数に応じて変更される事が確認できる。
拝見したサンプルが、UArg という型を使っていたのでそのまま使っている。
実はよくこれがわかっていない。
uint16_t
としてもちゃんと動く事は確認している。
extern void *mainThread0(uint16_targ0, uint16_t arg1);
Task_sleep(((uint16_t)arg0) * (1000 / Clock_tickPeriod));
となっていてもOK。
コメント
コメントを投稿