-
Notifications
You must be signed in to change notification settings - Fork 0
/
main_task-sample1.rb
128 lines (125 loc) · 4.07 KB
/
main_task-sample1.rb
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
PORT_ID = 1
# mruby特有の初期化
@logger = Nucleo::Serial.new(PORT_ID)
@logger.syslog("### 0907 02:10 main task initialize: #{Nucleo::TASK1_ID}")
task1_que = Nucleo::DataQue.new(Nucleo::DATA_QUE1_ID)
task2_que = Nucleo::DataQue.new(Nucleo::DATA_QUE2_ID)
task3_que = Nucleo::DataQue.new(Nucleo::DATA_QUE3_ID)
# タスクの起動
Nucleo::Task.active(Nucleo::TASK1_ID)
@logger.syslog("### main task task1 active")
# Nucleo::Task.active(Nucleo::TASK2_ID)
# log("### main task task2 active")
#TODO Nucleo::Task.active(Nucleo::TASK3_ID)
#TODO log("$$ main task task3 active")
command = 0
i = 0
@task_no = Nucleo::TASK1_ID #TASK1が1とは限らない
while true
command = @logger.read_byte()
@logger.syslog("read: #{command}")
# case command.chr #TODO mruby-string-ext を追加するとload irep error になる
case command
when 81 #Q Quit
@logger.syslog("main: Q")
break
when 101, 115, 83, 100, 121, 89, 122, 90 #e, s, S, d, y, Y, z, Z
@logger.syslog("main:esSdyYzZ")
case @task_no
when Nucleo::TASK1_ID
task1_que.force_send(command)
@logger.syslog("que1: #{command}") # for debug
when Nucleo::TASK2_ID
task2_que.force_send(command)
@logger.syslog("que2: #{command}") # for debug
when Nucleo::TASK3_ID
task3_que.force_send(command)
@logger.syslog("que3: #{command}") # for debug
end
when 66 #B
@logger.syslog("main: B")
Nucleo::Task.stop_alarm(Nucleo::ALMHDR1)
when 98 #b
@logger.syslog("main: b")
Nucleo::Task.start_alarm(Nucleo::ALMHDR1, 5000)
when 108 #l
@logger.syslog("main: l")
#TODO Nucleo::Task.stop_alarm(@task_no)
when 86 #V 高分解能タイマを読むテスト。mrubyではひとまず実装しない
@logger.syslog("main: V")
when 120 #x
@logger.syslog("main: x")
#TODO Nucleo::Task.raise_termination(@task_no)
when 110 #m
@logger.syslog("main: m")
#TODO Nucleo::Task.resume(@task_no)
when 113 #q 発行したシステムコールを表示しない #mrubyでは実装しない
@logger.syslog("main: q")
when 114 #r
@logger.syslog("main: r")
#TODO Nucleo::Task.rotate_ready_queue(Nucleo::HIGH_PRIORITY)
#TODO Nucleo::Task.rotate_ready_queue(Nucleo::MID_PRIORITY)
#TODO Nucleo::Task.rotate_ready_queue(Nucleo::LOW_PRIORITY)
when 119 #w
@logger.syslog("main: w")
Nucleo::Task.wakeup(@task_no)
when 49 #1
@logger.syslog("main: 1")
@task_no = Nucleo::TASK1_ID
when 50 #2
@logger.syslog("main: 2")
@task_no = Nucleo::TASK2_ID
when 51 #3
@logger.syslog("main: 3")
@task_no = Nucleo::TASK3_ID
when 97 #a
@logger.syslog("main: a :#{@task_no}")
Nucleo::Task.active(@task_no)
when 65 #A
@logger.syslog("main: A")
#TODO result = Nucleo::Task.cancel_activetion(@task_no)
#TODO if result >= 0
#TODO @logger.syslog("can_act(#{@task_no}) returns #{result}")
#TODO end
when 116 #t
@logger.syslog("main: t")
Nucleo::Task.termination(@task_no)
=begin
when 62 #>
@logger.syslog("main: >")
#TODO Nucleo::Task.change_priority(@task_no, Nucleo::HIGH_PRIORITY)
when 61 #=
@logger.syslog("main: =")
#TODO Nucleo::Task.change_priority(@task_no, Nucleo::MID_PRIORITY)
when 60 #<
@logger.syslog("main: <")
#TODO Nucleo::Task.change_priority(@task_no, Nucleo::LOW_PRIORITY)
when 500 #dummy
@logger.syslog("dummy")
=end
when 71 #G
@logger.syslog("main: G")
#TODO priority = Nucleo::Task.get_priority(@task_no)
#TODO @logger.syslog("getpri: #{priority} \r\n")
when 87 #W
@logger.syslog("command: W")
#TODO err = Nucleo::Task.cancel_wakeup(@task_no)
#TODO if err >=0
#TODO @logger.syslog("can_wup#{@task_no} returns#{err}\r\n")
#TODO end
when 117 #u
@logger.syslog("main: u")
#TODO Nucleo::Task.suspend(@task_no)
when 501 #dummy
@logger.syslog("dummy")
when 99 #c
@logger.syslog("main: c")
#TODO Nucleo::Task.start_cyclic(Nucleo::CYCHDR1)
when 67 #C
@logger.syslog("main: C")
#TODO Nucleo::Task.stop_cyclic(Nucleo::CYCHDR1)
# when "\003" #TODO
else
@logger.syslog("Unknown: #{command}")
end
end