This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.
For details, refer to the following.
http://www.s-itoc.jp/activity/research/mrubyc/mrubyc_tutorial/436
Note:There is a change in rtt0.h from the original source in the mruby/c. It was necessary for inclusion in C ++ source.
main.cpp@0:33feccbba3ff, 2017-02-15 (annotated)
- Committer:
- tk_takateku
- Date:
- Wed Feb 15 01:03:35 2017 +0000
- Revision:
- 0:33feccbba3ff
Commit before publishing
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tk_takateku | 0:33feccbba3ff | 1 | #include "mbed.h" |
tk_takateku | 0:33feccbba3ff | 2 | |
tk_takateku | 0:33feccbba3ff | 3 | #include "mrubyc/hal/hal.h" |
tk_takateku | 0:33feccbba3ff | 4 | #include "mrubyc/mrubyc.h" |
tk_takateku | 0:33feccbba3ff | 5 | |
tk_takateku | 0:33feccbba3ff | 6 | DigitalIn mybutton(USER_BUTTON); |
tk_takateku | 0:33feccbba3ff | 7 | DigitalOut myled(LED1); |
tk_takateku | 0:33feccbba3ff | 8 | RawSerial mysci(USBTX, USBRX); |
tk_takateku | 0:33feccbba3ff | 9 | |
tk_takateku | 0:33feccbba3ff | 10 | extern const uint8_t sample1[]; |
tk_takateku | 0:33feccbba3ff | 11 | extern const uint8_t sample2[]; |
tk_takateku | 0:33feccbba3ff | 12 | |
tk_takateku | 0:33feccbba3ff | 13 | int hal_write(int fd, const void *buf, size_t nbytes) |
tk_takateku | 0:33feccbba3ff | 14 | { |
tk_takateku | 0:33feccbba3ff | 15 | return mysci.write((const uint8_t *)buf, (int)nbytes, NULL, SERIAL_EVENT_TX_COMPLETE); |
tk_takateku | 0:33feccbba3ff | 16 | } |
tk_takateku | 0:33feccbba3ff | 17 | |
tk_takateku | 0:33feccbba3ff | 18 | int hal_flush(int fd) |
tk_takateku | 0:33feccbba3ff | 19 | { |
tk_takateku | 0:33feccbba3ff | 20 | char char1 = 0; |
tk_takateku | 0:33feccbba3ff | 21 | while (mysci.readable()) |
tk_takateku | 0:33feccbba3ff | 22 | { |
tk_takateku | 0:33feccbba3ff | 23 | char1 = mysci.getc(); |
tk_takateku | 0:33feccbba3ff | 24 | } |
tk_takateku | 0:33feccbba3ff | 25 | return 0; |
tk_takateku | 0:33feccbba3ff | 26 | } |
tk_takateku | 0:33feccbba3ff | 27 | |
tk_takateku | 0:33feccbba3ff | 28 | void hal_delay(mrb_vm *vm, mrb_value *v) |
tk_takateku | 0:33feccbba3ff | 29 | { |
tk_takateku | 0:33feccbba3ff | 30 | wait_ms((int)GET_INT_ARG(0)); |
tk_takateku | 0:33feccbba3ff | 31 | } |
tk_takateku | 0:33feccbba3ff | 32 | |
tk_takateku | 0:33feccbba3ff | 33 | void hal_led(mrb_vm *vm, mrb_value *v) |
tk_takateku | 0:33feccbba3ff | 34 | { |
tk_takateku | 0:33feccbba3ff | 35 | myled = (int)GET_INT_ARG(0); |
tk_takateku | 0:33feccbba3ff | 36 | } |
tk_takateku | 0:33feccbba3ff | 37 | |
tk_takateku | 0:33feccbba3ff | 38 | void hal_button(mrb_vm *vm, mrb_value *v) |
tk_takateku | 0:33feccbba3ff | 39 | { |
tk_takateku | 0:33feccbba3ff | 40 | int sw = mybutton; |
tk_takateku | 0:33feccbba3ff | 41 | SET_INT_RETURN(sw); |
tk_takateku | 0:33feccbba3ff | 42 | } |
tk_takateku | 0:33feccbba3ff | 43 | |
tk_takateku | 0:33feccbba3ff | 44 | int main() { |
tk_takateku | 0:33feccbba3ff | 45 | mysci.baud(115200); // 115Kbps |
tk_takateku | 0:33feccbba3ff | 46 | mysci.format(8, Serial::None, 1); // 8bt, none parity, stop bit 1 |
tk_takateku | 0:33feccbba3ff | 47 | mrbc_init(); |
tk_takateku | 0:33feccbba3ff | 48 | mrbc_define_method(0, mrbc_class_object, "led1_write", hal_led); |
tk_takateku | 0:33feccbba3ff | 49 | mrbc_define_method(0, mrbc_class_object, "delay", hal_delay); |
tk_takateku | 0:33feccbba3ff | 50 | mrbc_define_method(0, mrbc_class_object, "sw1_read", hal_button); |
tk_takateku | 0:33feccbba3ff | 51 | mrbc_create_task( sample1, 0 ); |
tk_takateku | 0:33feccbba3ff | 52 | mrbc_create_task( sample2, 0 ); |
tk_takateku | 0:33feccbba3ff | 53 | |
tk_takateku | 0:33feccbba3ff | 54 | mrbc_run(); |
tk_takateku | 0:33feccbba3ff | 55 | |
tk_takateku | 0:33feccbba3ff | 56 | } |
tk_takateku | 0:33feccbba3ff | 57 |