-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsample.c
More file actions
135 lines (117 loc) · 3.5 KB
/
Copy pathsample.c
File metadata and controls
135 lines (117 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 サンプルプログラム */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */
#include "kernel.h"
#include "kernel_id.h"
#if 0
#include "h8_3048.h"
#else
#include "h83069f.h"
#endif
#include "h8_sci.h"
#include <string.h>
#define XON 0x11
#define XOFF 0x13
/* メイン関数 */
int main()
{
sta_hos();
return 0;
}
/* 初期化ハンドラ */
void Initialize(VP_INT exinf)
{
/* SCIの初期化 */
Sci_Initialize(exinf);
}
typedef struct {
T_MSG pk_msg; /* OS管理領域 */
int len;
ID sender; /* 送信元タスクID */
char buf[64];
} MESSAGE;
/* サンプルタスク */
void appli(VP_INT exinf)
{
char count[9];
char task_id[2];
MESSAGE* msg;
ID this;
memset(count,'0',sizeof(count));
count[8] = task_id[1] = '\0';
while (1) {
if (++count[7] > '9') {
count[7] = '0';
if (++count[6] > '9') {
count[6] = '0';
if (++count[5] > '9') {
count[5] = '0';
if (++count[4] > '9') {
count[4] = '0';
if (++count[3] > '9') {
count[3] = '0';
if (++count[2] > '9') {
count[2] = '0';
if (++count[1] > '9') {
count[1] = '0';
if (++count[0] > '9') {
count[0] = '0';
}
}
}
}
}
}
}
}
/* メモリプールから取得 */
get_mpf(MPID_TEST,(VP)&msg);
strcpy(msg->buf,"This is test messages from Task");
get_tid(&this);
task_id[0] = this + '0';
strcat(msg->buf,task_id);
strcat(msg->buf,". count ");
strcat(msg->buf,count);
strcat(msg->buf,"\r\n");
msg->len = strlen(msg->buf);
msg->sender = this;
snd_mbx(MID_TEST,(T_MSG *)msg);
}
}
void driver(VP_INT exinf)
{
char *ptr;
char *limit;
unsigned char c;
MESSAGE *msg;
T_MSG *pk_msg;
while (1) {
if (SCI1.SSR.BIT.RDRF) {
c = SCI1.RDR;
SCI1.SSR.BIT.RDRF = 0;
while (c == XOFF) {
while (!SCI1.SSR.BIT.RDRF);
c = SCI1.RDR;
SCI1.SSR.BIT.RDRF = 0;
if (c == XON) break;
}
}
rcv_mbx(MID_TEST,&pk_msg);
msg = (MESSAGE *)pk_msg;
ptr = msg->buf;
limit = &msg->buf[msg->len];
while (ptr < limit) {
while (!SCI1.SSR.BIT.TDRE);
SCI1.TDR = *ptr++;
SCI1.SSR.BIT.TDRE = 0;
}
/* メモリブロック開放 */
rel_mpf(MPID_TEST,(VP)msg);
}
}
/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* ------------------------------------------------------------------------ */