KERNEL_COBJS := $(KERNEL_COBJS) chip_config.o uart.o chip_debugboot.o chip_dump.o
KERNEL_COBJS := $(KERNEL_COBJS) i2s_subsystem.o i2c_subsystem.o rotenc.o uzume_callback.o sgtl5000.o
KERNEL_COBJS := $(KERNEL_COBJS) lcd.o bfin_util.o bsp_bluetank.o cmd_bluetank.o
-KERNEL_COBJS := $(KERNEL_COBJS) display_task.o
+KERNEL_COBJS := $(KERNEL_COBJS) display_task.o system_task.o
KERNEL_COBJS := $(KERNEL_COBJS) ntlibc.o ntopt.o ntshell.o ntshell_task.o text_editor.o text_history.o vtrecv.o vtsend.o ntstdio.o
#
#include <cdefBF592-A.h>
#include <bsp_bluetank.h>
#include <rotenc.h>
-#include <lcd.h>
void board_initialize(VP_INT exinf)
{
// ADSP-BF592 PORTG設定
// DR0PRI, RSCK0, RFS0, TD0PRI, TSCK0, TSF0をFERでイネーブルにする
*pPORTG_FER = 0x00ee;
-
- lcd_init();
- lcd_clear();
- lcd_puts("BlueTank");
}
/**
#include "rotenc.cfg"
#include "ntshell_task.cfg"
#include "display_task.cfg"
+#include "system_task.cfg"
INCLUDE("\"bsp_bluetank.h\"");
#include <t_services.h>
#include "display_task.h"
+#include "kernel_id.h"
+#include "lcd.h"
+
+#define DEBUG (1)
+
+static void cmd_clear(display_clear_t *p)
+{
+ lcd_clear();
+}
void display_task(VP_INT exinf)
{
+ display_msg_t *msg;
+
syslog(LOG_NOTICE, "Display Task");
- while (1) {
+
+ lcd_init();
+ lcd_clear();
+ lcd_puts(">");
+
+ while(1) {
+#if DEBUG
+ if (rcv_mbx(MBX_DISPLAY, (T_MSG**)&msg) == E_OK) {
+ switch (msg->cmd) {
+ case DISPLAY_CMD_CLEAR:
+ cmd_clear(&(msg->arg.clear));
+ break;
+ default:
+ break;
+ }
+ rel_mpf(MPF_DISPLAY, (VP)msg);
+ }
+#else
tslp_tsk(1000);
- syslog(LOG_NOTICE, "Display...");
+#endif
+ }
+}
+
+void display_clear(void)
+{
+#if DEBUG
+ VP vp;
+ if (get_mpf(MPF_DISPLAY, &vp) == E_OK) {
+ display_msg_t *msg = (display_msg_t *)vp;
+ msg->cmd = DISPLAY_CMD_CLEAR;
+ msg->arg.clear.dummy = 0;
+ snd_mbx(MBX_DISPLAY, vp);
}
+#else
+#endif
}
INCLUDE("\"display_task.h\"");
-CRE_TSK( DISPLAY_TASK,
- {
- TA_HLNG|TA_ACT, /* 初期状態からアクティブ */
- 0, /* タスク引数 */
- display_task, /* タスク本体 */
- DISPLAY_TASK_PRIORITY, /* タスク優先順位 */
- DISPLAY_TASK_STACK_SIZE, /* タスク・スタックサイズ */
- NULL /* タスク・スタック。NULLならシステムが準備 */
- });
+CRE_MPF(MPF_DISPLAY, {TA_TPRI, 2, 64, NULL});
+CRE_MBX(MBX_DISPLAY, {TA_NULL, TMAX_MPRI, NULL});
+CRE_TSK(DISPLAY_TASK,
+ {
+ TA_HLNG|TA_ACT, /* 初期状態からアクティブ */
+ 0, /* タスク引数 */
+ display_task, /* タスク本体 */
+ DISPLAY_TASK_PRIORITY, /* タスク優先順位 */
+ DISPLAY_TASK_STACK_SIZE, /* タスク・スタックサイズ */
+ NULL /* タスク・スタック。NULLならシステムが準備 */
+ });
#include <s_services.h>
#ifndef DISPLAY_TASK_PRIORITY
-# define DISPLAY_TASK_PRIORITY (7)
+# define DISPLAY_TASK_PRIORITY (6)
#endif
#ifndef DISPLAY_TASK_STACK_SIZE
# define DISPLAY_TASK_STACK_SIZE (2048)
#endif
+#define DISPLAY_CMD_CLEAR 0
+
+typedef struct {
+ unsigned char dummy;
+} display_clear_t;
+
+typedef struct {
+ T_MSG header;
+ unsigned char cmd;
+ union {
+ display_clear_t clear;
+ } arg;
+} display_msg_t;
+
#ifndef _MACRO_ONLY
void display_task(VP_INT exinf);
#endif
--- /dev/null
+/**
+ * @file system_task.c
+ * @author Shinichiro Nakamura
+ * @brief
+ * @details
+ */
+
+#include <t_services.h>
+#include "system_task.h"
+#include "display_task.h"
+
+void system_task(VP_INT exinf)
+{
+ syslog(LOG_NOTICE, "System Task");
+ while(1) {
+ tslp_tsk(5000);
+ syslog(LOG_NOTICE, "display_clear()");
+ display_clear();
+ }
+}
+
--- /dev/null
+
+#define _MACRO_ONLY
+
+INCLUDE("\"system_task.h\"");
+
+CRE_TSK(SYSTEM_TASK,
+ {
+ TA_HLNG|TA_ACT, /* 初期状態からアクティブ */
+ 0, /* タスク引数 */
+ system_task, /* タスク本体 */
+ SYSTEM_TASK_PRIORITY, /* タスク優先順位 */
+ SYSTEM_TASK_STACK_SIZE, /* タスク・スタックサイズ */
+ NULL /* タスク・スタック。NULLならシステムが準備 */
+ });
+
--- /dev/null
+/**
+ * @file system_task.h
+ * @author Shinichiro Nakamura
+ * @brief
+ * @details
+ */
+
+#ifndef SYSTEM_TASK_H
+#define SYSTEM_TASK_H
+
+#include <t_services.h>
+#include <s_services.h>
+
+#ifndef SYSTEM_TASK_PRIORITY
+# define SYSTEM_TASK_PRIORITY (7)
+#endif
+
+#ifndef SYSTEM_TASK_STACK_SIZE
+# define SYSTEM_TASK_STACK_SIZE (2048)
+#endif
+
+#ifndef _MACRO_ONLY
+void system_task(VP_INT exinf);
+#endif
+
+#endif
+